2012-08-04 2 views
2

UnicastBusConfig, MsmqTransportConfig, 및 MSMQ 대기열 간의 관계로 인해 혼란스러워합니다. 워드 프로세서 상태 :NServiceBus - 두 게시자, 하나의 구독자, 동일한 메시지 인터페이스

나는 각 것을 믿는 수정

이 있습니까 "구독자에서 버스가 게시자에 가입하는 방법은 섹션에 구성되어있는 큐에 메시지를 보내 입니다" 구독자는 메시지 구독자가 처리 할 수있는 메시지를 게시 할 수있는 각 게시자의 끝점 (또는 큐)으로 MessageEndpointMapping을 다시 포함해야합니까?

그런 경우 동일한 메시지 유형에 대해 MessageEndpointMapping을 두 개 이상 구성하는 방법은 무엇입니까? 중복 값을 가질 수 없습니다. 이것에 대한

<UnicastBusConfig> 
    <MessageEndpointMappings> 
     <add Messages="MyAssembly" Endpoint="Publisher1" /> 
     <add Messages="MyAssembly" Endpoint="Publisher2" /> <-- runtime exception 
    </MessageEndpointMappings> 
</UnicastBusConfig> 

비즈니스 케이스는 간단하다 : MyAssembly.IDoStuff 주어진

예를 들어

은 내가 IDoStuff 한 가입자를 게시 두 출판사가 있다고 가정. 구독자가 파일을 가져 와서 FTP에서 가져 오는 FTP 프로세스라고 가정 해보십시오. 당연히 당신은 기업 전체의 여러 곳에서 그 기능을 사용하고 싶을 것입니다. 따라서 ISendFile을 처리하고 FTP 기능을 필요로하는 각 Publisher 프로세스에 ISendFile 메시지를 게시하는 FTP 구독자를 갖는 것이 좋습니다. 이것은 내가 실행하고있는 정확한 시나리오입니다. 그리고 그 주위에 방법이 보이지 않습니다.

감사합니다.

답변

4

Kijana가 nsb 목록에서 언급했듯이 pub sub의 핵심 가정 중 하나는 게시자가 구독자에 대해 알 필요가 없다는 것입니다. 귀하의 예에서는 0 명의 가입자가있을 수도 있습니다. 그 이후로는 아무런 FTP 전송도 수행되지 않습니다. 이것은 버스를해야한다는 신호입니다. Send (SendStuffUsingFtpCommand)를 대신 보내십시오. NServiceBus는 지정된 메시지 유형에 대해 하나의 논리적 게시자 만 허용하여 해당 경로를 안내합니다. 엄밀히 말하면 메시지 유형별로 하나의 메시지 매핑 항목을 의미합니다.

+0

bus.Send 은 작업을 완료하지만 잘못되었습니다. 하나의 구독자에게 여러 게시자의 문제를 해결하지만 여러 구독자가 필요할 때 어떻게됩니까? 그런 다음 버스로 되돌려 야합니다. 을 게시하고 배급 업체를 이용하십시오. 그 말이 맞는 것 같아요. 그러나 보내기 대 게시 구성은 너무 복잡하다고 느낍니다. – znelson

+1

동일한 논리 메시지에 대해 여러 게시자가있는 경우를 생각합니다. 동일한 CustomerStatusUpdated 이벤트를 게시하는 이전 + 새 CRM 시스템을 생각해보십시오. 이것은 지원되며, 엔드 포인트간에 서브 스크립 션 스토리지를 공유하면 구독자가 (아마도 새로운 CRM) –

관련 문제