RabbitMQ wie Sie Jobs in Aufgaben aufteilen und Ergebnisse verarbeiten

8

Ich habe den folgenden Anwendungsfall für eine Spring-basierte Webanwendung:

  • Ich muss die Konkurrenz-EIP mit den folgenden Twists anwenden: Die Nachrichten in der Warteschlange sind tatsächlich geteilte Aufgaben, die zum selben Job gehören. Daher muss ich ordnungsgemäß verfolgen, wenn alle Aufgaben eines Auftrags abgeschlossen und deren Abschlussstatus, um das Szenario entweder als COMPLETED oder FAILED gespeichert werden, protokollieren Sie das Ergebnis und benachrichtigen Sie z. E-mailen Sie die Benutzer entsprechend

Angesichts der oben beschriebenen Anforderungen lautet meine Frage also:

  1. Kann das mit RabbitMQ gemacht werden und wenn ja wie?
kmandalas 09.06.2017, 18:51
quelle

2 Antworten

3

Ich habe eine kurze Liste erstellt, um ein sehr grobes Beispiel dafür zu zeigen, wie man das machen kann. In diesem Beispiel gibt es einen Erzeuger und zwei Verbraucher, zwei Warteschlangen, eine für den Versand durch den Hersteller ("SEND"), die von den Verbrauchern konsumiert wird, und umgekehrt veröffentlichen Verbraucher in der Warteschlange "RECV" und werden vom Hersteller konsumiert .

Denken Sie daran, dass dies ein ziemlich grobes Beispiel ist, da der Producer in diesem Fall einfach einen Job (eine zufällige Menge an Aufgaben zwischen 0 und 5) sendet und blockiert, bis der Job erledigt ist. Eine Möglichkeit, dies zu umgehen, besteht darin, in einer Map eine Job-ID und die Anzahl der Aufgaben zu speichern und jedes Mal zu überprüfen, ob die Anzahl der ausgeführten Aufgaben pro Job-ID gemeldet wurde.

    
Adonis 20.06.2017, 21:55
quelle
1

Was Sie versuchen zu tun, liegt außerhalb des Rahmens von RabbitMQ. RabbitMQ dient zum Senden und Empfangen von Nachrichten mit der Möglichkeit, sie in eine Warteschlange zu stellen. Es kann Ihre Jobaufgaben für Sie nicht verfolgen.

Sie müssen einen "Job Storage" -Dienst haben. Wenn Ihr Kunde die Aufgabe beendet, aktualisiert er den Jobspeicherdienst und markiert die Aufgabe als erledigt. Der Jobspeicherungsdienst weiß, wie viele Aufgaben in dem Job enthalten sind, und wenn die letzte Aufgabe erledigt ist, werden die Jobs als erfolgreich abgeschlossen. In diesem Service implementieren Sie auch alle anderen Geschäftslogiken, z. B. wann Job als fehlgeschlagen zu behandeln ist.

    
Alex Buyny 15.06.2017 20:31
quelle