Проектируйте вопрос о динамических верблюдах Apache Camel Routes/Context

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

  •  27-10-2019
  •  | 
  •  

Вопрос

У нас есть ActiveMQ, на которые публикуются события, которые происходят в системе. Проект включает в себя пользователей, добавляющих организации в свой список для часов, и всякий раз, когда есть события на тех сущностях, я бы хотел, чтобы электронное письмо было отправлено заинтересованным участникам.

В целом примерно переводится к тому, что кто-то выражает интерес к информационной странице продукта в каталоге, и электронное письмо отправляется всякий раз, когда какая-либо деятельность происходит на этом продукте (цена снижается, есть положительный обзор и т. Д.). Я смоделировал это взаимодействие как маршрут верблюда.

Так, например, если пользователь говорит, что напишите мне всякий раз, когда рейтинг этого продукта равна 5, то в контексте верблюда будет добавлен следующий маршрут:

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

Точно так же, если пользователь хочет быть уведомленным, когда есть новый комментарий к продукту, будет создан другой маршрут и так далее. Это потенциально может в конечном итоге создать тысячи маршрутов, поскольку каждый пользователь начинает добавлять свои интересующие часы.

Некоторые вопросы, которые у меня есть:

  • Это приемлемый способ создания динамических маршрутов? Один из вариантов, который я рассматриваю, - использовать списки получателей. Но я не смог придумать решение, которое сделало бы элегантным направлением сообщений в боб, которые вернут список получателей. Например, для объяснения, описанного выше, будет ли у бобов есть куча If-else, чтобы увидеть, какой список получателей вернуть?

  • В CamelContext есть метод загрузки маршрутов из файла XML, но нет метода для сохранения существующих маршрутов. Что было бы самым простым (и эффективным) способом сохранить эти динамически созданные маршруты? Эта ветка в Список пользователей верблюдов Подводит итог моего запроса.

Это было полезно?

Решение

Учитывая динамический характер ваших требований к подписке, вы должны использовать базу данных для хранения информации, а не пытаться создать динамические маршруты. Это гораздо более масштабируемое/подходящее использование технологии ...

Тогда вам может понадобиться только один статический маршрут или Потребитель POJO (См. Ниже), которые могут обрабатывать сообщения об обновлении продукта, используя простой фасоль Pojo (Связывание бобов может помочь и т. Д.). Тогда фасоль Pojo будет отвечать за запрос базы данных, чтобы найти всех «заинтересованных» пользователей и отправить электронное письмо с помощью верблюжь

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...
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top