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

时间:2017-07-08 19:57:35

标签: c# concurrency rabbitmq masstransit

Mass Transit 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中是否有内置方式来实现这一目标?

1 个答案:

答案 0 :(得分:0)

There isn't a built-in way to limit concurrency across multiple services. That would require using some type of global resource manager, and it just isn't something that MassTransit supports out of the box.