我正在使用.Net Core 2.1,并且我有一个Web Api项目,该项目使用MessageReceiver订阅队列。
我想要的是此订阅者在x分钟内保持“活跃”状态。 现在,我必须承认,我实际上认为超时实际上是这样工作的,但我认为情况并非如此。这是我到目前为止所拥有的
var reciever = new MessageReceiver(connectionString, queueName);
Message message = await reciever.ReceiveAsync(TimeSpan.FromMinutes(2));
if (message != null)
{
// process
}
这就是我所期望的,在这段代码运行时,到达队列的任何消息都将得到处理。
我看到的是,它似乎要等待超时过期,然后才能从队列中“读取”消息。 也许我误解了订阅者的工作方式,但是我希望订阅者只订阅超时时间的队列。
任何帮助将不胜感激。
答案 0 :(得分:0)
ReceiveAsync(waitTime)
是一次性收到,直到满足以下条件之一:
waitTime
已经过去如果您想将接收操作绑定到某个时间段,则您可以在您感兴趣的持续时间内拥有循环/消息泵。或者,您可以register a message handler以便不构建自己的消息泵。第二种选择的缺点是要停止接收,您需要关闭接收客户端。在使用第一个选项的情况下,无需关闭它,因此可以保持连接状态。
可能的解决方案关闭连接将使用ServiceBusConnection
而不是连接字符串来创建客户端。这样,当客户端关闭时,连接仍然保持活动状态。