我以接收到的方式从服务总线接收一条消息,然后开始运行一个很长的计算过程,该过程在完成后发送邮件。我在长期运行的方法中都有所有方法记录的错误。但是,该方法运行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;
}
}
在ReceiveAndDelete
模式下接收消息时,消息的直播时间无关紧要。一旦在客户端收到消息后,它将从经纪人中删除。如果出错,消息就消失了。这就是为什么建议使用更安全的检索和处理消息机制时使用PeekLock
接收模式的原因。警告是处理时间。我不会因为有足够的信息而介入,但是您可以续订消息的锁定或卸载处理以消除锁定续订的需求。您会在此答案中找到替代方案。