首页 > 解决方案 > 订阅队列一段时间

问题描述

我正在使用 .Net Core 2.1,并且我有一个使用 MessageReceiver 订阅队列的 Web Api 项目。

我想要的是让这个订户保持“活着” x 分钟。现在我必须承认,我实际上认为超时实际上是这样工作的,但我不认为是这样。这是我到目前为止所拥有的

     var reciever = new MessageReceiver(connectionString, queueName);
     Message message = await reciever.ReceiveAsync(TimeSpan.FromMinutes(2));

     if (message != null)
     { 
          // process
     }

所以这就是我所期望的,在这段代码运行时进入队列的任何消息都将被处理。

我所看到的是,它似乎要等待超时到期,然后才能从队列中“读取”消息。也许我误解了订阅者应该如何工作,但我想要订阅者在超时时间内订阅队列。

任何帮助,将不胜感激。

标签: azureservicebusazure-servicebus-queues

解决方案


ReceiveAsync(waitTime)是一次性接收,直到满足以下条件之一:

  1. 有消息要接收
  2. waitTime已过

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

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


推荐阅读