什么是面向服务/微服务架构的良好事件存储/流中间件

时间:2016-05-02 18:14:06

标签: events soa microservices event-driven event-stream

我正在构建一个微服务架构,我正在寻找一种流式传输事件的好方法。

目前我有一项服务,发布一个事件,其他三个服务需要以某种方式作出反应,但是对此事件的反应只会发生一次。

目前我正在使用RabbitMQ,我的服务在单独的队列中发布三条消息,每个订阅服务都会侦听一个队列。因此,只有一个服务实例可以实际接收消息并对其作出反应。

但是,我不喜欢这种方法,因为如果我想添加新订阅者,我必须为发布服务添加新队列。

我基本上在事件流上寻找某种中间件,它允许多个服务监听一个事件,但确保每个服务只有一个实例对事件做出实际反应。

我还没有找到任何东西,所以我很感激建议。

2 个答案:

答案 0 :(得分:1)

您可以查看this page,它解释了AMQP模型的工作原理,从而解释了RabbitMQ。

您的邮件已发布到Exchange而不是Queue。交换机将根据Exchange类型以及绑定密钥和路由密钥将消息路由到绑定队列。

一般来说,出版商并不介意交易所背后的路由。消费者关心的是根据他们想要消费的内容和方式将队列创建和绑定到交换。

因此,如果您的制作人使用例如direct exchange将其消息发布到ExchangeA,则服务A / B / C可以创建并将其队列绑定到此交换,他们将收到每个已发布的消息。如果生成了新服务E,它应该创建并绑定队列到此交换。因此,您无需修改​​发布者。

答案 1 :(得分:0)

我们的建议是将PUB / SUB模型与RabbitMQ一起使用,以便多个订阅者可以监听单个队列并相应地执行操作。 请参阅:https://www.rabbitmq.com/tutorials/tutorial-three-python.html