检查正在进行的 rebus 处理程序并阻止 rebus 接受新消息
Examining rebus handlers in progress and stopping rebus from accepting new messages
我有一个 Web 应用程序,它使用 Rebus 和 Azure 服务总线队列作为传输。
它配置了 Simple Injector 容器。
在处理应用程序期间,我想阻止 rebus 接受新消息并检查当前正在处理的消息数。然后我可能决定等待几秒钟以允许处理程序完成。
这可以实现吗?
编辑:
我知道 SetWorkerShutdownTimeout 和 Advanced.Workers.SetNumberOfWorkers 方法的存在。我可以通过调用 Advanced.Workers.SetNumberOfWorkers(0) 来实现我的目标吗?
I may then decide to wait few seconds to allow handler to finish.
如果您处理总线(或容器,当您的应用程序关闭时您总是应该这样做,这又会处理总线),默认情况下,当前正在处理的任何消息将在最多 30 秒内完成处理中。
关闭过程开始后将不会收到新消息。
Could I achieve what I aim by calling Advanced.Workers.SetNumberOfWorkers(0)?
是 :) 如果您致电
bus.Advanced.Workers.SetNumberOfWorkers(0);
工作线程将被删除,从而导致不再接收到消息。
但是你应该知道,简单地处理你的 SimpleInjector 容器会给当前正在处理的所有消息一个完成的机会。
我有一个 Web 应用程序,它使用 Rebus 和 Azure 服务总线队列作为传输。 它配置了 Simple Injector 容器。
在处理应用程序期间,我想阻止 rebus 接受新消息并检查当前正在处理的消息数。然后我可能决定等待几秒钟以允许处理程序完成。
这可以实现吗?
编辑: 我知道 SetWorkerShutdownTimeout 和 Advanced.Workers.SetNumberOfWorkers 方法的存在。我可以通过调用 Advanced.Workers.SetNumberOfWorkers(0) 来实现我的目标吗?
I may then decide to wait few seconds to allow handler to finish.
如果您处理总线(或容器,当您的应用程序关闭时您总是应该这样做,这又会处理总线),默认情况下,当前正在处理的任何消息将在最多 30 秒内完成处理中。
关闭过程开始后将不会收到新消息。
Could I achieve what I aim by calling Advanced.Workers.SetNumberOfWorkers(0)?
是 :) 如果您致电
bus.Advanced.Workers.SetNumberOfWorkers(0);
工作线程将被删除,从而导致不再接收到消息。
但是你应该知道,简单地处理你的 SimpleInjector 容器会给当前正在处理的所有消息一个完成的机会。