2014-10-15 6 views
1

예외가 발생하면 메시지 내용을 기록 할 수 있습니까?Rebus에서 오류 메시지 내용을 기록하는 방법?

다양한 로깅 확장 프로그램을 살펴 보았지만 CorrelationId를 로깅합니다. 그리고 메시지 내용을 사용할 수 없습니다.

MessageContext에는 CurrentMessge 속성이 있지만 로그 작성자가 예외를 쓸 때 사용할 수 없습니다.

메시지 내용을 기록 할 수있는 PoisonMessage 이벤트를 처리하려고했습니다.

public static void OnPoisonMessage(IBus bus, ReceivedTransportMessage receivedTransportMessage, Rebus.Bus.PoisonMessageInfo poisonMessageInfo) { 

var message = new JsonMessageSerializer().Deserialize(receivedTransportMessage); 
    Log.Error("{@messageType} failed {@message}", message.Messages[0].GetType(), message); 
} 

위대한 작품이지만, 이제 로그러에 내 처리기에서 오는 오류와 로거에서 오는 두 가지 오류가 있습니다.

이 요구 사항을 처리하는 더 좋은 방법이 있는지 궁금합니다.

답변

0

귀하의 요구 사항이 단순히 JSON으로 메시지 내용을 기록하는 것이라면, 나는 당신이 그것을 할 올바른 방법을 찾았을 것이라고 생각합니다. 적어도 그렇게했을 것입니다.

메시지 내용을 로깅하여 어떤 문제를 해결하고 있는지 궁금합니다. 오류 메시지가 검사 할 수있는 오류 대기열에 있다는 사실을 알고 있습니까?

MSMQ를 사용하는 경우 간단한 MSMQ 검사기 인 Rebus' Snoop-tool을 사용하여 JSON 직렬화 된 메시지를 검사 할 수 있습니다. 또한 메시지를 실패한 입력 대기열로 다시 옮길 수 있습니다 ("소스 대기열로 돌아 가기")

Rebus 설치를 모니터링하는 좋은 방법은 무언가가 도착했을 때 어떤 종류의 경고를 설정하는 것입니다. 오류 대기열을 찾은 다음 메시지 (특수 헤더에서 발견 된 예외를 포함)를보고 해당 상황을 해결할 수 있습니다.

+0

코드의 버그로 인해 메시지가 실패하면 오류 내용과 함께 메시지 내용을보고 컨텍스트를 이해하는 것이 매우 유용합니다. DevOps는 대개 대기열 인프라에 대한 액세스를 제어합니다. 또한 문제를 이해하기 위해 여러 곳을 바라 보는 것의인지 적 부담을 줄여줍니다. – chandmk