我正在尝试使用Rhino Service Bus在1个发布者和多个订阅者之间设置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)
{
// ......
}
}
有什么想法吗?干杯
答案 0 :(得分:3)
卫生署!在我的生产者代码中使用Send而不是Publish。从另一个例子复制它,忘了改变。
因此,作为参考,我的发布商代码是这样的:
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();