【问题标题】:Handling multiple event dependency in event-driven architecture在事件驱动架构中处理多事件依赖
【发布时间】:2016-10-16 05:57:29
【问题描述】:

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

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

【问题讨论】:

    标签: publish-subscribe microservices event-driven


    【解决方案1】:

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

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

    【讨论】:

    • 好建议。我一直在研究它来处理在执行过程中可能失败的进程,以便在服务重新启动或新实例启动时可以拾取它。
    【解决方案2】:

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

    基本上,您需要有某种方法来识别需要聚合的消息,以及何时接收到作为一个整体的聚合集,以便开始处理。

    不用出门和buying the book*,Apache Camel集成平台网站有一些nice resource关于实现聚合器模式。虽然这显然是特定于 Camel 的,但您可以看到其中涉及的内容类型。

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

    【讨论】:

    • 感谢您的建议。我实际上可以通过 Safari Books Online 访问这本书。看起来聚合器正是我想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2021-12-29
    • 2011-06-17
    • 2014-02-20
    • 2015-11-20
    • 2018-11-18
    • 1970-01-01
    相关资源
    最近更新 更多