У нас есть ActiveMQ, на который публикуются события, происходящие в системе. В проекте участвуют пользователи, добавляющие объекты в свой список наблюдения, и всякий раз, когда в этих объектах происходят события, я хотел бы, чтобы заинтересованным участникам было отправлено электронное письмо.
Вариант использования примерно означает, что кто-то проявляет интерес к странице с информацией о продукте в каталоге и отправляет электронное письмо всякий раз, когда происходит какое-либо действие с этим продуктом (цена снижается, есть положительный отзыв и т. д.). Я смоделировал это взаимодействие как маршрут Camel.
Так, например, если пользователь говорит, что напишите мне, когда рейтинг этого продукта будет равен 5, то в контекст верблюда будет добавлен следующий маршрут:
from("activemq:topic:events.product.save").filter().xpath("/object[<object id>]/rating").isEqualTo("5").to("email:<user's email>")
Точно так же, если пользователь хочет получать уведомления всякий раз, когда появляется новый комментарий к продукту, будет создан другой маршрут и так далее. Потенциально это может привести к созданию тысяч маршрутов, поскольку каждый пользователь начинает добавлять свои интересующие часы.
Некоторые вопросы, которые у меня есть:
Является ли это приемлемым способом создания динамических маршрутов? Один из вариантов, который я рассматриваю, — использовать списки получателей. Но я не смог придумать решение, которое позволяло бы элегантно перенаправлять сообщения в bean-компонент, который возвращал бы список получателей. Например, для случая, описанного выше, будет ли компонент иметь кучу if-else, чтобы увидеть, какой список получателей вернуть?
Верблюжий контекст имеет метод загрузки маршрутов из файла xml, но не имеет метода сохранения существующих маршрутов. Какой самый простой (и эффективный) способ сохранить эти динамически созданные маршруты? Эта ветка в списке пользователей Camel подводит итог моей запрос.