Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# RabbitMQ与微服务-如何处理扩展服务?_C#_Node.js_Rabbitmq_Microservices - Fatal编程技术网

C# RabbitMQ与微服务-如何处理扩展服务?

C# RabbitMQ与微服务-如何处理扩展服务?,c#,node.js,rabbitmq,microservices,C#,Node.js,Rabbitmq,Microservices,我是新来的兔子。我想为其他服务举办“集成活动”。 这是一种针对所有微服务的消息路由 但是,如果我有用于扩展的复制服务,我不希望所有复制服务都接收该消息 示例: >>>服务B(获取消息) 服务A>推送消息>>>服务B(不应接收消息,已复制) >>>服务C(获取消息) 我认为它是“路由”和“工作队列”的组合,我需要什么? 但我如何才能正确地做到这一点呢?如果你有例子的话,我使用Node.js或C#。我有我的微服务和DDD信息。看一看 如果要将事件发布到特殊服务,则应使用服务总线。 我用。它是.net

我是新来的兔子。我想为其他服务举办“集成活动”。 这是一种针对所有微服务的消息路由

但是,如果我有用于扩展的复制服务,我不希望所有复制服务都接收该消息

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

我认为它是“路由”和“工作队列”的组合,我需要什么?

但我如何才能正确地做到这一点呢?如果你有例子的话,我使用Node.js或C#。

我有我的微服务和DDD信息。看一看

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

现在,对于您的示例,服务A发布了一个事件,比如UserCreated。服务B的事件处理程序为UserCreatedEventHandler。然后服务B可以获得UserCreated的任何已发布事件。NServiceBus拥有并了解在哪些事件上订阅了哪些服务。他们的文件非常完整。看看它们

在这种情况下,扩大您的服务(您的消费者)并不是问题。相反,这是队列工作方式的一个特点

简言之,一个队列中是否有一个服务实例在使用,或者同一队列中是否有十个实例在使用,这并不重要。只有一个使用者将从该队列接收相同的消息。可以将此视为以某种方式分发消息


如果要将同一消息发送给多个使用者,则必须(最终)将其发布到单独的队列中。也就是说,每个使用者都应该侦听特定队列,并且您的exchange会在所有队列上发布消息。扇出交换可能在这里工作。

我希望所有服务同时获取消息(“路由”)。然而,如果一个微服务被扩展,这应该只能得到一个(“工作队列”即循环)。所以我需要一个“路由”和“工作队列”的组合。我只是不知道如何在Node.js中实现这一点。对于C#NServiceBus来说,听起来不错,只是它是一个商业产品。请仔细阅读和路由密钥,因为我非常确信,您的大多数问题都可以在不陷入服务总线兔子洞的情况下得到解决。考虑用更多具体的例子更新你的问题,这样我们可以更好地帮助你。