0
我正在使用带自动完成选项的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);
}
}
上午我在这里做得不对,它是一个错误或可能预期的行为?
Azure Service Bus在另一个线程上正在进行完成。您是否尝试禁用自动完成并在回调中完成自己? –
我确定手动自动完成功能可以正常工作。我很好奇为什么它不应该完成消息 – 85rainbow
如果在另一个线程上完成,与任务相关的异常将不会到达该代码。 –