RabbitMQ - 如何处理2个异步消息消耗微服务?

时间:2018-03-23 13:18:39

标签: java c# rabbitmq message-queue microservices

我有一个问题,寻找解决问题的最佳方法。我们目前正致力于通过微服务架构替换我们的软件整体。

我们希望使用消息队列作为不同微服务之间的通信。

我们的一个微服务(邮件服务)需要在收到来自两个微服务的两条消息后作出反应。第一条消息提供有关已订单的信息。它提供有关电子邮件内容和收件人的信息,第二条消息提供附件的链接,电子邮件应包括。

邮件服务应该等到收到两封邮件。目前我计划将所有消息存储到数据库中(每个消息一个表),如果两个信息都存在且可以发送电子邮件,则每5秒检查一次。

但是我觉得RabbitMQ也许提供了一种方法,所以我不需要自己开发来避免这两种消息之间的竞争条件。

您的解决方法是什么?

1 个答案:

答案 0 :(得分:1)

我会更改消息模式,以便您有三条消息;

  1. 发布包含订单信息的第一条消息。消费此消息的结果是发布的第二条消息,其中包含其他信息。

  2. 处理包含附加信息的第二条消息,并保留信息。这是您发布第三条消息的位置。

  3. 第三条也是最后一条消息充当通知,说“嘿,我现在拥有实际发送电子邮件所需的一切”。

  4. 这样您就不必每隔x秒检查一次数据库,并且可以相当便宜地扩展消息工作流程。

    希望有所帮助:)