如何动态设置预取计数RabbitMq
How to dynamically set prefetch count RabbitMq
可以动态设置预取计数参数吗?这就是我想要实现的目标。我有队列订阅者服务。我有一种机制可以观察服务资源,如处理器使用情况、RAM 等。当这些资源被大量使用时,这种机制会向服务发送通知。因此,当收到此通知时,我想停止从队列中检索消息。它可以通过取消订阅队列来完成,但它会有效吗?有没有可能在这个通知来的时候动态的设置prefetch count为1?如果没有,如何实现这种事情?我正在使用 C# 和 MasstTransit 作为服务总线。
停止使用所有消息的最简单方法是停止总线。请记住,即使公交车停止,发送消息仍然有效。要再次开始接收消息,您只需启动总线。
操纵预取计数不会阻止使用消息。
对于您所描述的行为,好的做法是使用断路器。但是,您不能从外部触发断路器,至少不能用于 MassTransit 中使用的断路器(来自 GreenPipes 的断路器)。只有在指定时间段内达到特定故障阈值时才会触发。如果需要,您可能还想创建自己的版本。您可以在 GreenPipes 中查看它是如何完成的以了解想法。
有趣的是,您应该问,实际上有一个非常具体的单元测试可以做这件事:
可以动态设置预取计数参数吗?这就是我想要实现的目标。我有队列订阅者服务。我有一种机制可以观察服务资源,如处理器使用情况、RAM 等。当这些资源被大量使用时,这种机制会向服务发送通知。因此,当收到此通知时,我想停止从队列中检索消息。它可以通过取消订阅队列来完成,但它会有效吗?有没有可能在这个通知来的时候动态的设置prefetch count为1?如果没有,如何实现这种事情?我正在使用 C# 和 MasstTransit 作为服务总线。
停止使用所有消息的最简单方法是停止总线。请记住,即使公交车停止,发送消息仍然有效。要再次开始接收消息,您只需启动总线。
操纵预取计数不会阻止使用消息。
对于您所描述的行为,好的做法是使用断路器。但是,您不能从外部触发断路器,至少不能用于 MassTransit 中使用的断路器(来自 GreenPipes 的断路器)。只有在指定时间段内达到特定故障阈值时才会触发。如果需要,您可能还想创建自己的版本。您可以在 GreenPipes 中查看它是如何完成的以了解想法。
有趣的是,您应该问,实际上有一个非常具体的单元测试可以做这件事: