使用异步 Activity vs 让工作流等待信号

Use Asynchronous Activity vs have workflow wait for signal

假设我们需要向用户发送电子邮件并等待用户回复,然后继续工作流程。我们是否应该创建一个异步 activity 来发送电子邮件,当收到回复电子邮件时,我们完成 activity?或者我们应该创建一个正常的 activity 来发送电子邮件,然后工作流等待信号,当回复电子邮件到来时,我们将信号发送到工作流?这两个选项等价吗?或者有一些差异可以用来决定在不同的活动中使用哪一个?

提前致谢

对于此用例,我建议使用 activity then signal 方法。原因是发送电子邮件和等待回复是两个不同的任务,具有不同的超时和重试策略。

如果发送电子邮件 activity 失败,预计将在非常紧凑的重试计划中在短时间内重试。同时,用户操作的超时预计会更长(可能是几天或几周)并且通常不可重试。

编辑以回答重试问题:

But what if we do want to retry? Say we expect the user to reply the email within a day, otherwise we send it again. We can retry the entire workflow but that is not ideal since send email and user reply is only part of the workflow. Should we make it a child workflow and have retry on the child workflow?

您重试整个交互。请参阅重试部分工作流程的文件处理示例。这是它的 Go SDK and Java SDK 个版本。