标签: temporal-workflow

时间工作流与 Cadence 工作流

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

cadence-workflow temporal-workflow

18
推荐指数
3
解决办法
1万
查看次数

在 Cadence/Temporal 工作流程中处理信号的最佳方式/模式是什么

当像文档建议那样使用信号时:

public class MyWorkflow{
   public Output myWorkflwMethod(Input input){
      ...
   }

   public void mySignalMethod(request){
     // do actual processing here. 
     ...
   }
}
Run Code Online (Sandbox Code Playgroud)

我可能会遇到以下问题:

  1. 我想保证 FIFO 一次处理一个(在同一信号名称内或跨所有信号名称)
  2. 我想处理signalWithStart 的“竞争条件”,其中信号方法调用得太早
  3. 我想安全地重置工作流程。重置后,信号可以在历史早期重新应用
  4. 我想确保工作流程不会在处理信号之前提前完成

cadence-workflow temporal-workflow uber-cadence

5
推荐指数
1
解决办法
2294
查看次数

Uber Cadence 中子工作流的良好用例是什么?

我正在尝试使用 Uber Cadence 了解子工作流的用例。与简单地将您的工作流程拆分为多个功能相比,子工作流程的优势是什么?我有一个相当复杂的工作流程,我正在考虑将其拆分为多个子工作流程,但我不确定这样做的利弊。

cadence-workflow temporal-workflow

4
推荐指数
1
解决办法
1329
查看次数

多线程在 Cadence/Temporal 工作流程中如何工作?

在 Cadence/Temporal 工作流程编程中:

  • 不允许使用本机线程库。例如,在Java中,线程必须通过Async.procedure或创建,Async.function而在Golang中,线程必须通过 创建workflow.Go。所以为什么?
  • 是否存在像使用本机线程那样的竞争条件?例如,应该使用Hashtableor来代替线程安全?ConcurrentHashMapHashMap

cadence-workflow temporal-workflow uber-cadence

4
推荐指数
1
解决办法
1502
查看次数

如果我们在时间上使用多个任务队列,我的工作人员如何知道轮询哪个任务?

  1. 如果我在时间匹配中设置10个视频任务队列,如果我们有5个匹配服务,时间将为每个匹配服务分配2个视频任务队列?
  2. 如果我在时间匹配中设置 10 个视频任务队列,如果我们有 50 个工作人员,他们如何分配到哪个任务队列进行轮询?每个队列有 5 个工作人员进行轮询?我们如何划分哪个worker轮询哪个视频任务队列?谁能稍微解释一下原理吗?

cadence-workflow temporal-workflow uber-cadence

4
推荐指数
1
解决办法
3444
查看次数

将外部事件发送到工作流

在我们的节奏工作流中,我们通常需要等待一定的时间才能继续外部事件(即电子邮件阅读、链接点击等)。

我想知道将这些事件通知我们的工作流程的最佳方式是什么。信号是正确的方式,还是我们应该创建一个等待事件的活动?

从我所见,我们需要创建一个信号通道ch := workflow.GetSignalChannel(ctx, SignalName),但是上下文在活动中不可用。

cadence-workflow temporal-workflow

3
推荐指数
1
解决办法
403
查看次数

我应该如何为 ActivityOptions 选择 ScheduleToStartTimeout 和 StartToCloseTimeout 值

ActivityOptions 中有四个不同的超时选项,其中两个是强制的,没有任何默认值:ScheduleToStartTimeoutStartToCloseTimeout

选择这些超时值时应考虑哪些因素?

cadence-workflow temporal-workflow

3
推荐指数
1
解决办法
1603
查看次数

为调用子工作流程的工作流程编写测试时出现临时错误:“无法找到工作流程类型”

我正在使用 golang SDK 进行时间处理。我正在为我的工作流程编写测试LoadCreateWorkflow。它有一个活动并且还启动一个子工作流程LoadLifecycleWorkflow

在为其编写单元测试时,我模拟了活动和子工作流程LoadLifecycleWorkflow

    s.env.OnActivity(CreateLoadActivity, mock.Anything, mock.Anything).Return(nil, nil).Once()
    s.env.OnWorkflow(LoadLifecycleWorkflow, mock.Anything).Return(nil)
    s.env.ExecuteWorkflow(LoadCreateWorkflow, wfParams)
Run Code Online (Sandbox Code Playgroud)

(这里 s.env 是单元测试的TestWorkflowEnvironment):

import (
    ...
    "go.temporal.io/sdk/testsuite"
)

type UnitTestSuite struct {
    suite.Suite
    testsuite.WorkflowTestSuite

    env *testsuite.TestWorkflowEnvironment
}

func (s *UnitTestSuite) SetupTest() {
    s.env = s.NewTestWorkflowEnvironment()
}
Run Code Online (Sandbox Code Playgroud)

运行我的测试时出现错误:panic: unable to find workflow type: LoadLifecycleWorkflow. Supported types: [LoadCreateWorkflow]

在我的工作流程模块的 init 函数中,我注册了它和子工作流程:

worker.RegisterWorkflow(LoadCreateWorkflow)
worker.RegisterActivity(CreateLoadActivity)
worker.RegisterWorkflow(LoadLifecycleWorkflow)
Run Code Online (Sandbox Code Playgroud)

为什么我会收到“我的未注册”错误LoadLifecycleWorkflow?如何解决?

testing go temporal-workflow

2
推荐指数
1
解决办法
3738
查看次数

2
推荐指数
1
解决办法
1482
查看次数

Cadence 决策任务究竟是什么?

活动任务很容易理解,因为它正在执行一个活动……但什么是决策任务?工作人员是否从一开始(使用已完成活动的记录)贯穿整个工作流程,直到它遇到下一个需要做的“有意义”的事情,同时对接下来需要做的事情做出“决定”?

cadence-workflow temporal-workflow

0
推荐指数
2
解决办法
2081
查看次数