2014-01-13 3 views
0

: 예외가 5 회를 던져 그것이 내가 내 처리기를 볼 수있는 오류에 진행되는MassTransit 오류 메시지가 게시 두 번 나는 예외 다음과 같은 구독 버스를 던지고 소비자가

ServiceBusFactory.New(sbc=>{ 
    ... removed for brevity... 
    sbc.Subscribe(s=>{ 
     ... removed for brevity... 
     var logger = LogManager.GetLogger("Faults"); 
     s.Handler<IFault>(fault => logger.Error(JsonConvert.SerializeObject(fault))); 
    } 
} 

두 개의 서로 다른 스레드에서 두 번 호출됩니다.

왜 나는 한 번만 그런 일이 발생하기를 바랍니다.

어쩌면 나는이 잘못된 방향으로 가고 있습니다. 나는 그 잘못이 일어 났는지 기록하고 그걸 재 처리 할 수 ​​있기를 원합니다. 이미이 문제를 처리하기 위해 MassTransit 또는 RabbitMQ에 내장 된 것이 있습니까? 원래 MSMQ를 사용하고 있었는데 오류 메시지를 관련 _error 큐에 자동으로 던져 넣었지만 RabbitMQ가있는 큐는 표시되지 않습니다.

+0

2.9.5 또는 이전 버전입니까? –

+0

요지 : https://gist.github.com/phatboyg/8428147 –

+0

Chris : 2.9.0, 몇 주 전에 코드에서 작성했습니다. –

답변

0

나는이 문제를 발견했다고 믿는다. 오류를 로그하기위한 이전의 시도는 IFault 객체 대신 각 오류 유형별로 핸들러를 등록한다는 것을 의미한다. 그 중 일부는 여전히 RabbitMQ에 등록되었습니다. 그 (것)들을 삭제하는 것은 문제를 해결했다.

2

내가 확인했다 : 오류 이벤트 만 소비자의 5 개 개의 연속 실패 후 한 번 발행되는

https://gist.github.com/phatboyg/8428147 

. 이것은 RabbitMQ 또는 MSMQ를 사용하는 NuGet의 MT 2.9.5입니다.

+0

나는 당신의 요점을 가져 와서 그것을 단위 테스트로 돌렸다. 그것은 잘 전달하므로 config로 뭔가를 알고 있지만 내 인생을 위해 나는 문제를 찾을 수없는 것 같습니다. 나는 파기를 계속하고 일단 대답을 찾으면 다른 사람들이 내 실수에서 배울 수 있도록 무언가를 발표 할 것입니다. –

+0

그래서 흥미로운 것은 컨텍스트를 보면 두 개의 서로 다른 메시지 ID가 있다는 것입니다. 컨텍스트 간의 다른 모든 요소는 같습니다. 그게 무슨 뜻인지에 대한 생각? –

+0

Id 또는 MessageId? Id는 큐에서 모든 읽기를 추적하기 위해 내부적으로 사용되며, MessageId는 전송에 대한 일련 ID입니다. –

관련 문제