【问题标题】:Flow Framework: How does @Signal behave and can be used to perform some dynamic tasks, which change the execution flow in SWF流框架:@Signal 的行为方式以及可用于执行一些动态任务,这些任务会改变 SWF 中的执行流程
【发布时间】:2017-09-26 04:23:39
【问题描述】:

我对流框架研究的一些观察是:

@Signal 在收到信号后开始在决策者重播中执行。 @Signal 方法在同一工作流的所有未来重播中执行。 (一旦收到信号,决策者在每次重播时执行@Signal)。 @Asynchronus 方法不应该是长时间运行的任务,因为决策者只有在所有 @Asynch 方法都完成执行后才会安排 Activity Tasks。

我的观察正确吗?如果是:那么如果在同一个工作流程中我想要一个信号,它执行一些任务然后停止执行以供将来重播怎么办。例如暂停信号:用户可能会多次暂停和恢复工作流。

另外一个问题是:flow如何处理以下几种情况:一个decisioner超时,同时两个事件来了:Cancel workflow和Activity Completed。决策者如何确定它们是相关的,如果取消,则不响应 ActivityComplatedEvent。

【问题讨论】:

  • 请在不同的帖子中提出多个问题,并至少提供一些代码。

标签: amazon-swf


【解决方案1】:

不要从回放的角度考虑工作流行为是有帮助的。重放只是一种恢复工作流状态的机制。但是,当编写工作流逻辑时,除了确定性的要求之外,它并不是真正可见的,而且工作流代码是异步且非阻塞的。因此,在设计工作流逻辑时永远不要考虑重放。写它是一个本地执行的异步程序。

所以当重放不是以某种方式时,@Signal 只是一个回调方法,每个接收到的信号执行一次。因此,如果您从 @Signal 方法调用某些操作,那么它将执行一次。

至于第二个问题,这取决于收到取消和活动完成的顺序。如果先取消,则首先将取消传递到工作流,这可能会导致活动取消。取消实际上是阻塞等待活动取消。活动的完成(这是下一个活动)取消阻止它的取消。如果完成是第二个,那么活动就完成了,接下来的任何事情都会被下一个事件取消。在大多数情况下,结果与收到活动完成的结果完全相同,但之后的所有逻辑都被取消。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    相关资源
    最近更新 更多