MassTransit/RabbitMQ:一个服务或多个服务

MassTransit/RabbitMQ:一个服务或多个服务,rabbitmq,masstransit,topshelf,Rabbitmq,Masstransit,Topshelf,我有大约300个不同的消费者/300个消息类型/300个队列,背后有最疯狂的功能 从极端的角度来看: 是使1个windows服务(更易于部署)具有300个用户侦听的最佳选择 或300个windows服务(更容易在开发人员之间拆分),每个独立的1个使用者,但无法通过支持进行维护 ?? 更新:从1到300个队列RabbitMQ可以同时支持数百个队列,每个队列应负责一种特定类型的消息,例如响应状态或在线订单信息或堆栈跟踪信息,以供其他工作单元进一步处理,这三个是不一样的,如果你把它们都放在一个队列

我有大约300个不同的消费者/300个消息类型/300个队列,背后有最疯狂的功能

从极端的角度来看:

  • 是使1个windows服务(更易于部署)具有300个用户侦听的最佳选择
  • 或300个windows服务(更容易在开发人员之间拆分),每个独立的1个使用者,但无法通过支持进行维护
??
更新:从1到300个队列

RabbitMQ可以同时支持数百个队列,每个队列应负责一种特定类型的消息,例如响应状态或在线订单信息或堆栈跟踪信息,以供其他工作单元进一步处理,这三个是不一样的,如果你把它们都放在一个队列中,那么请将它们分成不同的队列

如果您将所有数据保留在一个队列中,这也会影响您的应用程序性能,因为每个队列按顺序工作,而且由于您有300个消费者等待300种类型的消息,几乎所有消费者都可能处于等待状态,这也是复杂决策算法的一个原因,如果您正在使用它来确定正确的消费者

单个队列的另一个问题是,它现在是一个瓶颈,如果该队列失败,它可能会阻碍整个应用程序的运行,因为每个消费者都在侦听它。通过使用不同的队列,如果某个特定队列遇到问题,系统的其余部分仍然可以处理


您可以检查每个服务是否有共同点,以及在将队列数量从1增加到多个之后,服务是否可以占用多于一个的使用者,而不是每个服务使用一个使用者。

当您说1个队列时,实际上是一个队列还是rabbitmq的一个实例?一个物理服务仍然可以使用300个端点,每个消费者一个端点。拆分服务的问题与队列无关,而是与应用程序设计和体系结构有关。我会将应用程序拆分为几个服务,但不是300个。思考有限的上下文、业务上下文、阅读和理解。每个用户运行300个服务是愚蠢的imho和RMQ连接的浪费。思考服务组合的逻辑架构,并以此为指导。如果将所有300个消费者添加到一个服务中,那么这有什么坏处?如果您有多个服务,它们可以独立工作,一个服务的故障不会影响另一个服务,但是,如果服务是依赖性的,则可能会产生较小的影响。