【问题标题】:How to organize queues in Masstransit/RabbitMQ?如何在 Masstransit/RabbitMQ 中组织队列?
【发布时间】:2017-10-20 09:58:40
【问题描述】:

我想了解使用消息的最佳做法。我已经阅读了 MassTransit 文档并搜索了这个,但我没有得出任何结论。

我有一个发布消息的 api(托管总线实例)。这些消息是多种多样的,因为这个 api 不是微服务(购买、销售等消息)。

我必须如何组织我的消费者/队列?

  1. 一个队列类型的流程?例如一个用于购买,另一个用于销售等。此解决方案可能涉及许多流程,我不确定它是否是一个好的解决方案。如果我想要不同的采购队列,例如 purchase.stock、purchasing.suppliers 等,该怎么办?进程数可能会大大增加。我认为这是一个很好的可扩展性选择,但管理这么多进程可能会很棘手。
  2. 多个进程队列(按域分组队列)?例如,一个进程有多个消费者消费与购买相关的消息并管理不同的队列,如 purchase.stock、purchasing.suppliers... 这个选项对我来说更有意义,但我不确定。

【问题讨论】:

    标签: rabbitmq message-queue servicebus masstransit messagebroker


    【解决方案1】:

    关键概念是避免为不同的消息类型共享一个队列。也有例外,但将每种消息类型放在单独的队列中可以防止当一种消息类型主导队列流量时出现瓶颈。

    对于流程,由于 MassTransit 每个总线实例可以有任意数量的接收端点,因此将相关业务功能保留在单个流程中有助于代码管理和部署。进程边界对于扩展很有用,例如,添加更多进程/工作人员来处理状态更新而不是新订单(就消息量而言,前者可能是后者的 10 倍)。

    分离的另一个原因是依赖关系,与具有大量绑定或耦合到外部库/SDK 的旧 ERP 系统通信的消费者可能需要一个单独的进程,以避免由于某些旧库的创建方式而导致的内存问题.这些库可能需要更频繁地重新启动进程等,并且将它们分开可以消除为随着时间的推移导致问题的消费者重新启动一整套消费者的需要。

    这些只是一些一般准则,但我们在确定将哪些消费者放入同一流程时一直使用这些准则。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多