【问题标题】:MessageLockLostException breaks Service Bus QueueClientMessageLockLostException 中断服务总线 QueueClient
【发布时间】:2018-09-28 07:58:05
【问题描述】:

我有监听服务总线队列的服务。几天一次,我收到MessageLockLostException。异常本身对我来说很清楚,这不是问题。但是 QueueClient 在收到异常后似乎损坏并停止处理任何进一步的消息。我知道我可以将try / catch 添加到ProcessMessagesAsync。但是我认为ExceptionReceivedHandler 应该处理这种情况,QueueClient 应该尝试再次处理相同的消息(或者如果多次处理失败,则将其发送到 DLQ)。

public class QueueService
{
    private readonly QueueClient _queueClient;

    public QueueServiceServiceBus(string connectionString, ILogger<QueueServiceServiceBus> logger)
    {
        _logger = logger;
        var serviceBusConnectionStringBuilder = new ServiceBusConnectionStringBuilder(connectionString);
        _queueClient = new QueueClient(serviceBusConnectionStringBuilder);

        RegisterMessageHandler();
    }

    private Task ExceptionReceivedHandler(ExceptionReceivedEventArgs exceptionReceivedEventArgs)
    {
        _logger.LogError("Message handler encountered an exception {Exception}",
            exceptionReceivedEventArgs.Exception);

        return Task.CompletedTask;
    }        

    private async Task ProcessMessagesAsync(Message message, CancellationToken token)
    {
        //Handle message

        await _queueClient.CompleteAsync(message.SystemProperties.LockToken);
    }

    private void RegisterMessageHandler()
    {
        var messageHandlerOptions = new MessageHandlerOptions(ExceptionReceivedHandler)
        {
            AutoComplete = false
        };

        _queueClient.RegisterMessageHandler(ProcessMessagesAsync, messageHandlerOptions);
    }
}

【问题讨论】:

    标签: c# azure azureservicebus


    【解决方案1】:

    ExceptionReceivedHandler 处理在检索和处理消息期间发生的异常。

    QueueClient 不会因任何原因而中断,除非它因过载而受到限制。

    我尝试了您提供的示例。它对我来说很好,ExceptionReceivedHandler 处理MessageLockLostException 不会中断。

    【讨论】:

    • 即使该行记录了异常? ` _logger.LogError("消息处理程序遇到异常 {Exception}", exceptionReceivedEventArgs.Exception);`
    • 我已经修改了我的答案,ExceptionReceivedHandler 处理处理消息时发生的异常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多