2017-02-21 2 views
0

Ich erstelle eine Arbeitswarteschlangeneinrichtung, in der die verschiedenen Arbeiter/Konsumenten unterschiedliche Funktionen haben. Damit meine ich, dass nicht alle Arbeitsaufgaben von allen Arbeitern ausgeführt werden können.RabbitMQ für die Arbeitswarteschlange unter Verwendung von Benutzern mit unterschiedlichen Funktionen

Lassen Sie uns sagen, ich habe folgende Arbeiter:

Worker A 
    Capability 1 
    Capability 2 
    Capability 3 
Worker B 
    Capability 1 
Worker C 
    Capability 1 
    Capability 3 
  • Wenn ein Job Capability 1 erfordert, kann sie von jedem Arbeiter ausgeführt werden.
  • Wenn ein Job Capability 1 und Capability 2 erfordert, kann er nur von Worker A ausgeführt werden.
  • Wenn ein Job Capability 1 und Capability 3 benötigt, kann es durch Worker A oder Worker C
  • und so weiter ...
  • für solche

Frage

Ist RabbitMQ fähig/geeignet für den Versand Jobs ausgeführt werden Setup?

Antwort

0
Is RabbitMQ capable/suitable for dispatching jobs for such a setup? 

Kaninchen MQ ist sehr flexibel in Bezug auf Nachrichten-Routing zusammen mit so vielen anderen schöneren Features, die es kommt mit. Es ist definitiv in der Lage zu tun, was Sie zu tun hoffen. Ist es angemessen, ist eine viel schwierigere Frage zu beantworten, weil es von so vielen anderen Faktoren abhängt.

Hier ist ein Weg, einzurichten, was Sie

  1. erstellen Direct Exchange (Nennen wir es JobExchange) zu tun versuchen.
  2. erstellen 3 Queues (JobType1.queue, JobType2.queue & JobType3.queue)
  3. Brind alle drei Warteschlangen zu Ihrem Exchange
  4. Haben Worker A hören JobType1.queue, JobType2.queue & JobType3.queue
  5. Haben Worker B hören JobType1.queue
  6. Have Worket C hören JobType1.queue & JobType3.queue

Hinweis: Wenn mehrere Verbraucher, die die Fähigkeit haben, einen bestimmten Job zu verarbeiten (Beispiel: Arbeitnehmer A, B & C kann JobType1 verarbeiten) , es gibt keine Möglichkeit zu steuern, wer eine Nachricht aus der Warteschlange (JobType1.queue in diesem Fall) abholt. Einer der 3 Arbeiter wird die Nachricht abholen und die anderen werden es nicht bekommen.

+0

Danke. Eine Sache jedoch, ein Job kann mehr als eine Anforderung haben. Bedeutet das, dass ich auch Warteschlangen für jede Kombination von Anforderungen erstellen muss? Das ist für mich keine Option, fürchte ich, weil die Anzahl der einzelnen Bedingungen> 20 ist, daher werden alle Kombinationen eine sehr große Anzahl von Warteschlangen sein ... – anorm

+0

In diesem Fall wird ein ausgeklügelter Austausch benötigt. So etwas wie ein Topic/Header Ex passt gut. Mit dem Thema EX müssen Sie mit der Routing-Schlüssel-Hierarchie kreativ werden und sehen, ob Sie Nachrichten nach Ihren Bedürfnissen filtern können. Wenn es keine echte Nachrichtenhierarchie gibt, dann benutze einen Header-Austausch, wo du mehrere Header setzen kannst und rate dem Hasen, JEDES/ALLE zu entsprechen, je nachdem, was du brauchst. Als Randbemerkung: Wenn Sie auf der ersten Ebene keine Filterung erreichen können, müssen Sie möglicherweise eine Austauschhierarchie erstellen und sie irgendwo stromabwärts aufteilen. Hinweis: Ex -> Ex-Bindung ist erlaubt. –

Verwandte Themen