Question

J'ai des choses de configuration d'une manière assez similaire aux messages de blog à ce sujet, mais je reçois une erreur quand au démarrage sur l'un des files d'attente.

Le msmq://localhost/colin_console_queue ne soit pas créé automatiquement par mon programme.

Je suis assez sûr que je ne suis pas faire quelque chose de bien, mais je ne sais pas ce que j'ai omis.

Je l'ai fait découvrir un attribut 'DisableAutoQueueCreation et je tenté de mettre à faux sur les différents éléments de configuration et j'ai découvert même qu'il était disponible comme une propriété sur le RhinoServiceBusFacility donc j'ai essayé le mettre là aussi. Malheureusement, rien de tout cela ne semblait fonctionner.

Si je change les deux urls pour pointer vers la même file d'attente l'application fonctionne essentiellement mais je suis assez sûr que ce pas ce que je suis censé faire. Je regardais l'exemple d'application Starbucks pour voir ce qu'il fait, mais il semble faire beaucoup de configuration à l'aide des chemins codés en dur dans le code.

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

Voici mon programme de test que je utilise pour comprendre comment utiliser la file d'attente.

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

Voici l'erreur que je reçois,

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
Était-ce utile?

La solution

Merci à Ayende (par courrier électronique), la réponse se révèle être parce que la file d'attente que vous écoutez (celui mentionné dans la balise de bus) est le seul que vous êtes responsable de la création automatiquement.

Mon programme exemple est tout à fait erronée que donc je réécris des choses complètement et fait usage de la file d'attente d'une façon d'assurer que je compris correctement (bien que je pense que je fais!). Je vais peut-être mettre en place l'exemple à un moment donné parce que j'avais certainement un peu de difficulté grokking tout.

Autres conseils

Eh bien, en général une application web ne doit pas faire l'action administrative sur quelque chose que l'infrastructure centrale? Que le message de configuration en file d'attente d'un serveur de mise en attente. Vraiment. guidleines administratives normales -. ce qui est la raison pour laquelle les programmeurs probablement ne pensaient pas se someoen même essayer

Voyez-vous, il peut y avoir plus à la mise en file d'attente u pLa que vous pensez;). Comme le configurer

Configurer les files d'attente manuellement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top