Pregunta

He ajustar las cosas de una manera bastante similar a los Artículos sobre él, pero yo estoy recibiendo un error cuando en el arranque de una de las colas.

El msmq://localhost/colin_console_queue no se crea automáticamente por mi programa.

Estoy bastante seguro de que no estoy haciendo algo bien, pero no sé lo que he omitido.

Me hizo descubrir un atributo 'DisableAutoQueueCreation' y he intentado establecer en false en los diversos elementos de configuración e incluso descubrí que estaba disponible como una propiedad en la RhinoServiceBusFacility así que intentó establecer allí también. Por desgracia, nada de eso parecía funcionar.

Si cambio las dos direcciones URL para que apunte a la misma cola de la aplicación funciona, básicamente, pero estoy bastante seguro de que no es lo que tengo que hacer. Miré la aplicación de ejemplo Starbucks para ver que hace, pero parece que hacer un montón de configuración mediante rutas no modificables en el Código.

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

Aquí está mi programa de prueba que estoy usando para encontrar la manera de utilizar la cola.

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

Aquí está el error que consigo,

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
¿Fue útil?

Solución

Gracias a Ayende (vía correo electrónico) la respuesta resulta ser debido a que la cola de escucha (el que se menciona en la etiqueta de autobús) es el único que es responsable de la creación automática.

Mi programa de ejemplo es bastante defectuoso aunque por lo que volvió a escribir cosas completamente e hice uso de la cola de una manera de asegurar lo entendí correctamente (así creo que sí!). tal vez voy a poner el ejemplo en algún momento, porque sin duda que tenía un poco de dificultad Grokking todo.

Otros consejos

Bueno, en general, una aplicación web no debe hacer la acción administrativa en algo tan Ccentral a la infraestructura como la cola de mensajes configuración de un servidor de colas. De Verdad. guidleines administrativos normales -. por lo que los programadores probablemente no pensaron someoen siquiera intentarlo

Ver, puede haber más para establecer u cola pEl de lo que piensa de;). Al igual que la configuración

Configurar las colas manualmente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top