我有一个问题,寻找解决问题的最佳方法。我们目前正致力于通过微服务架构替换我们的软件整体。
我们希望使用消息队列作为不同微服务之间的通信。
我们的一个微服务(邮件服务)需要在收到来自两个微服务的两条消息后作出反应。第一条消息提供有关已订单的信息。它提供有关电子邮件内容和收件人的信息,第二条消息提供附件的链接,电子邮件应包括。
邮件服务应该等到收到两封邮件。目前我计划将所有消息存储到数据库中(每个消息一个表),如果两个信息都存在且可以发送电子邮件,则每5秒检查一次。
但是我觉得RabbitMQ也许提供了一种方法,所以我不需要自己开发来避免这两种消息之间的竞争条件。
您的解决方法是什么?
答案 0 :(得分:1)
我会更改消息模式,以便您有三条消息;
发布包含订单信息的第一条消息。消费此消息的结果是发布的第二条消息,其中包含其他信息。
处理包含附加信息的第二条消息,并保留信息。这是您发布第三条消息的位置。
第三条也是最后一条消息充当通知,说“嘿,我现在拥有实际发送电子邮件所需的一切”。
这样您就不必每隔x秒检查一次数据库,并且可以相当便宜地扩展消息工作流程。
希望有所帮助:)