2017-09-16 3 views
0

자동 완성 옵션과 함께 QueueClient 메시지 펌프를 사용하고 있습니다. 콜백에서 예외가 발생하면 메시지가 다시 시도되고 마지막으로 삭제됩니다.Azure 서비스 버스 메시지가 TaskCancelationException에서 다시 시도됩니다.

불행히도 TaskCancelationException 또는 OperationCanceledException이 콜백에서 발생하는 경우 그렇지 않습니다. 메시지는 자동 완성되어 재 시도되지 않습니다. 또한 OptionsOnExceptionReceived 이벤트 핸들러가 호출되지 않습니다.

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); 
     } 
    } 

내가 여기 뭔가 잘못하고 있습니까
_queueClient = QueueClient.CreateFromConnectionString(connectionString, queueName, ReceiveMode.PeekLock); 

..., 그것은 버그가 아니면 동작을위한?

+0

Azure Service Bus에서 다른 스레드에서 완료가 발생했습니다. 자동 완료를 사용 중지하고 콜백에서 자신을 완료하려고 시도 했습니까? –

+0

수동 자동 완성 기능이 작동합니다. 나는 그것이어야 할 때 메시지를 완성하는 이유가 궁금합니다. – 85rainbow

+0

다른 스레드에서 완료되면 작업 관련 예외가 해당 코드에 도달하지 않습니다. –

답변

0

나는 추측하고있다. 실제 코드가 무엇을하는지 알지 못합니다.이 클라이언트는 오픈 소스가 아니며 새로운 클라이언트에서는 이러한 상황이 발생하지 않아야합니다. ASB 클라이언트가 수행중인 콜백을 중심으로 예외 처리가 있지만 작업 예외를 처리하지 못하고 메시지를 완료 할 수 없습니다. 클라이언트 here에 대해 ASB 팀과 문제를 제기 할 수 있습니다.