订阅队列一段时间

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) 是一次性接收,直到满足以下条件之一:

  1. 有消息待接收
  2. waitTime 已过去

如果您想将接收操作绑定到某个时间段,您可以在您感兴趣的接收消息的持续时间内使用循环/消息泵。或者,您可以 register a message handler 以免构建您自己的消息泵。第二种选择的缺点是要停止接收,您需要关闭接收客户端。在第一个选项中,您不需要关闭它,因此保持连接。

关闭连接的潜在解决方案是使用 ServiceBusConnection 而不是连接字符串来创建您的客户端。这样,当客户端关闭时,连接仍然保持活动状态。