لماذا لا يخلق Rhino.ServiceBus تلقائيا جميع قوائم الانتظار الخاصة بي؟

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

سؤال

لقد قمت بإعداد الأشياء بطريقة مشابهة لمرورات المدونة حولها ولكني أحصل على خطأ عند بدء تشغيل أحد قوائم الانتظار.

ال msmq://localhost/colin_console_queue لا يتم إنشاؤه تلقائيا بواسطة برنامجي.

أنا متأكد من أنني فقط أنا فقط لا أفعل شيئا صحيحا ولكني لا أعرف ما أحذفته.

لقد اكتشفت سمة "disableAutequequecreation"، وحاولت تحديدها إلى FALSE على عناصر التكوين المختلفة وأكتشفت أنها كانت متاحة كممتلكات على RhinoServiceBusFacility لذلك حاولت إعداده هناك أيضا. لسوء الحظ لا يبدو أي من ذلك.

إذا قمت بتغيير عناوين URL لإشارة إلى نفس قائمة الانتظار، فإن التطبيق يعمل أساسا ولكنني متأكد من أن هذا ليس ما من المفترض أن أفعله. نظرت إلى تطبيق مثال Starbucks لمعرفة ما يفعله ولكن يبدو أنه يقوم بالكثير من الإعداد باستخدام المسارات المشفرة الثابت في التعليمات البرمجية.

<facilities>
  <facility id="rhino.esb">
    <bus threadCount="1" numberOfRetries="5" endpoint="msmq://localhost/colin_console_queue_bus"
         logEndpoint="msmq://localhost/colin_console_queue_bus.log" />
    <messages>
      <add name="ConsoleApplication1" endpoint="msmq://localhost/colin_console_queue" />
    </messages>
  </facility>
</facilities>

إليك برنامج الاختبار الخاص بي الذي أستخدمه لمعرفة كيفية استخدام قائمة الانتظار.

    static void Main(string[] args)
    {
        var container = new WindsorContainer(new XmlInterpreter());
        container.Kernel.AddFacility("rhino.esb", new RhinoServiceBusFacility());
        if (args.Length > 0)
        {
            var bus = container.Resolve<IStartableServiceBus>();
            bus.Start();
            bus.Send(new EmailMessage { Message = args[0], To = "test" });
            bus.Dispose();
        }
        else
        {
            container.Register(AllTypes.FromAssembly(Assembly.GetExecutingAssembly()).BasedOn(typeof(IMessageConsumer)));
            var bus = container.Resolve<IStartableServiceBus>();
            bus.Start();
            Console.ReadLine();
            Console.WriteLine("Bus stopped");
            bus.Dispose();
        }
    }

هنا هو الخطأ الذي أحصل عليه،

Unhandled Exception: System.Transactions.TransactionException: Failed to send message to Uri: msmq://colin-pc/colin_console_queue ---> Rhino.ServiceBus.Exceptions.TransportException: The queue msmq://colin-pc/colin_console_queue does not exists
   at Rhino.ServiceBus.Msmq.OpenedQueue..ctor(QueueInfo info, MessageQueue queue, String url, Nullable`1 transactional) in D:\Work\rhino-esb\Rhino.ServiceBus\Msmq\OpenedQueue.cs:line 24
   at Rhino.ServiceBus.Msmq.QueueInfo.Open(QueueAccessMode access, IMessageFormatter formatter) in D:\Work\rhino-esb\Rhino.ServiceBus\Msmq\QueueInfo.cs:line 71
   at Rhino.ServiceBus.Msmq.QueueInfo.Open(QueueAccessMode access) in D:\Work\rhino-esb\Rhino.ServiceBus\Msmq\QueueInfo.cs:line 63
   at Rhino.ServiceBus.Msmq.MsmqTransport.SendMessageToQueue(Message message, Endpoint endpoint) in D:\Work\rhino-esb\Rhino.ServiceBus\Msmq\MsmqTransport.cs:line 303
هل كانت مفيدة؟

المحلول

بفضل Ayende (عبر البريد الإلكتروني) تبين أن الإجابة لأن قائمة الانتظار التي تستمع إليها (المذكورة المذكورة في علامة الحافلة) هي الوحيدة التي تكون مسؤولة عن إنشاءها تلقائيا.

يتم ربط برنامج مثالي تماما على الرغم من أنني أعيد كتابة الأشياء تماما واستخدام قائمة انتظار طريقة واحدة للتأكد من فهمته بشكل صحيح (حسنا، أعتقد أنني أفعل!). ربما سأطرح المثال في مرحلة ما لأنني بالتأكيد كان لدي الكثير من الصعوبة grokking كل شيء.

نصائح أخرى

حسنا، يجب ألا يقوم تطبيق ويب بشكل عام بإجراءات إدارية على شيء مثل CCENTRAL إلى البنية التحتية كتكوين في قائمة انتظار الرسائل لخادم قائمة انتظار. هل حقا. Guidlines الإدارية العادية - وهذا هو السبب في أن المبرمجين ربما لا يعتقدون أن بعض الشيء سيحاول ذلك.

انظر، قد يكون هناك المزيد لإعداد قائمة انتظار يو PThe أكثر مما تفكر فيه؛) مثل تكوينه.

قم بإعداد قوائم الانتظار يدويا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top