如何动态设置预取计数RabbitMq

时间:2017-09-16 17:10:57

标签: c# rabbitmq masstransit

可以动态设置预取计数参数吗?这就是我想要实现的目标。我有服务,这是队列订户。我有机制,它正在观察服务器资源,如处理器使用情况,RAM等。当这些资源被广泛使用时,这个机制将向服务发送通知。因此,当这个通知出现时,我想停止从队列中检索消息。它可以通过从队列中取消订阅来完成,但它会有效吗?此通知到来时,可以动态地将预取计数设置为1吗?如果没有,如何实现这种事情?我使用C#和MasstTransit作为servicebus。

2 个答案:

答案 0 :(得分:2)

有趣的是你应该问,实际上有一个非常具体的单元测试可以做到这一点:

https://github.com/MassTransit/MassTransit/blob/master/src/MassTransit.RabbitMqTransport.Tests/SetPrefetchCount_Specs.cs

答案 1 :(得分:1)

停止使用所有消息的最简单方法是停止总线。请记住,即使总线停止,发送消息仍然有效。要再次开始接收消息,您只需要启动总线。

操作预取计数不会阻止消费消息。

您所描述的行为的良好做法是使用断路器。但是,您不能从外部触发断路器,至少不能用于MassTransit(GreenPipes中的那个)中使用的断路器。只有在指定的时间段内满足某个故障阈值时才会触发。如果需要,您可能还想创建自己的版本。您可以在GreenPipes中查看完成后的工作方式。