MassTransit (C#) 中跨端点的并发限制
Concurrency Limit across endpoints in MassTransit (C#)
地铁 3.5,
RabbitMq
我有一个监听队列数量的总线连接服务。
- Q1
- Q2
- Q3
- Q4
等等
所有队列都接受相同的消息类型,并且它们都使用竞争消费者模式,其中不同机器上的多个服务侦听这些相同的队列。
我所追求的是对每个进程的所有这些队列一起设置并发限制。
我的资源(可用许可证数量)有限,需要将并发请求限制为每台机器的可用许可证数量。
所以机器A可能有4个,机器B可能有10个,等等
如果我已经有 4 个消费者在所有队列中处理消息,我不希望机器 A 使用所有这些队列中的任何消息,它应该让其他人(机器 B、C 等)在可用时使用它资源。
我的问题是使用
sbc.UseConcurrencyLimit(4)
里面
var bus = MassTransit.Bus.Factory.CreateUsingRabbitMq
正在设置每个队列的并发限制,所以如果我有 4 个,它们都会加起来。
我需要的是所有队列的累积工作达到并发限制,但不超过它。
MassTransit 是否有内置的方法来实现这个目标?
没有内置方法来限制跨多个服务的并发。这将需要使用某种类型的全局资源管理器,而这并不是 MassTransit 开箱即用的支持。
地铁 3.5, RabbitMq
我有一个监听队列数量的总线连接服务。
- Q1
- Q2
- Q3
- Q4 等等
所有队列都接受相同的消息类型,并且它们都使用竞争消费者模式,其中不同机器上的多个服务侦听这些相同的队列。
我所追求的是对每个进程的所有这些队列一起设置并发限制。
我的资源(可用许可证数量)有限,需要将并发请求限制为每台机器的可用许可证数量。
所以机器A可能有4个,机器B可能有10个,等等
如果我已经有 4 个消费者在所有队列中处理消息,我不希望机器 A 使用所有这些队列中的任何消息,它应该让其他人(机器 B、C 等)在可用时使用它资源。
我的问题是使用
sbc.UseConcurrencyLimit(4)
里面
var bus = MassTransit.Bus.Factory.CreateUsingRabbitMq
正在设置每个队列的并发限制,所以如果我有 4 个,它们都会加起来。
我需要的是所有队列的累积工作达到并发限制,但不超过它。
MassTransit 是否有内置的方法来实现这个目标?
没有内置方法来限制跨多个服务的并发。这将需要使用某种类型的全局资源管理器,而这并不是 MassTransit 开箱即用的支持。