在事件驱动架构中处理多个事件依赖

16

如果您拥有一个事件驱动的架构,并且订阅事件的服务在继续创建链中的下一个事件之前必须等待多个相同类型的事件,那么什么是最佳实践?

例如,一个书订单处理服务必须等待仓库处理完订单中的每本书,然后创建订单已被拣选的事件,以便发货服务(或类似服务)接收订单并开始准备发货。

2个回答

14
除了Tom提到的聚合器之外,另一个有用的模式是Saga模式(迷你工作流)。我以前使用过名为NServiceBus的消息库来处理协调彼此相关的多个消息。
该模式非常有用,非常适合长时间运行的过程。即使您的相关消息是不同的消息,例如OrderStarted,OrderLineProcessed,OrderCompleted。

1
好的建议。我一直在研究如何处理可能在执行过程中失败的进程,以便在服务重新启动或启动新实例时可以检测到它们。 - Patrick

8
你可以使用聚合器模式,也称为并行车队
本质上,您需要有一种识别需要聚合的消息以及整个聚合集已被接收的方式,以便开始处理。
在不去购买该书的情况下,Apache Camel集成平台网站提供了一些很好的资源来实现聚合器模式。虽然这显然是特定于Camel的,但您可以看到涉及哪些内容。 *免责声明,我与Adison Wesley或该书作者没有任何关联...

谢谢您的建议。我实际上可以通过Safari Books Online访问这本书。看起来聚合器正是我想要的东西。 - Patrick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接