Domanda

Non ho cose di impostazione in un modo abbastanza simile ai post del blog su di esso, ma sto ottenendo un errore quando all'avvio su una delle code.

Il msmq://localhost/colin_console_queue non viene creato automaticamente dal mio programma.

Sono abbastanza sicuro che non sto solo facendo qualcosa di giusto, ma non so che cosa ho omesso.

Ho fatto scoprire un attributo 'DisableAutoQueueCreation' e ho provato a installare su false sui vari elementi di configurazione e ho anche scoperto che era disponibile come una proprietà sulla RhinoServiceBusFacility così ho provato a installare anche lì. Purtroppo niente di tutto questo sembrava funzionare.

Se cambio i due URL per puntare alla stessa coda l'applicazione funziona in pratica, ma sono abbastanza sicuro che non è quello che dovrei fare. Ho guardato l'esempio applicazione Starbucks per vedere che cosa fa ma sembra di fare un sacco di messa a punto utilizzando percorsi hard coded nel codice.

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

Ecco il mio programma di test che sto usando per capire come utilizzare la coda.

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

Qui è l'errore che ottengo,

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
È stato utile?

Soluzione

Grazie a Ayende (via email) la risposta risulta essere perché la coda si ascolta (quello citato nel tag autobus) è l'unico che sei responsabile per la creazione automatica.

Il mio programma di esempio è abbastanza difettoso anche se così ho riscritto completamente le cose e fatto uso della coda un modo per garantire ho capito correttamente (beh penso di sì!). Io forse mettere l'esempio ad un certo punto, perché ho certamente avuto un po 'di difficoltà Grokking tutto.

Altri suggerimenti

Bene, in generale, un'applicazione web non dovrebbe fare amministrative su qualcosa come ccentral alle infrastrutture come il messaggio di accodamento configurazione di un server di accodamento. Veramente. Normale guidleines amministrative -. Che è il motivo per cui i programmatori probabilmente non pensavano someoen sarebbe nemmeno provare che

Vedi, ci possono essere più di impostazione u coda pLa di quanto si pensi di;.) Come configurarlo

Impostare le code manualmente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top