【发布时间】:2016-10-16 05:57:29
【问题描述】:
如果您有一个事件驱动的架构并且订阅事件的服务必须等待多个事件(相同类型)才能继续创建链中的下一个事件,那么最佳实践是什么?
例如,图书订单处理服务必须等待订单中的每本书都已被仓库处理,然后才能创建订单已被拣选的事件,以便运输服务(或类似的东西)拣货下订单并开始准备发货。
【问题讨论】:
标签: publish-subscribe microservices event-driven
如果您有一个事件驱动的架构并且订阅事件的服务必须等待多个事件(相同类型)才能继续创建链中的下一个事件,那么最佳实践是什么?
例如,图书订单处理服务必须等待订单中的每本书都已被仓库处理,然后才能创建订单已被拣选的事件,以便运输服务(或类似的东西)拣货下订单并开始准备发货。
【问题讨论】:
标签: publish-subscribe microservices event-driven
除了上面提到的聚合器之外,另一个有用的模式是 a saga pattern(一个迷你工作流程)。 我之前曾将它与名为 NServiceBus 的消息传递库一起使用,以处理相互关联的多条消息的协调。
该模式非常有用,非常适合长时间运行的进程。即使您的相关消息是不同的消息,例如 OrderStarted、OrderLineProcessed、OrderCompleted。
【讨论】:
您可以使用Aggregator 模式,也称为Parallel Convoy。
基本上,您需要有某种方法来识别需要聚合的消息,以及何时接收到作为一个整体的聚合集,以便开始处理。
不用出门和buying the book*,Apache Camel集成平台网站有一些nice resource关于实现聚合器模式。虽然这显然是特定于 Camel 的,但您可以看到其中涉及的内容类型。
* 免责声明,我与 Adison Wesley 或本书的任何作者没有任何关系...
【讨论】: