自学内容网 自学内容网

【Temporal】方法规范

在workflow或者childWorkflow的方法代码中,不能使用golang的一些库方法,比如sleep,go协程等,必须使用其对应的封装方法,比如对应关系如下:

  • time.Sleep -> workflow.Sleep

  • go xx -> workflow.Go(xx)

这是因为workflow或者childWorkflow代码是在workflow的线程或者协程中调度的,任务的控制不能交给golang处理。

而对于activity的方法代码中,就应该使用golang的库方法,而不是workflow的封装方法。

换句话说:

  • workflow或者childWorkflow方法代码应该只包含编排/管理其他工作流实体(如activity/childWF/channel/等)的逻辑;

  • activity方法代码才是具体的业务逻辑。

这也是temporal提倡的代码规范

从workflow和activity的方法定义我们也可以知道:
对于activity来说,方法定义的第一个参数必须是golang 的context:

func StartCteTaskActivity(ctx context.Context, xx, xx) (xx, error)

对于workflow来说,方法定义的第一个参数必须是workflow 的context

func RunTimeNodeMonitorWorkflow(wfCtx workflow.Context, xx, xx) (xx, error)

https://community.temporal.io/t/workflow-sleep-details/1161


原文地址:https://blog.csdn.net/m0_47495420/article/details/142387959

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!