我有一个要求能够关闭/打开订阅者。这个想法是可以发送消息,但是如果关闭订阅服务器,它们就不会在队列中处理消息。一旦打开,它们就开始处理队列中的消息。
我查看了pub/sub和request/reply示例,并提取了Rebus的源代码,以查找任何能够回答这个问题的功能。有一种延迟方法,在这种方法中,时间延迟可以应用于发送消息,但我需要的延迟是基于打开和关闭用户。
主要问题是,是否有某种方式暂停订阅者?
(只是一个订阅者,而不是所有订阅者,所以我不相信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);
}
}发布于 2017-11-03 16:06:04
我不明白你为什么说
只是一个订阅者,而不是所有订阅者,所以我不相信SetWorkerThreads(0)技术会起作用
因为这将是我的建议:只需将该特定订阅服务器的活动工作线程数降低到零。
这样,它将停止从其队列接收消息,然后通过将工作人员数量设置为大于零的某个数字来恢复消息处理。
顺便说一句。语法如下:
bus.Advanced.Workers.SetNumberOfWorkers(0);在调整工人人数之前,它会阻塞。
https://stackoverflow.com/questions/47096804
复制相似问题