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