Frage

Wir haben ActiveMQ, auf die die Ereignisse im System veröffentlicht werden. Das Projekt umfasst Benutzer, die Entitäten zu ihrer Uhrenliste hinzufügen, und wann immer es Ereignisse in diesen Unternehmen gibt, möchte ich, dass eine E-Mail an die interessierten Teilnehmer gesendet wird.

Der Anwendungsfall übersetzt in etwa jemandem, der ein Interesse an einer Produktinformationsseite auf dem Katalog und eine E-Mail zum Senden von Aktivitäten auf diesem Produkt ausübt (der Preis geht nach einer positiven Überprüfung usw.). Ich hatte diese Interaktion als Kamelroute modelliert.

Wenn der Benutzer beispielsweise eine E -Mail an mich per E -Mail an die Bewertung dieses Produkts 5, wird dem Camel -Kontext hinzugefügt:

from("activemq:topic:events.product.save").filter().xpath("/object[<object id>]/rating").isEqualTo("5").to("email:<user's email>")

In ähnlicher Weise, wenn der Benutzer benachrichtigt werden möchte, wenn es einen neuen Kommentar zu einem Produkt gibt, würde eine andere Route erstellt und so weiter. Dies könnte möglicherweise Tausende von Routen erstellen, wenn jeder Benutzer seine Interessens Uhren hinzufügt.

Einige Fragen, die ich habe, sind:

  • Ist dies eine akzeptable Möglichkeit, dynamische Routen zu erstellen? Eine Option, die ich nachdenke, ist die Verwendung von Empfängerlisten. Aber ich konnte keine Lösung entwickeln, die es elegant macht, Nachrichten an die Bohne weiterzuleiten, die die Empfängerliste zurückgeben. Zum Beispiel würde die Bean für den oben erläuterten Fall eine Reihe von IF-ELSE haben, um zu sehen, welche Empfängerliste zurückgegeben werden soll?

  • Der CamelContext hat eine Methode zum Laden von Routen aus einer XML -Datei, aber keine Methode, um die vorhandenen Routen zu bestehen. Was wäre einfachste (und effiziente) Weg, um diese dynamisch erstellten Routen zu bestehen? Dieser Thread in der Kamelversorgungsliste fasst meine Anfrage zusammen.

War es hilfreich?

Lösung

Angesichts der dynamischen Art Ihrer Abonnementanforderungen sollten Sie eine Datenbank verwenden, um die Informationen zu speichern, anstatt zu versuchen, dynamische Routen zu erstellen. Dies ist eine viel skalierbarere/angemessenere Verwendung von Technologie ...

Dann können Sie nur eine einzelne statische Route oder a benötigen Pojo -Verbraucher (Siehe unten) mithilfe einer einfachen Pojo -Bean die Produktaktualisierungsmeldungen verarbeiten (Bohnenbindung kann helfen usw.). Die Pojo -Bean wäre dann dafür verantwortlich, die Datenbank abzufragen, um alle "interessierten" Benutzer zu finden und eine E -Mail mithilfe mit Kamel-E-Mail

public class NotificationBean {

    @Consume(uri="activemq:topic:events.product.save")
    public void onUpdate(@XPath("/object/id") String id, 
                         @XPath("/object/rating") String rating) {
        //query database for subscriptions for this product ID/rating, etc.
        //for each interested subscriber
            //send email (camel-mail, etc)
    }

    public void addSubscription(String productID, Integer rating, String email) {
        //create/update subscription entry in database, etc...
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top