暂停订阅者

Pause the Subscriber

我需要能够 off/turn 订阅者。这个想法是可以发送消息,但如果订阅者关闭,他们就不会处理队列中的消息。一旦重新打开,它们就会开始处理队列中的消息。

我查看了 pub/sub 和 request/reply 示例,并提取了 Rebus 的源代码以寻找可以回答此问题的任何功能。有一个 Defer 方法,可以将时间延迟应用于发送消息,但我需要的延迟是基于打开和关闭订阅者。

主要问题,有什么方法可以暂停订阅者吗?

(只有一个订阅者,不是所有订阅者,所以我不相信 SetWorkerThreads(0) 技术会起作用)

更新 答案是使用 _activator.Bus.Advanced.Workers.SetNumberOfWorkers(0) 像这样:

public static class Subscriber1
{
    private static BuiltinHandlerActivator _activator;
    public static void Start(ILogger logger)
    {
        _activator = new BuiltinHandlerActivator();
        _activator.Register(() => new Subscriber1MessageHandler());
        Configure.With(_activator)
                 .Transport(t => t.UseMsmq("subscriber1"))
                 .Logging(l => l.Serilog(logger))
                 .Routing(r => r.TypeBased().Map<Subscriber1Message>("thepublisher"))
                 .Start();
        _activator.Bus.Subscribe<Subscriber1Message>().Wait();
    }
    public static void Pause()
    {
        _activator.Bus.Advanced.Workers.SetNumberOfWorkers(0);
    }
    public static void Resume()
    {
        _activator.Bus.Advanced.Workers.SetNumberOfWorkers(1);
    }
}

我不明白你为什么这么说

just one subscriber, not all subscribers, so I don't believe the SetWorkerThreads(0) technique would work

因为我的建议是:简单地将特定订阅者的活动工作线程数降低为零。

这样,它将停止从其队列中接收消息,然后可以通过将工作人员数量设置回大于零的某个数字来恢复消息处理。

顺便说一句。语法是这样的:

bus.Advanced.Workers.SetNumberOfWorkers(0);

它会阻塞,直到调整了工人数量。