我正在处理的部分应用程序涉及下载包含附件的电子邮件,检测每个附件中的条形码,扫描其中的标识符以及使用标识符将数据插入数据库。
到目前为止,我对消息总线的使用仅限于Pub / Sub,我从来没有真正需要使用Sagas。但是,鉴于上述每个步骤都是同一个相关流程的一部分,并且我们希望在流程的任何部分都失败时保持耐久性,Saga是否适合?
我们的流程详情以及我想法我们可以使用Saga如下:
Connector
,其中包含有关Tenant
的信息。 Saga将需要此租户信息,以便我们可以与租户特定资源(数据库/存储)进行交互。然后每个Saga将执行以下任务:
Order
记录,如果它存在:
OrderDocument
记录插入到引用文件URI的数据库中。OrderDocumentBundle
,这是一个包含链接到订单的所有文档的单个文件。因此,当创建新的OrderDocument
时,我们应加载相关OrderDocumentBundle
的{{1}}并附加新Order
的网页。我担心最终捆绑过程中的并发问题,因为我们可能有多条消息尝试更新捆绑包。我们需要确保Saga等待捆绑文件可用以便完成。
答案 0 :(得分:3)
免责声明:在谈论Sagas时,我们谈论的是NServiceBus传奇,我希望不会开始宗教讨论。 :)
你应该定义两到三个传奇。一个用于电子邮件,另一个用于附件。
为什么这么多传奇?因为
长时间运行的过程不是因为时间,而是因为发生了多件事或等待答案或超时。
当然记得要包含与超时相关的内容。如果AttachmentSaga在一定时间内没有回答,请通知用户或其他什么。