当前位置: 首页 > 知识库问答 >
问题:

历史回放如何以节奏工作?

邢寒
2023-03-14

历史回放如何在抑扬顿挫中发挥作用?

我有一个按顺序调用两个活动的工作流。

比方说,第一个活动完成了,第二个活动有100行代码。如果应用服务器在执行activity2中的第50行代码时重新启动,它会从第50行开始执行吗?如果是,cadence内部正在发生什么神奇的事情?

@Override
    public String composeGreeting(String greeting, String name) throws Exception {
      FileWriter fw =
          new FileWriter(
              "/Users/kumble-004/Documents/Uber_Cadence/Sample_Projects/TestCadence/src/com/company/"+name+".txt");

      System.out.println(
          DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss").format(LocalDateTime.now())
              + " [Activity] started");

      long time = System.currentTimeMillis() + 240000;
      int i = 0, j=1;

      while (System.currentTimeMillis() != time) {
        if(i++ %10000000 == 0) {
          fw.write("print - " + j++ + " " +
                  DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss").format(LocalDateTime.now()) +"\n");
        }
      }
      fw.close();
      System.out.println(
          DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss").format(LocalDateTime.now())
              + " [Activity] ended");

      return greeting + " " + name + "!";
    }
  }

我的hello活动中有上面的代码。此代码将运行4分钟,当条件满足时,它将在文件中写入数据

我启动了一个工作流,并在打印[活动]开始后退出了节奏服务器。我没有启动它只是停止了它。但4分钟后,它正好打印[活动]在控制台中结束。我想知道这怎么可能,因为我停止了服务器,但代码正在执行,数据正在写入文件。

当我通过节奏用户界面检查它时,它显示最后的历史记录是ActivityTaskStarted。我启动了我的服务器。15分钟后(因为计划是15分钟)活动返回事件ActivityTaskTimedOut,由于超时,整个whorkflow都失败了。

请解释重新启动节奏服务器时发生了什么?

共有1个答案

王建华
2023-03-14

如果应用服务器在执行activity2中的第50行代码时重启,它会从第50行开始执行吗

不,它不会从第50行自动恢复。

重放仅发生在工作流中。它依靠历史来重放和重建内存堆栈。工作流中发生的所有事情都存储在历史记录中:

  • 工作流代码中的每一步,都会生成一堆名为“决策”的结果
  • 活动/ChildWorkflow结果
  • 信号等外部事件
  • 计时器
  • 等等。

有关更多详细信息,请参阅有关重播历史记录的文档,以及什么是节奏决策任务?

但4分钟后,它正在打印[活动]在控制台中结束。我想知道这怎么可能,因为我停止了服务器,但代码正在执行,数据正在写入文件。

那是因为你的活动工作者还在运行。您运行的代码纯粹是活动代码。

但是,当服务器关闭时,它活动结果将无法报告给服务器。这意味着历史记录将丢失它,工作流可能会重新安排另一个活动(如果启用重试)。

请参考关于活动超时的文档,然后重试

 类似资料:
  • 我的案例是批准、拒绝或返回我的请求,并基于该工作流更改其状态。candence如何帮助保存/检索每个工作流的所有操作历史。

  • 每个工作流都应在单独的工作流类中实现? 是否建议实现一个通用工作流类,在该类中,我们将使用传递给工作流的参数调用活动和触发计时器? 在我们的用例中,我们将从UI创建工作流,它将由最终用户创建。所以我们不能一开始就定义我们的工作流程。 这是推荐的方法吗?

  • 可以运行不需要连接到cadence服务器的本地活动。是否有适当的方式在本地运行工作流,以防发生cadence中断?我正在使用Go客户端。

  • 我想在普罗米修斯监控当前运行的节奏工作流的数量。 我检查了由不同的cadence服务(如< code>cadence_history 、< code>cadence_worker 、< code>cadence_frontend等)导出的指标,我能找到的唯一与工作流相关的指标是: ( 函数收集正在运行的工作流数量。然而,cadence文档说“大量使用这个API可能会导致巨大的持久性压力”,所以我认

  • 主要内容:人工智能的成熟(1943-1952),人工智能的诞生(1952-1956),黄金岁月 - 早期的热情(1956-1974),第一个AI寒冬(1974-1980),AI的热潮(1980-1987),第二次AI寒冬(1987-1993),智能代理的出现(1993-2011),深度学习,大数据和人工智能(2011年至今),以下是纠正/补充内容:人工智能不是一个新词,也不是研究人员的新技术。这项技术比想象的要老很多。甚至在古希腊和埃及神话中也有机械人的神话。以下是AI历史上的一些里程碑,它定义

  • temporal.io如何与cadenceworkflow.io?如果根据节奏工作流服务启动一个新项目,应该使用什么?