كيفية تكوين Pub Sub لعدة مشتركين مع حافلة خدمة Rhino؟

StackOverflow https://stackoverflow.com/questions/1772296

  •  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();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top