2011-10-19 4 views
1

불명확합니다. 실제로 처리기 간에는 종속성이 없으며 일부는 동일한 유형의 메시지 만 처리합니다. 예를 들어 우리 시스템에서는 인보이스를 처리합니다. 인보이스가 시스템에 도착하면 매우 간단 해집니다. "InvoiceArrived"메시지가 nservicebus로 전송되고 두 가지 일이 발생해야합니다. 인보이스에 대한 정보는 외부 시스템으로 전송되어야하고 송장을 처리 할 사람에게 전자 메일을 보내야합니다 (송장 정보에 따라 다른 사람). 이 두 가지는 서로에 대한 의존성이 없지만 이메일은 중요하지 않은 반면 외부 시스템으로의 내보내기는 매우 중요합니다.NServicebus 및 메시지 처리기 주문

전자 메일을 보내는 처리기가 먼저 실행되고 (잘못된 구성으로 인해) 처리되었지만 5 회 재 시도했지만 매번 누적되었지만 전자 메일이나 외부 시스템으로의 내보내기는 수행되지 않았습니다. 구성 수정은 쉬웠지 만 디자인에 결함이 있음을 보여주었습니다.

핸들러가 실행되는 순서를 지정해도 반대 상황이 바람직하지 않으므로 핸들러가 실행되는 순서를 지정하면 내보내기 핸들러를 먼저 실행 한 다음 이메일 전송을 중단해야하므로 디자인을 다시 생각해야합니다. 5 번의 재시도 및 5 번의 성공적인 수출 (그러나 성공한 이메일 없음)이 발생합니다. 나는 ... 우리가 각 핸들러에 대해 하나 개의 메시지 유형을 보내야 할 것 같아요

원래 메시지 : 우리는 사건의 수에 대한 핸들러를 설정하는 NServiceBus를 사용하는

, 각 버스에 고유 한 메시지 유형을 전송 (현재 6 개이지만 숫자가 늘어나고 있습니다). 이러한 이벤트 중 일부 (2 개는 현재)에는 하나 이상의 핸들러가 있으며 각 메시지 유형에 대해 특정 순서로 실행되도록하고 싶습니다.

우리는 우리 자신의 호스트를하고 난 당신 같은 순서를 지정할 수 있습니다 알고있다. NServiceBus.Configure.With() ... .UnicastBus()를 .LoadMessageHandlers (우선 집() AndThen를(). andThen() // etc)

메시지 처리기 H1_1, H1_2 (모두 유형 1의 메시지 처리, H1_2 이전에 실행될 H1_1), H2_1, H2_2 (유형 2의 메시지 처리) 및 H3 - H6 (유형 3 - 6의 메시지를 처리하는 유일한 장치)

물론 모든 처리기를 지정하여 관리 할 수 ​​있습니다.

.LoadMessageHandlers(First<H1_1>.Then<H1_1>().Then<H2_1>() //etc) 

그러나이 때마다 우리는 우리가이 구성에 추가 할 새 처리기를 추가 것을 의미

는 가능 물론 더 나은하지만 여전히 것

.LoadMessageHandlers(First<H1_1>.Then<H2_1>()) //and all the other handlers are run there after? 

을 작성하는 것입니다 H1_1과 H2_1은 서로 할 일이 없으며 동일한 메시지에서 어떤 식 으로든 실행되지 않습니다. 메시지 유형을 지정하는 방법이 없습니까? 즉, 유형 1 First<H1_1>.Then<H1_2>()과 유형 2 First<H2_1>.Then<H2_2>()이고 다른 모든 유형의 경우 처리기가 하나뿐이므로 지정이 필요하지 않습니까?

감사합니다. 사전에 도움을 주시면 대단히 감사하겠습니다!

+0

핸들러간에 많은 종속성이 있다는 사실은 디자인에 약간의 조정이 필요하다는 신호 일 수 있습니다.그 핸들러가 무엇을하고 있는지, 그리고 그들이 명령을 내리는 순서가 왜 중요한지에 대해 알려줄 수 있습니까? –

+0

메시지 유형을 각기 다른 끝점으로 이동하면 도움이 될 것 같습니다. 이렇게하면 다르게 주문할 수 있지만 Andreas에 동의합니다. 자세한 내용이 필요한 것 같습니다. –

답변

1

버전 3.0에서는 정확하게 이러한 이유로 ISpecifyMessageHandlerOrdering의 여러 구현을 지원할 것입니다.

관련 문제