Apache Camel - параллельные маршруты в полете - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть контекст Camel со многими маршрутами, который начинается каждые 15 м с Компонентом таймера.

Эти маршруты устанавливают некоторые свойства взамен (целевой хост, запрос и текущая дата, для которых я использую процессор, чтобы получить дату, -12 часов и преобразование в GMT).

После установки этих свойств с помощью Direct вызывается другой маршрут для выполнения HTTP Get.Когда запрос завершен, вызывается другой маршрут для отправки возврата на Artemis ActiveMQ.

Проект развернут на Wildfly 13.

Проблема заключается в следующем: иногда маршруты просто замирают.Не начинайте через 15 минут.Когда я пытаюсь остановить / запустить маршрут, я получаю следующий журнал:

[0m[0m08:27:45,230 INFO  [org.apache.camel.impl.DefaultShutdownStrategy] (Camel (camel-example) thread #70 - ShutdownTask) There are 1 inflight exchanges: InflightExchange: [exchangeId=ID-exchange-ID, fromRouteId=Route1, routeId=GetDataAutoBySinceTime, nodeId=toD7, elapsed=0, duration=216958569]
[0m[0m08:27:46,231 INFO  [org.apache.camel.impl.DefaultShutdownStrategy] (Camel (camel-example) thread #70 - ShutdownTask) Waiting as there are still 1 inflight and pending exchanges to complete, timeout in 299 seconds. Inflights per route: [Route1 = 1]
[0m[0m08:27:46,231 INFO  [org.apache.camel.impl.DefaultShutdownStrategy] (Camel (camel-example) thread #70 - ShutdownTask) There are 1 inflight exchanges: InflightExchange: [exchangeId=ID-exchange-ID, fromRouteId=Route1, routeId=GetDataAutoBySinceTime, nodeId=toD7, elapsed=0, duration=216959570]
[0m[0m08:27:47,231 INFO  [org.apache.camel.impl.DefaultShutdownStrategy] (Camel (camel-example) thread #70 - ShutdownTask) Waiting as there are still 1 inflight and pending exchanges to complete, timeout in 298 seconds. Inflights per route: [Route1 = 1]

Я не знаю, зависли ли некоторые процессы, что делает невозможным запуск других процессов.

Iдумал удалить общие маршруты (PostMessageInActiveMQ и GetDataAutomaticallyBySinceTime и реализовать тот же код в других маршрутах (Route1, Route2 и Route3), но я не думаю, что это лучший подход.

Маршруты:

Маршрут1 (Маршрут2 и Маршрут3 почти одинаковы, просто измените значения свойств)

from("timer:Route1Timer?period=15m")
 .routeId("Route1")
 .autoStartup(false)
 .setProperty("targetAddress", simple("hostname.route1"))
 .process(new GetCurrentDate())
 .setProperty("query",
          simple("DataQuery%26URI=Route1%26format=xml%26Mode=since-time%26p1=${header.currentDate}"))
 .to("direct:GetDataAutoBySinceTime");

GetDataAutomaticsBySinceTime

from("direct:GetDataAutoBySinceTime")
 .routeId("GetDataAutoBySinceTime")
 .autoStartup(true)
 .removeHeaders("*")
 .setHeader(Exchange.HTTP_METHOD, constant("GET"))
 .toD("http4:${header.targetAddress}/command=${header.query}%26httpClient.socketTimeout=3000")
 .convertBodyTo(String.class, "utf-8")
 .to("direct:PostMessageInActiveMQ");

PostMessageInActiveMQ

CamelArtemisComponent components = new CamelArtemisComponent();
getContext().addComponent("artemis", components.getArtemisComponent());

from("direct:PostMessageInActiveMQ")
 .routeId("PostMessageInActiveMQ")
 .autoStartup(true)
 .convertBodyTo(String.class, "utf-8")
 .inOnly("artemis:ARTEMIS.QUEUE");

Весь код: https://github.com/vitorvr/camel-example

РЕДАКТИРОВАТЬ:

Версия для верблюдов: 2.22.0

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