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