Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azureservicebus Rebus停止从azure服务总线获取消息。从100条信息中,我只能得到5条_Azureservicebus_Rebus - Fatal编程技术网

Azureservicebus Rebus停止从azure服务总线获取消息。从100条信息中,我只能得到5条

Azureservicebus Rebus停止从azure服务总线获取消息。从100条信息中,我只能得到5条,azureservicebus,rebus,Azureservicebus,Rebus,我是REBS的新手 我从头开始构建了pub/sub示例。现在我正在我的订户中接收消息 我所面临的问题是,我发布了100条消息,但突然,当我启动订户服务时,它只收到这100条消息中的5条 windows服务执行异步任务5次,然后退出。我做错什么了吗 我的订阅服务器配置如下所示: using (var activator = new BuiltinHandlerActivator()) { activator.Register(() => new TestMessageHandler

我是REBS的新手

我从头开始构建了pub/sub示例。现在我正在我的订户中接收消息

我所面临的问题是,我发布了100条消息,但突然,当我启动订户服务时,它只收到这100条消息中的5条

windows服务执行异步任务5次,然后退出。我做错什么了吗

我的订阅服务器配置如下所示:

using (var activator = new BuiltinHandlerActivator()) { 
    activator.Register(() => new TestMessageHandler()); 

    Configure.With(activator) 
        .Transport(t => t.UseAzureServiceBus(Constants.connectionString, Constants.subQueue)) 
        .Routing(r => r.TypeBased().MapAssemblyOf<TestMessage>(Constants.pubQueue)‌​) 
        .Start();

    activator.Bus.Subscribe<TestMessage>().Wait(120000); 
}
public async Task Handle(TestMessage message) { 
    var message = string.Format("name: {1} and source name {2} {0} using the warp as a transport {0}", Environment.NewLine, message.Name , message.SourceName);

    await Task.Run(() => Logger(message));
}

private void Logger(TestMessage message) {
    Console.WriteLine(message.ToString(false));
}
从我发布的代码中,是否有我做错的事情?

从代码中

using (var activator = new BuiltinHandlerActivator()) { 
    (...)
    activator.Bus.Subscribe<TestMessage>().Wait(120000); 
}
使用(var activator=new builtinhandlerator()){
(...)
activator.Bus.Subscribe().Wait(120000);
}
似乎您的订户几乎会立即处理
激活器
,从而停止总线

此假设非常适合您所经历的行为,即仅处理队列中的前几条消息


在应用程序运行的整个过程中,您应该将activator实例(或返回的
IBus
,如果愿意的话)作为一个单独的实例保留,然后在它关闭时进行处理。

您能尝试在订阅服务器中显示代码吗?您好,谢谢您的快速回复。这是我的代码.using(var activator=new builtinhandlerator()){activator.Register(()=>new TestMessageHandler());Configure.With(activator).Transport(t=>t.UseAzureServiceBus(Constants.connectionString,Constants.subQueue)).Routing(r=>r.TypeBased().MapAssemblyOf(Constants.pubQueue)).Start();activator.Bus.Subscribe().Wait(120000);}和handler.public异步任务句柄(TestMessage消息){name:{1}和源名称{2}{0}使用warp作为传输{0},Environment.NewLine,message.Name,message.SourceName);wait Task.Run(()=>Logger(message));}private void Logger(TestMessage message){Console.WriteLine(message.ToString(false));}谢谢,@mookid,但我认为等待将一直等到队列为空……不是吗?不,这不是它的工作方式……Rebus将在应用程序运行的整个时间内启动并保持运行,并且只要它在运行,它就会处理消息。它的设计也确保随时停止它是完全可以的,即使ugh如果您想更新您的系统或任何东西,队列中还有更多的消息,只是为了在再次启动时恢复消息处理