2009-11-20 3 views
3

J'essaie de mettre en place pub-sub entre 1 éditeur et plusieurs abonnés utilisant Rhino Service Bus. Cependant, tout ce que j'ai l'impression d'avoir, c'est des consommateurs concurrents (où les messages sont distribués entre 1 consommateur ou l'autre, mais pas envoyé aux deux).Comment configurer pub sub pour plusieurs abonnés avec Rhino Service Bus?

Ma configuration actuelle de l'éditeur ressemble à ceci (Note: J'utilise le nouveau OnewayRhinoServiceBusFacility donc je ne ai pas besoin de définir un élément de bus dans l'émetteur)

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

Ma configuration d'abonné actuelle ressemble à ceci :

<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> 

J'ai 2 applications de ligne de commande simples qui démarrent l'éditeur et l'abonné. Je viens de copier et coller bin abonné pour mettre en place 2 abonnés. Mon gestionnaire de message ressemble à ceci:

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

Des idées? Salutations

Répondre

3

Doh! J'utilisais Send au lieu de Publish dans mon code producteur. L'avait copié d'un autre exemple et a oublié de changer.

Ainsi, pour référence mon code d'éditeur est comme ceci:

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); 

Et mon code de démarrage du consommateur est comme ceci:

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(); 
Questions connexes