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

Handling multiple event dependency in event-driven architecture

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

一个例子是书籍订单处理服务,它必须等待订单中的每本书都被仓库处理过,然后才能创建订单已被拣选的事件,以便运输服务(或类似的东西) ) 取货并开始准备发货。

您可以使用 Aggregator 模式,也称为 Parallel Convoy

本质上,您需要有一些方法来识别需要聚合的消息,以及何时收到整个聚合集,以便可以开始处理。

无需外出和 buying the book*, the Apache Camel integration platform website has some nice resource 实现聚合器模式。虽然这显然是 Camel 特有的,但您可以看到涉及到什么样的事情。

* 免责声明,我与 Adison Wesley 或本书的任何作者没有任何关联...

除了 Tom 上面提到的聚合器之外,另一个有用的模式是 a saga pattern(一个迷你工作流程)。 我之前将它与名为 NServiceBus 的消息传递库一起使用,以处理相互关联的多条消息的协调。

该模式非常有用,非常适合长运行 进程。即使您的相关消息是不同的消息,例如 OrderStarted、OrderLineProcessed、OrderCompleted。