>

ReceiveAndDelete 모드에서 Service Bus로부터 메시지를 받고 완료 후 메일을 보내는 매우 긴 계산 프로세스를 실행하기 시작합니다. 장기 실행 메소드의 모든 메소드에 오류 로깅이 있습니다. 그러나이 방법은 10-15 분 동안 실행되며 전자 메일을 보내지 않고 오류를 기록하지도 않습니다. 메시지의 TTL과 관련이있을 수 있습니다.

어떻게해야합니까?

   private static async Task ProcessMessagesAsync(Message message, CancellationToken token)
    {
       try
         {
           IQueueClient queueClient = new QueueClient(serviceBusConnectionString, serviceBusQueueName, ReceiveMode.ReceiveAndDelete);

            var receivedMessageTrasactionId = Convert.ToInt64(Encoding.UTF8.GetString(message.Body));
            // Very Long Running Method  
            await DataCleanse.PerformDataCleanse(receivedMessageTrasactionId);
                         // to avoid unnecessary exceptions.
          }
        catch (Exception ex)
        {
          Log4NetErrorLogger(ex);
          throw ex;
        }
    }


  • 답변 # 1

    ReceiveAndDelete 에서 메시지를받을 때  메시지의 시간은 중요하지 않습니다. 클라이언트 쪽에서 메시지가 수신되면 브로커에서 제거됩니다. 오류가 발생하면 메시지가 사라집니다. 그래서 PeekLock 를 사용하는 것이 좋습니다.  메시지를 검색하고 처리하는보다 안전한 메커니즘을 원할 때 수신 모드. 주의 사항은 처리 시간입니다. 충분한 정보가 있기 때문에 그것에는 들어 가지 않을 것이지만 잠금 갱신의 필요성을 없애기 위해 메시지 잠금 또는 오프로드 처리를 갱신 할 수 있습니다. 이 답변에서 대안을 찾을 수 있습니다.

관련 자료

  • 이전 Python sys.argv - 파이썬 sysargv - [파이프 또는 세미콜론으로] 전체 명령 행 가져 오기
  • 다음 swift - Firestore 검색 배열에 여러 값이 포함됨