Ich habe den folgenden Anwendungsfall für eine Spring-basierte Webanwendung:
Angesichts der oben beschriebenen Anforderungen lautet meine Frage also:
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.
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.
Tags und Links java spring rabbitmq spring-rabbitmq