Azure服务总线消息重试TaskCancelationException
问题描述:
我正在使用带自动完成选项的QueueClient消息泵。当从回调中抛出异常时,消息将被重试并最终失效。Azure服务总线消息重试TaskCancelationException
不幸的是,当从回调中抛出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);
}
}
上午我在这里做得不对,它是一个错误或可能预期的行为?
答
我假设。不知道实际的代码在做什么(这个客户端不是开源的,在新客户端看起来这种情况不应该发生)。 ASB客户端正在执行的回调周围存在异常处理,但无法处理任务异常,从而允许完成该消息。您可以向客户here向ASB团队提出问题。
Azure Service Bus在另一个线程上正在进行完成。您是否尝试禁用自动完成并在回调中完成自己? –
我确定手动自动完成功能可以正常工作。我很好奇为什么它不应该完成消息 – 85rainbow
如果在另一个线程上完成,与任务相关的异常将不会到达该代码。 –