Warum ist nicht Rhino.ServiceBus automatisch die Erstellung alle meine Warteschlangen?
-
19-09-2019 - |
Frage
Ich habe Setup Dinge in einer ziemlich ähnlich wie die Blog-Posts darüber, aber ich bin immer einen Fehler, wenn bei etwa einer der Warteschlangen starten.
Die msmq://localhost/colin_console_queue
nicht automatisch durch mein Programm erstellt wird, erhalten.
Ich bin ziemlich sicher, dass ich einfach nicht etwas richtig machen, aber ich weiß nicht, was ich ausgelassen habe.
Ich habe ein ‚DisableAutoQueueCreation‘ -Attribut entdecken, und ich versuchte, es zu falsch auf die verschiedenen Konfigurationselemente Einstellung und ich entdeckte es sogar als eine Eigenschaft auf der RhinoServiceBusFacility
vorhanden war, so habe ich versucht, es dort zu setzen. Leider nichts davon schien zu funktionieren.
Wenn ich die beiden URLs auf die gleiche Queue Punkt ändert sich die App im Grunde funktioniert, aber ich bin mir ziemlich sicher, das ist nicht, was ich tun soll. Ich schaute auf der Starbucks Beispiel app, um zu sehen, was es tut, aber es scheint eine Menge Setup zu tun hart codierte Pfade im Code verwenden.
<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>
Hier ist mein Testprogramm verwende ich, herauszufinden, wie die Queue zu verwenden.
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();
}
}
Hier ist der Fehler, den ich bekommen,
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
Lösung
Dank Ayende (per E-Mail) die Antwort auf sich herausstellt, weil die Warteschlange, die Sie (die in dem Bus-Tag genannt) zu hören ist die einzige, die Sie automatisch für die Erstellung verantwortlich sind.
Mein Beispiel-Programm ist ziemlich fehlerhaft, obwohl so umschrieb ich die Dinge vollständig und Verwendung der Einweg Warteschlange, um sicherzustellen, ich es richtig verstanden (und ich glaube, ich tun!). Ich werde vielleicht das Beispiel irgendwann setzen, weil ich sicherlich ein wenig Schwierigkeiten grokking es hatte alles.
Andere Tipps
Nun, im Allgemeinen eine Web-Anwendung nicht tun soll Verwaltungsvorschriften auf etwas wie ccentral an die Infrastruktur als Nachrichten Konfiguration einer Warteschlange-Servers Warteschlangen. Ja wirklich. Normal Verwaltungs guidleines -. Weshalb die Programmierer wahrscheinlich nicht someoen würde glaubten sogar, dass versuchen
Siehe, kann es mehr sein u pDie Warteschlange einstellen, als Sie denken.;) Wie es die Konfiguration
die Warteschlangen manuell einrichten.