pollEnrich с динамическим URI и его количеством выполнений - PullRequest
1 голос
/ 04 ноября 2019

Я хочу прослушать тему ActiveMQ на основе имени хоста системы и некоторой другой логики. Я планировал использовать pollEnrich для этого, поэтому я оцениваю свою логику и предоставляю название темы в pollEnrich, но согласно документу :

pollEnrich или enrich не имеет доступ к любым данным из текущего Exchange, что означает, что при опросе он не может использовать ни один из существующих заголовков, которые вы, возможно, установили на Exchange. Например, вы не можете установить имя файла в заголовке Exchange.FILE_NAME и использовать pollEnrich, чтобы использовать только этот файл. Для этого вы должны установить имя файла в URI конечной точки.

Как я могу это выяснить

from("timer://ipc?repeatCount=1")
.. some logic..
.setHeader("topic_no",simple("{{env:HOSTNAME}}"))
.pollEnrich("mqtt:foo?host=tcp://0.0.0.0:1883&subscribeTopicNames=${header.topic_no}/status&clientId=ipc")
.to("log:my?showAll=true&multiline=true");

Пожалуйста, не предлагайте использовать имя хостапрямо в URI. Как я уже подчеркнул, мне нужно вычислить и другую логику.

  • Какой другой вариант или способ я могу использовать?
  • Будет ли pollEnrich продолжать прослушивание темы или он прослушает один раз и завершит маршрут?

Update1: Я понял, что мы можем использовать простое выражение с для динамического URI, но одна проблема с pollEnrich - это выбрать только одно сообщение, как я могу убедиться, что оно продолжает слушать, какпотребитель? Я хочу, чтобы перед запуском части pollEnrich выполнялся один раз, а TopicListener продолжал прослушивать, пока приложение не будет запущено.

1 Ответ

1 голос
/ 05 ноября 2019

Будет ли pollEnrich продолжать слушать тему или прослушать один раз и завершить маршрут?

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

Какой еще вариант или способ я могу использовать?

  1. Повтор pollEnrich на loop
  2. Создать новый маршрут во время выполнения с помощью routeBuilder

Вариант 1 наивен, но прост в концепции. pollEnrich будет делать один раз, а loop будет повторять это. Однако этот метод должен обрабатывать больше сценариев, чем вы могли ожидать.

Вариант 2 - лучший подход. Вы создаете маршрут во время выполнения, и URI конечной точки потребителя передается по переменной. Тем не менее, вы можете динамически создать потребительский маршрут после логики вычислений.

Пример для routeBuilder

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...