是否可以使用 MassTransit 为 RabbitMQ 队列注册多个消费者?

Posted

技术标签:

【中文标题】是否可以使用 MassTransit 为 RabbitMQ 队列注册多个消费者?【英文标题】:Is it possible to register multiple consumers for a RabbitMQ queue using MassTransit? 【发布时间】:2021-08-18 21:44:34 【问题描述】:

我使用很棒的 MassTransit (v7.1.6) 和 .NET 来发布和使用 RabbitMQ 的消息

要将消费者绑定到特定队列,我以这种方式配置端点:

            configurator.ReceiveEndpoint(
                "QueueName",
                cfg =>
                
                    cfg.ConfigureConsumer<MyConsumer>(context);
                    cfg.ExchangeType = Direct;
                );

所以当我启动我的应用程序时,我在兔子管理 UI 中只看到一个消费者(和一个连接),但是为了扩大消费并提高应用程序的生产力,我想增加消费者和连接的数量(每个消费者)用于队列

例如,在 Apache RabbitMQ.Client 中,我们可以为一个通道多次调用IModel.BasicConsume()

在 MassTransit 中,我看到“并发限制”和“并发消息限制”,但它们不会影响 Rabbit 级别的消费者数量,所以在我看来,这只是应用级别的扩展

MassTransit 是否提供此功能?

【问题讨论】:

【参考方案1】:

您无需担心出现在 RabbitMQ 中的“消费者”数量。 MassTransit 使用PrefetchCount 将消息从 RabbitMQ 发送到连接的“RabbitMQ 消费者”。 MassTransit 中的消费者完全不相关,完全由 MassTransit 管理。因此,您只会在 RabbitMQ 中看到一个“消费者”,但这仅代表总线实例的连接/通道。 MassTransit 发送多条并发消息,最高可达PrefetchCount 限制。随着 MassTransit 消费者的完成,新消息由 RabbitMQ 推送并由 MassTransit 分派。

【讨论】:

以上是关于是否可以使用 MassTransit 为 RabbitMQ 队列注册多个消费者?的主要内容,如果未能解决你的问题,请参考以下文章

使用 BizTalk 而不是 NServiceBus 或 MassTransit 的优点/缺点

masstransit请求/响应:在消费者中获取调用者超时

普通消费者可以在 MassTransit 中重试消息之前延长超时时间吗?

Masstransit队列以公共汽车为前缀,后缀为随机字符串

MassTransit - 如何创建具有通用类型和 2 个不同消费者的交换主题

未在代码中指定的交换上的MassTransit ACCESS_REFUSED