0

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

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

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

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

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

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

4

2 回答 2

1

您可以查看此页面,该页面解释了 AMQP 模型的工作原理以及 RabbitMQ。

您的消息将发布到 Exchange,而不是排队。Exchange 将根据 Exchange 类型以及绑定键和路由键将消息路由到绑定队列。

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

因此,如果您的生产者使用例如直接交换将其消息发布到 ExchangeA ,则服务 A/B/C 可以创建并将其队列绑定到此交换,并且它们将接收每个已发布的消息。如果产生了一个新的服务 E,它也应该创建一个队列并将其绑定到这个交换。因此您不需要修改发布者。

于 2016-05-03T07:17:07.223 回答
0

我们的建议是在 RabbitMQ 中使用 PUB/SUB 模型,以便多个订阅者可以监听单个队列并采取相应的行动。见:https ://www.rabbitmq.com/tutorials/tutorial-three-python.html

于 2016-05-06T08:35:50.517 回答