toD () - динамическое формирование URI в верблюде 2.23, запланированное через кварц - PullRequest
0 голосов
/ 04 марта 2019

Я новичок в Apache Camel и хотел реализовать toD (), который должен динамически формировать URI и добавлять значения параметров запроса из Beans.

Фрагмент кода ниже -

from ("quartz2: // timer? cron = 0 + 0/1 + + + * +?") .noAutoStartup (). routeId (ROUTE_ID) .log ("Маршрут запущен") .toD (http://localhost:3420/contextpath?from=${bean:bean.from} "+" & size = $ {bean: bean.size} ") .process (процессор)

Похоже, что при каждом обращении через Quartz один и тот же URLпри запуске и, следовательно, я вижу дублированные значения, сохраненные в БД. Пожалуйста, предложите, почему Dynamic URI не работает должным образом.

Вызываю процессор, вычисляю и устанавливаю значения Бина, которые я получаю из Response of EndpointНо когда в следующий раз Quartz попадет на URL-адрес, значения bean-компонента не обновятся и примут значение по умолчанию. Определение bean-компонента - это обычный метод установки getter, а регистрация - я использовал Simple registry

SimpleRegistry simpleRegistry = new SimpleRegistry ();
            // create CamelContext
            context = new DefaultCamelContext (simpleRegistry);

            simpleRegistry.put("bean", bean);

Заранее спасибо

1 Ответ

0 голосов
/ 04 марта 2019

Чтобы использовать динамический URI на верблюжьем маршруте , вы должны включить вашу переменную в простое выражение.

Поскольку Camel 2.16.0 реализация конечной точки выпуска toD() поддерживает Простой язык выражений , поэтому вы можете определить dynamic-URI какконечная точка сообщения :

from("quartz2://timer?cron=0+0/1+++*+?")
    .noAutoStartup()
    .routeId(ROUTE_ID)
    .log("Route Started")
    .toD( "http://localhost:3420/contextpath?from=${bean:bean.from}&size=${bean:bean.size}" );

Таким образом, выражения ${bean:bean.from} и ${bean:bean.size} должны быть напрямую интерполированы с использованием Bean language внутри вашего URI-строка.Этот компонент bean-компонента bean: сообщает Camel, что необходимо зарегистрировать bean-компонент с указанным именем bean и вызывать указанные методы from и size.

Apache Camel: Rest DSL , раздел Использование Dynamic to () также имеет примечание:

Примечание: нам нужно использовать .endRest(), чтобы сообщить Верблюду, где заканчивается маршрут, поэтому мы можем вернуться к Rest DSL и продолжить определение служб REST.

В противном случае вы можете реализовать эту динамическую конечную точку, используя simple внутри обычного to().См. Apache Camel: как использовать динамический URI в to () .

...