Es fällt mir schwer, herauszufinden, wie ich das letzte Stück meines Systems gestalten soll. Zur Zeit betreibe ich einen Tomcat-Server mit einem Servlet, das auf Client-Anfragen reagiert. Jede Anfrage fügt wiederum eine Verarbeitungsnachricht zu einer asynchronen Warteschlange hinzu (ich werde wahrscheinlich JMS über Spring oder wahrscheinlicher Amazon SQS verwenden).Was ist der beste Weg, um eine asynchrone Warteschlange kontinuierlich in Java zu verarbeiten?
Die Abfolge der Ereignisse ist dies:
Senden Seite: mit einer eindeutigen ID
1. eine Client-Anforderung einige Daten in einem DB zu dieser Anfrage
3. ein In Zusammenhang Nehmen
2. Fügen Nachrichtenobjekt diese Anfrage an die Nachrichtenwarteschlange repräsentiert
Empfangsseite:
1. eine neue Nachricht Objekt Ziehen aus der Warteschlange
2. Abwickelwerkzeug das Objekt und Halte einige Informationen von einer Website basierend auf Informationen, die im msg-Objekt enthalten sind.
3. Senden Sie eine E-Mail-Benachrichtigung
4. Aktualisieren Sie meine DB-Zeile (gleiche eindeutige ID) mit der Information, dass Operation für diese Anfrage abgeschlossen wurde.
Ich habe eine harte herauszufinden, wie man richtig mit der Empfangsseite umgehen. Auf der einen Seite kann ich wahrscheinlich ein einfaches Java-Programm erstellen, das ich von der Befehlszeile aus starte, die jedes Element in der Warteschlange auswählt und verarbeitet. Ist das sicher? Macht es mehr Sinn, das Programm als einen anderen Thread im Tomcat-Container laufen zu lassen? Ich möchte das nicht seriell machen, dh das empfangende Ende sollte in der Lage sein, mehrere Objekte gleichzeitig zu verarbeiten - mit mehreren Threads. Ich möchte, dass dies 24 Stunden am Tag läuft.
Was sind einige Optionen zum Aufbau der Empfangsseite?
Falls jemand interessiert ist, was ich schließlich getan habe. Ich habe Amazons SQS benutzt und habe einen Java-Client (benutzt das Spring-Framework), der die Warteschlange abfragt. Wenn es eine Nachricht findet, verarbeitet es sie und geht in den Wartezustand zurück. Ich könnte Quarz-Threading hinzufügen, für den Moment starte ich einfach mehrere Prozesse. – Ish
Ich stehe vor einem ähnlichen Problem. Ich würde gerne wissen, wie der Java Client implementiert wurde. Ich hoffe, es läuft nicht in einer unendlichen While-Schleife und Pools für die Nachricht? –