2009-11-20 3 views
3

Rhino Service Bus를 사용하여 1 명의 게시자와 여러 구독자간에 pub-sub를 설정하려고합니다. 그러나, 내가 이제까지 얻는 것 모두는 경쟁 소비자 (messges가 1 명의 소비자 또는 다른 사람 사이에서 배부되는 곳에, 그러나 둘 다에 보내지 않는)이다.Rhino 서비스 버스를 사용하여 여러 구독자에 대해 pub sub를 구성하는 방법은 무엇입니까?

나의 현재 게시자 구성이 (참고 : 내가 보낸 사람에 버스 요소를 정의 할 필요가 없습니다 그래서 새로운 OnewayRhinoServiceBusFacility을 사용하고 있습니다)처럼 보이는 나의 현재 가입자 구성은 다음과 같습니다

<facility id="rhino.esb.sender" > 
     <messages> 
      <add name="My.Messages.Namespace" endpoint="msmq://localhost/my.queue"/> 
     </messages> 
</facility> 

:

<facility id="rhino.esb.receiver" > 
    <bus threadCount="1" numberOfRetries="5" endpoint="msmq://localhost/my.queue" DisableAutoQueueCreation="false" /> 
    <messages> 
     <add name="My.Messages.Namespace" endpoint="msmq://localhost/my.queue" /> 
    </messages> 
</facility> 

게시자와 구독자를 시작하는 2 개의 간단한 명령 줄 앱이 있습니다. 구독자 bin을 복사하여 붙여 넣기 만하면 2 명의 구독자를 설정할 수 있습니다. 내 메시지 처리기는 다음과 같습니다.

public class DummyReceiver : ConsumerOf<MyMessageType> 
{ 
    public void Consume(MyMessageType message) 
    { 
        // ...... 
      } 
    } 

아이디어가 있으십니까? 환호

답변

3

Doh! 제작자 코드에서 게시 대신 보내기를 사용하고있었습니다. 그것을 다른 예제에서 복사하고 변경하는 것을 잊었습니다.

그래서, 참조를 위해 내 게시자 코드는 다음과 같다 :

var container = new WindsorContainer(new XmlInterpreter("RhinoEsbSettings.xml")); 
RhinoServiceBusFacility facility = new RhinoServiceBusFacility(); 
container.Kernel.AddFacility("rhino.esb", facility); 

var bus = container.Resolve<IStartableServiceBus>(); 
bus.Start(); 

MyMessageType msg = new ... 
bus.Publish(msg); 

그리고 내 소비자 시작 코드는 다음과 같다 :

var container = new WindsorContainer(new XmlInterpreter("RhinoEsbSettings.xml")); 
container.Register(Component.For<ConsumerOf<MyMessageType>>().ImplementedBy<DummyReceiver>().LifeStyle.Transient.Named("Consumer")); 

RhinoServiceBusFacility facility = new RhinoServiceBusFacility(); 
container.Kernel.AddFacility("rhino.esb", facility); 

var bus = container.Resolve<IStartableServiceBus>(); 
bus.Start();