订阅队列设定的时间长度

时间:2018-08-11 14:35:59

标签: azureservicebus azure-servicebus-queues

我正在使用.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
     }

这就是我所期望的,在这段代码运行时,到达队列的任何消息都将得到处理。

我看到的是,它似乎要等待超时过期,然后才能从队列中“读取”消息。 也许我误解了订阅者的工作方式,但是我希望订阅者只订阅超时时间的队列。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

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

  1. 有待接收的邮件
  2. waitTime已经过去

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

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