MassTransit 多个消费者

MassTransit Multiple Consumers

我有一个只有一个应用程序服务器的环境。我有一些消息需要一段时间才能服务(比如 10 秒左右),我想通过配置我的消费者应用程序 运行 代码的多个实例来处理这些消息来增加吞吐量。我已经阅读了 "competing consumer" 模式,并了解到在使用 MassTransit 时应该避免这种情况。根据 MassTransit 文档 here,每个接收端点都应该有一个唯一的队列名称。我正在努力了解如何将此建议映射到我的环境。 是否可能有 N 个消费者实例运行,每个实例都收到相同的消息,但实际上只有一个实例会对其进行操作?换句话说,我们能否实现"competing consumer" 模式但跨越多个队列而不是一个?

还是我看错了?我真的需要研究 "Send" 方法而不是 "Publish" 方法吗? "Send" 的缺点是它要求发件人直接知道端点的存在,我想动态地了解我拥有的 consumers/endpoints 的数量。 MassTransit 是否有任何内置功能可以帮助跟踪有多少消费者 instances/queues/endpoints 可以为特定消息类型提供服务?

谢谢, 安迪

所以 "avoid competing consumers" 指南是从 MSMQ 成为主要传输工具的时候开始的。如果多个线程从队列中读取,MSMQ 将失败。

如果您使用的是 RabbitMQ,那么相互竞争的消费者会表现出色。竞争消费者是正确的答案。每个竞争消费者将使用相同的端点接收。