MassTransit (C#) 中跨端点的并发限制

Concurrency Limit across endpoints in MassTransit (C#)

地铁 3.5, RabbitMq

我有一个监听队列数量的总线连接服务。

所有队列都接受相同的消息类型,并且它们都使用竞争消费者模式,其中不同机器上的多个服务侦听这些相同的队列。

我所追求的是对每个进程的所有这些队列一起设置并发限制。

我的资源(可用许可证数量)有限,需要将并发请求限制为每台机器的可用许可证数量。

所以机器A可能有4个,机器B可能有10个,等等

如果我已经有 4 个消费者在所有队列中处理消息,我不希望机器 A 使用所有这些队列中的任何消息,它应该让其他人(机器 B、C 等)在可用时使用它资源。

我的问题是使用

    sbc.UseConcurrencyLimit(4)

里面

    var bus = MassTransit.Bus.Factory.CreateUsingRabbitMq

正在设置每个队列的并发限制,所以如果我有 4 个,它们都会加起来。

我需要的是所有队列的累积工作达到并发限制,但不超过它。

MassTransit 是否有内置的方法来实现这个目标?

没有内置方法来限制跨多个服务的并发。这将需要使用某种类型的全局资源管理器,而这并不是 MassTransit 开箱即用的支持。