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