首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >暂停订阅服务器

暂停订阅服务器
EN

Stack Overflow用户
提问于 2017-11-03 13:23:02
回答 1查看 84关注 0票数 2

我有一个要求能够关闭/打开订阅者。这个想法是可以发送消息,但是如果关闭订阅服务器,它们就不会在队列中处理消息。一旦打开,它们就开始处理队列中的消息。

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

主要问题是,是否有某种方式暂停订阅者?

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

更新答案是使用_activator.Bus.Advanced.Workers.SetNumberOfWorkers(0)如下所示:

代码语言:javascript
运行
复制
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);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-03 16:06:04

我不明白你为什么说

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

因为这将是我的建议:只需将该特定订阅服务器的活动工作线程数降低到零。

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

顺便说一句。语法如下:

代码语言:javascript
运行
复制
bus.Advanced.Workers.SetNumberOfWorkers(0);

在调整工人人数之前,它会阻塞。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47096804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档