【发布时间】:2015-10-23 12:55:48
【问题描述】:
基本上就是标题所说的:我希望不同的工作流程能够等待共享任务的完成。例如,工作流 1 需要完成任务 A、B 和 C,而工作流 2 需要完成任务 C、D 和 E,然后才能继续执行其他操作。我知道活动具有唯一的 ID,因此如果工作流 2 尝试启动“C”而 1 已经启动“C”,它将返回一个 ACTIVITY_ID_ALREADY_IN_USE 错误,并且现在知道启动活动工作者的副本。问题是,一旦 C 完成,我如何通知两个工作流?
谢谢
【问题讨论】:
-
我不太明白这个问题或它背后的假设。您可以在两个不同的工作流执行中并行启动 C 两次。这对于“压缩此文件”或“计算
n!”等特定活动是有意义的。您可能还想确保 C 只执行一次,这对于“生成每日报告”等一般活动是有意义的。但是,在这种情况下,您不会在两个工作流程中包含 C。你能更好地解释你的场景吗?工作流之间的关系是什么? -
假设我们有一堆不同的文件,如 A、B、C、D 等。现在每个工作流代表一组这些文件,并且工作流需要这些文件,假设解压缩,之前它可以对组进行计算。因此,工作流 1 需要在 A、B 和 C 解压缩后对其进行归约,而工作流 2 需要在 C、D 和 E 解压缩后对它们进行不同的归约。两个工作流程都需要先解压缩 C,然后才能进入缩减阶段。因此,您的陈述“您不会在两个工作流程中包含 C”是错误的。
-
好点,谢谢!那么-在您的情况下,C 是什么?如果 C 是“解压缩文件” - 您只想安排一次(因为您只想解压缩文件一次)。如果 C 是“检查文件是否已解压缩并在需要时对其进行解压缩”,您可以安排两次,但您需要以某种方式同步实现(例如数据库或文件系统锁定)。您问“一旦 C 完成,我如何通知两个工作流程?” - 谁拥有C?谁要求的?什么触发了通知?
-
另外,我不确定 SWF 是否适合一般的发布/订阅模式。我认为它通常依赖于通过执行 ID 相互了解的工作流。
-
我想我会尝试让工作流尝试启动活动,然后在 ACTIVITY_ID_ALREADY_IN_USE 上手动轮询以查看解压缩文件是否存在于服务器/缓存中,或者查看activity_id是否不再使用,是否可以由于故障或其他原因重新启动
标签: amazon-swf