如果在Azure Service Bus中消息接收模式为ReceiveAndDelete,则消息的TTL是多少?

时间:2019-03-04 16:42:37

标签: c# azure azureservicebus long-running-processes

我以ReceiveAndDelete模式从服务总线接收到一条消息,并开始运行一个非常长的计算过程,该过程完成后会发送邮件。我在长时间运行的方法中记录了所有方法的错误。但是,该方法运行10到15分钟,在此之后它既没有记录错误也没有发送电子邮件,因此变得无响应。我想知道这可能与邮件的TTL有关。

请告知我该怎么办?

    private static async Task ProcessMessagesAsync(Message message, CancellationToken token)
    {
       try
         {

           IQueueClient queueClient = new QueueClient(serviceBusConnectionString, serviceBusQueueName, ReceiveMode.ReceiveAndDelete);


            var receivedMessageTrasactionId = Convert.ToInt64(Encoding.UTF8.GetString(message.Body));

            // Very Long Running Method  
            await DataCleanse.PerformDataCleanse(receivedMessageTrasactionId);
                         // to avoid unnecessary exceptions.
          }

        catch (Exception ex)
        {
          Log4NetErrorLogger(ex);
          throw ex;
        }
    }

1 个答案:

答案 0 :(得分:0)

ReceiveAndDelete模式下接收消息时,消息的生存时间无关紧要。一旦在客户端接收到消息,该消息将从代理中删除。发生错误时,消息消失。这就是为什么当您希望拥有一种更安全的检索和处理消息机制时,建议使用PeekLock接收模式的原因。需要注意的是处理时间。由于要提供足够的信息,因此我不打算讨论这个问题,但是您可以续订邮件的锁定或卸载处理以消除锁定续订的需要。您可以在此answer中找到替代方法。