检查正在进行的rebus处理程序并阻止rebus接受新消息

时间:2017-12-08 10:23:03

标签: rebus

我有一个使用Rebus和Azure Service Bus队列作为传输的Web应用程序。 它配置了Simple Injector容器。

在app处理期间,我想阻止rebus接受新邮件并检查当前正在处理的邮件数量。然后我可能会等待几秒钟让处理程序完成。

这可以实现吗?

编辑: 我知道SetWorkerShutdownTimeout和Advanced.Workers.SetNumberOfWorkers方法的存在。我可以通过调用Advanced.Workers.SetNumberOfWorkers(0)实现我的目标吗?

1 个答案:

答案 0 :(得分:2)

  

然后我可以决定等几秒钟让处理程序完成。

如果你处理总线(或容器,当你的应用程序关闭时你总是应该这样做,而后者又处理总线),默认情况下,当前正在处理的任何消息都将默认为30秒完成处理。

关机过程开始后,不会收到任何新消息。

  

我可以通过调用Advanced.Workers.SetNumberOfWorkers(0)实现我的目标吗?

是:)如果你打电话

bus.Advanced.Workers.SetNumberOfWorkers(0);

工作线程将被删除,从而导致不再收到消息。

但是你应该知道,简单地处理你的SimpleInjector容器会让当前处理的所有消息都有机会完成。