TaskCancelationException上的Azure Service Bus消息重试

时间:2017-09-16 11:09:03

标签: c# azureservicebus azure-servicebus-queues

我使用带有自动完成选项的QueueClient消息泵。当从回调中抛出异常时,重试该消息并最终破坏。

不幸的是,当从回调中抛出TaskCancelationException或OperationCanceledException时,情况并非如此。消息自动完成,从不重试。此外,还不调用OptionsOnExceptionReceived事件处理程序。

_queueClient = QueueClient.CreateFromConnectionString(connectionString, queueName, ReceiveMode.PeekLock);

...

public void OnMessageAsync(Func<BrokeredMessage, Task> callback)
    {
        if (_queueClient.IsClosed == false)
        {
            var options = new OnMessageOptions
            {
                MaxConcurrentCalls = _maxConcurrentCalls,
                AutoRenewTimeout = TimeSpan.FromMinutes(_autoRenewTimeoutInMinutes),
                AutoComplete = true
            };

            options.ExceptionReceived += OptionsOnExceptionReceived;

            _queueClient.OnMessageAsync(callback, options);
        }
    }

我在这里做错了,这是一个错误还是可能的行为?

1 个答案:

答案 0 :(得分:0)

我在假设。不知道实际代码在做什么(这个客户端不是开源的,在新客户端看起来不应该发生这种情况)。您的回调是ASB客户端正在执行的异常处理,但它无法处理任务异常,从而允许完成消息。您可以针对客户here向ASB团队提出问题。