2017-09-16 155 views
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); 
     } 
    } 

上午我在這裏做得不對,它是一個錯誤或可能預期的行爲?

+0

Azure Service Bus在另一個線程上正在進行完成。您是否嘗試禁用自動完成並在回調中完成自己? –

+0

我確定手動自動完成功能可以正常工作。我很好奇爲什麼它不應該完成消息 – 85rainbow

+0

如果在另一個線程上完成,與任務相關的異常將不會到達該代碼。 –

回答

0

我假設。不知道實際的代碼在做什麼(這個客戶端不是開源的,在新客戶端看起來這種情況不應該發生)。 ASB客戶端正在執行的回調周圍存在異常處理,但無法處理任務異常,從而允許完成該消息。您可以向客戶here向ASB團隊提出問題。