MassTransit (C#) 中跨端点的并发限制
Posted
技术标签:
【中文标题】MassTransit (C#) 中跨端点的并发限制【英文标题】:Concurrency Limit across endpoints in MassTransit (C#) 【发布时间】:2017-12-12 21:37:07 【问题描述】:公共交通 3.5, RabbitMq
我有一个总线连接服务,它监听队列的数量。
第一季度 第二季度 第三季度 第四季度 等等所有队列都接受相同的消息类型,并且所有队列都使用竞争消费者模式,其中不同机器上的多个服务侦听这些相同的队列。
我所追求的是对所有这些队列一起设置并发限制,每个单个进程。
我的资源(可用许可证数量)有限,并且需要将并发请求限制为每台机器的可用许可证数量。
所以机器 A 可能有 4 个,机器 B 可能有 10 个,等等。
如果我已经有 4 个消费者处理所有队列中的消息,我不希望机器 A 使用所有这些队列中的任何消息,它应该让其他人(机器 B、C 等)在有可用资源的情况下使用它。
我的问题是使用
sbc.UseConcurrencyLimit(4)
里面
var bus = MassTransit.Bus.Factory.CreateUsingRabbitMq
正在设置每个队列的并发限制,所以如果我有 4 个,它们都会加起来。
我需要的是所有队列累积达到该并发限制,但不超过它。
MassTransit 中是否有实现此目标的内置方法?
【问题讨论】:
【参考方案1】:没有一种内置方法可以限制多个服务的并发性。这需要使用某种类型的全局资源管理器,而 MassTransit 不支持开箱即用。
【讨论】:
以上是关于MassTransit (C#) 中跨端点的并发限制的主要内容,如果未能解决你的问题,请参考以下文章
未在代码中指定的交换上的MassTransit ACCESS_REFUSED
MassTransit 与 Kafka 和 NodaTime