كيفية تكوين Pub Sub لعدة مشتركين مع حافلة خدمة Rhino؟
-
21-09-2019 - |
سؤال
أحاول إعداد Pub-Sub بين ناشر واحد ومشتركين متعددين باستخدام ناقل خدمة Rhino. ومع ذلك ، كل ما يبدو أنني أحصل عليه هو المستهلكين المتنافسين (حيث يتم توزيع الرسائل بين مستهلك واحد أو آخر ، ولكن لم يتم إرسالها إلى كليهما).
يبدو تكوين الناشر الحالي الخاص بي مثل هذا (ملاحظة: أنا أستخدم 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>
لدي تطبيقان بسيطان لسطر الأوامر الذي يبدأ الناشر والمشترك. أنا فقط نسخ ولصق bin bin لإعداد 2 مشتركين. يبدو معالج رسالتي هكذا:
public class DummyReceiver : ConsumerOf<MyMessageType>
{
public void Consume(MyMessageType message)
{
// ......
}
}
أيه أفكار؟ هتافات
المحلول
دوه! كان يستخدم إرسال بدلاً من النشر في رمز المنتج الخاص بي. قد نسخها من مثال آخر ونسي التغيير.
لذلك ، للرجوع إليها رمز الناشر الخاص بي مثل هذا:
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();