Message Queue: Können wir Ereignisse auslösen, wenn eine Nachricht in die Warteschlange eintritt?

StackOverflow https://stackoverflow.com/questions/4255950

Frage

Bei der Arbeit wir diskutieren, ob eine Nachrichtenwarteschlange für unsere PHP-Anwendung zu implementieren. Derzeit sind wir bei Apache ActiveMQ suchen. Eine Sache, wir sind nicht ganz klar auf, ob oder nicht, es ist möglich, einen Prozess auszulösen, basierend auf einer Nachricht in einer Warteschlange ankommen.

Die Literatur, die wir bisher gefunden haben scheint darauf hinzudeuten, dass die Nachrichten-Warteschlangen sind ein Pull-basierter Mechanismus: Der Prozess läuft regelmäßig (entweder als Daemon oder einen cron) und zieht seine eingehenden Nachrichten aus der Warteschlange. Ist es möglich, diese in einen Push-Mechanismus zu drehen? Das heißt, gibt es einen Weg, um die Message Queue hat tatsächlich initiieren eine HTTP-Anforderung (oder ein Verfahren), wenn eine Nachricht eintrifft? Eine Option, die wir gefunden haben, ist das Publish / Subscribe-Modell, aber dies erfordert unsere PHP-Anwendung in einer Endlosschleife läuft eine offene (TCP) Verbindung zum ActiveMQ Instanz zu erhalten, die sich wie ein bisschen eine Flickschusterei anfühlt.

Jeder Eingang wäre sehr willkommen.

War es hilfreich?

Lösung

Eine offensichtliche Lösung ist der Herausgeber die HTTP-Anforderung direkt nach dem Speichern der Nachricht initiieren zu lassen, aber das wirft die Frage auf, warum dann sind Sie eine Nachrichtenwarteschlange mit?

eine Reihe von Verbrauchern, auf einer Warteschlange zu hören und ihre Arbeit tun, als Nachrichten kommen ist keine Flickschusterei, es ist gut, skalierbares Design. (Obwohl ich damit einverstanden, dass ein PHP-Prozess in einer Endlosschleife läuft, hat seine Nachteile.)

Warum Sie eine Nachrichten-Warteschlange ausgewählt haben, im Gegensatz zu, sagen wir, eine Datenbank die Meldungen, die speichert? Der „Erzeuger“ könnte die Nachricht als eine Zeile in einer Tabelle speichern und dann löst die „Verbraucher“ mit der Botschaft des PK.

Andere Tipps

Betrachten wir eine Route, die Camel zieht Nachrichten aus der Warteschlange (JMS-Komponente) zu schaffen und nach vorn zu einem HTTP-Endpunkt (HTTP-Komponente). Sie können sogar entscheiden, die Camel Route an dem ActiveMQ Broker-Prozess zu bewirten - eine Art intelligenter Routing-Broker erstellen. ActiveMQ macht dies einfach durch die Camel Core-Bibliotheken in der ActiveMQ Verteilung zu bündeln.

Hier ist eine kürzliche relevant / Ergebniss zu:

HTTP Post Von ActiveMQ mit Camel

Ihr Design-Konzept einer App, die Warteschlange zu überwachen, ist die Industrie Art und Weise eine externe Anwendung auszulösen auszuführen. Werfen Sie einen Blick auf IBM Websphere „Trigger Monitor-Anwendungen“. In ihrer Implementierung können Sie mehrere Trigger-Monitore verfügen über Anwendungen zu starten, dass Prozess Nachrichten in einer Warteschlange, so skaliert es sehr gut als Trigger-Monitor läuft auf dem Server die Anwendungen auf installiert sind (und wenn Sie für Skalierbarkeit entwerfen Sie sollten in der Lage sein hat mehrere App-Server, wenn erforderlich).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top