Question

Nous avons ActiveMQ sur lequel sont publiés les événements qui se produisent dans le système. Le projet comprend l'ajout d'utilisateurs entités à leur liste de surveillance et chaque fois qu'il ya des événements sur ces entités je voudrais un e-mail à envoyer aux participants intéressés.

Le cas d'utilisation se traduit à peu près à quelqu'un exprimant un intérêt dans une page d'information produit sur le catalogue et un e-mail envoyé chaque fois que l'activité se produit sur ce produit (prix baisse, il y a un bilan positif, etc.,). J'avais modélisé cette interaction comme une route de chameau.

Ainsi, par exemple, si l'utilisateur dit me envoyer un mail à chaque fois que la cote de ce produit est égal à 5, puis l'itinéraire suivant serait ajouté au contexte de chameau:

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

De même, si l'utilisateur souhaite être informé chaque fois qu'il ya un nouveau commentaire sur un produit, une autre voie serait créée et ainsi de suite. Cela pourrait, finissent par créer des milliers de routes que chaque utilisateur démarre en ajoutant leurs montres d'intérêt.

Quelques questions que j'ai sont:

  • Est-ce une façon acceptable de créer des itinéraires de dynamiques? Une option que je considère est d'utiliser les listes de destinataires. Mais je ne l'ai pas été en mesure de trouver une solution qui rendrait élégante pour acheminer des messages au bean qui retourner la liste des destinataires. Par exemple, pour le cas expliqué ci-dessus la fève aurait un tas de if-else pour voir quelle liste destinataire retour?

  • Le camelcontext a une méthode pour charger des itinéraires à partir d'un fichier xml mais pas de méthode pour conserver les routes existantes. Quelle serait la plus simple (et efficace) moyen de maintenir ces routes créées dynamiquement? Ce fil dans le chameaux utilisateurs liste des sommes de mon demande.

Était-ce utile?

La solution

Compte tenu de la nature dynamique de vos besoins d'abonnement, vous devez utiliser une base de données pour stocker les informations plutôt que d'essayer de créer des itinéraires dynamiques. Ceci est une utilisation beaucoup plus évolutive / appropriée de la technologie ...

Alors vous ne pouvez avoir besoin d'une seule route statique ou une POJO des consommateurs (voir ci-dessous ) qui peut traiter les messages de mise à jour de produit en utilisant un haricot simple POJO ( de liaison peut aider à haricot , etc). La fève de POJO serait alors responsable de la base de données d'interroger trouver tous les utilisateurs « intéressés » et envoyer un e-mail en utilisant chameau mail de

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...
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top