2010-03-15 3 views
3

우리는 응용 프로그램에서 메시지를 디스패치하기 위해 NServiceBus를 사용할 계획입니다. 우리의 경우 각 메시지는이 메시지가 처리되어야하는 시간을 정의하는 timeToLive 속성을 가지고 있습니다.NServiceBus 예외 처리 및 메시지 다시 시도 메커니즘

첫 번째 시도에서 메시지 처리가 실패한 경우이를 성공적으로 처리하거나 timeToLive이 만료 된 경우 메시지를 특정 재시도 저장소 (재시도 대기열)로 옮기고 재시도간에 몇 가지 시간 제한을 사용하여 메시지를 다시 시도합니다 .

timeToLive이 만료 된 경우 메시지 내용을 기록하고 메시지를 삭제합니다.

사실이 재시도 동작은 주로 구현중인 프로토콜에 의해 결정됩니다.

NServiceBus에서 이러한 동작을 수행 할 수있는 방법이 있습니까? 알 수없는 메시지는 특정 error queue으로 전송됩니다. 오류 대기열을 가리키는 별도의 버스를 생성 할 수 있습니까?

답변

4

오류 큐를 모니터링하는 별도의 프로세스를 사용하여 설명하는 논리에 따라 재 시도를 수행하는 것이 좋습니다. http://andreasohlund.net/2010/03/15/errorhandling-in-a-message-oriented-world/

희망이 :

http://nservicebus.svn.sourceforge.net/viewvc/nservicebus/trunk/src/tools/management/Errors/ReturnToSourceQueue/NServiceBus.Tools.Management.Errors.ReturnToSourceQueue/Class1.cs?view=markup

내가 당신에게뿐만 아니라 몇 가지 아이디어를 줄 수있는 오류를 처리하는 방법에 대한 블로그 게시물이 있습니다 영감을 nservicebus와 함께 제공되는 ReturnToSourceQueue 도구를 살펴 보자 도와 줘요!

+0

감사합니다. Andreas. 나는이 질문을하기 전에 당신의 기사를 이미 빨간색으로 그린다.) 하나의 프로세스에서 많은 메시지 버스를 호스팅 할 수 있는지 알려주실 수 있습니까? 괜찮습니까? 아니면 nservicebus가 이것을 지원하지 않습니까? 아니면 하나의 프로세스에서 많은 버스가 작동하면서 심각한 성능 페널티가있을 수 있습니까? –

+0

기본 구성 모드에서는 app-domain 당 하나의 버스 만 가질 수 있습니다. 문제는 별개의 시스템에 오류 대기열을두고 다른 모든 프로세스가 오류를 이동하도록하고 싶다는 것입니다. 그런 다음 자신 만의 사용자 지정 논리를 사용하여 오류 큐를 공급하는 단일 프로세스/버스를 갖게됩니다. –

+0

andeas u 귀하의 링크를 수정하고 싶을 수 있습니다. – Simon