带有微服务的RabbitMQ-如何处理扩展服务?

时间:2019-10-31 16:59:42

标签: c# node.js rabbitmq microservices

我是RabbitMQ的新手。我想要其他服务的“ 集成事件”。 因此,这是为所有微服务发送消息的一种路由。

但是,如果我已复制服务以进行扩展,则我不希望所有复制的服务都收到消息。

示例:
>>>服务B(获取消息)
服务A>推送消息>>>服务B(不应接收消息,请复制)
>>>服务C(获取消息)

我认为这是我需要的“ 路由”和“ 工作队列”的组合吗?
但是我该怎么做呢?如果您有示例,我将使用Node.js或C#。

2 个答案:

答案 0 :(得分:0)

我在here中有微服务和DDD信息。看看

如果要将事件发布到特殊服务,则应使用服务总线。 我使用NServiceBus。它是.net中最好的工具。 RabbitMQ只是一个队列。在NServiceBus中,您可以使用许多不同的queues,例如RabbitMQ,SqlServer等

因此,在您的示例中,服务A发布了一个事件,比如说UserCreated。服务B具有一个EventHandler作为UserCreatedEventHandler。这样,服务B就可以获取UserCreated的任何已发布事件。 NServiceBus具有Automatic subscriptionsMessage routing来了解在什么事件上预订了什么服务。他们的文件完美无缺。看看他们

答案 1 :(得分:0)

在这种情况下,扩大服务规模(您的消费者)不是问题。而是队列如何工作的功能。

简而言之,您是否从队列中消费了一个服务实例,或者从同一队列中消费了十个实例都没有关系。只有一个使用者将从该队列接收相同的消息。将其视为以round-robin方式分发的消息。

如果要将同一消息发送给多个使用者,则必须(最后)将其发布在单独的队列中。也就是说,每个使用者都应侦听特定队列,并且您的交换将消息发布在所有队列上。 Fanout 交流在这里可以进行。