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

标签 rebus

我有一个 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 容器会给当前正在处理的所有消息一个完成的机会。

关于rebus - 检查正在进行的 rebus 处理程序并阻止 rebus 接受新消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47712293/

相关文章:

c# - 调用所有处理程序后如何提交 UoW

画画传奇 : Message is not arrived in correct sequence when subscriber(s) sent to publisher

c# - Rebus:2 个进程中的 2 个处理程序。击球不一致且交替

c# - 一个工作单元内多个消息的相同 Rebus 处理程序实例

c# - 部署到 Azure 时不会调用消息处理程序

c# - 自动向 Rebus 消息添加 header

rebus - NumberOfWorkers 和 MaxParallelism 选项的目的或关系是什么?

nservicebus - 报告竞争消费者场景进展的方法

rebus - 为什么我不能推迟为单向客户端发送消息

publish-subscribe - Rebus 无法订阅具有相同 'messages' 值的多个端点