2016-07-30 3 views
1

Ich habe eine Anwendung geschrieben in Ruby, die mehrere Threads hat, die jeweils Anforderungen an Remote-AMQP-Endpunkte senden. Diese Threads werden von Zeit zu Zeit erzeugt, wenn neue Aufgaben ausgeführt werden müssen.RabbitMQ: Nachrichten an Threads routen

Wenn ich temporäre, exklusive Warteschlangen pro Thread zum Senden von Antworten auf ihre Anforderungen verwenden, wird es einfach, den Code für die Verarbeitung eingehender Nachrichten in diesem Ruby-Dienst zu schreiben. Die Warteschlangen werden gelöscht, sobald der zugehörige Kanal geschlossen ist, so dass sie nach dem Ende ihres Zwecks nicht mehr dort bleiben. Die Alternativen, die ich mir vorstellen kann, erfordern, dass ein Listener-Thread eine oder mehrere Warteschlangen überwacht, die alle eingehenden Nachrichten/Antworten in den Ruby-Dienst empfangen und diese Nachrichten dann mit einigen Nachrichtenkennungen an wartende Threads weiterleiten. Dies scheint komplizierter und ich kann RabbitMQ nicht für das gesamte erforderliche semantische Routing verwenden.

Ist das erste Modell ein brauchbares Modell für die AMQP-Kommunikation? Gibt es ein besseres Muster für den Umgang mit diesem Fall?

Antwort

2

die Antwort weitgehend auf Ihren Anwendungsfall hängt

, wenn Sie kümmern sich nicht um Nachrichten zu verlieren, wenn eine bestimmte Warteschlange gelöscht wird, dann wird die erste Option ist in Ordnung.

Wenn Sie Nachrichten benötigen, um in einer Warteschlange zu bleiben, bis etwas zur Verarbeitung kommt, benötigen Sie eine dauerhafte Warteschlange, in der Nachrichten gespeichert werden.

Es gibt keine Anforderung für Warteschlange pro Thread, mit Rabbitmq.

jedoch sollten Sie einen Kanal pro Thread verwenden.

vorausgesetzt, dass Sie einen Kanal pro Thread haben und mehrere Kanäle aus der gleichen (oder anderen) Warteschlange ohne Problem konsumieren können.

Solange Sie die Kanäle auf einen einzelnen Thread beschränken, können Sie in Bezug auf die Warteschlangen, von denen Sie konsumieren, alles tun, was Sie brauchen.

Verwandte Themen