是否可以使用 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队列以公共汽车为前缀,后缀为随机字符串