Передача обменного свойства между маршрутами в одном и том же Camelcontext - PullRequest
0 голосов
/ 18 декабря 2018

У меня ниже требования:

Маршрут 1: from(timer:foo?repeatcount=1).recepientList("rest service")

Маршрут 2: from(sourcequeue).process(new myprocessor()).to(destinationqueue)

Необходимо использовать ответ json от route 1 и пройтиэто Route 2 процессор.Моя проблема заключается в том, что всякий раз, когда я устанавливаю ответ json в свойстве exchange и пытаюсь использовать в обработчике маршрута 2, он имеет значение null.

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

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

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Причина, по которой вы не можете использовать Свойства Exchange для передачи информации между маршрутами, заключается в том, что они не являются частью сообщения .

Посмотрите на это изображение модели Camel Exchange .

Когда верблюд получает сообщение, оно встраивает его в Exchange, и Exchange передается по маршруту.Но когда вы отправляете сообщение (.to(...)), отправляется только сообщение.

Поэтому вы должны использовать (как ответил Томас) тело сообщения или заголовок сообщения.

0 голосов
/ 18 декабря 2018

Если вы используете http верблюжий компонент, ответ http должен быть в теле.Вы можете загрузить его с вашего процессора.

String json = exchange.getIn().getBody(String.class);

from(timer:foo?repeatcount=1).recepientList("http://rest_service")
.to(direct:sourcequeue)

Вы также можете использовать заголовки для передачи данных по вашему маршруту.

from(timer:foo?repeatcount=1).recepientList("http://rest_service")
.setHeader(“myJsonResponse”, simple("${body}"))
.to(direct:sourcequeue)

String json = exchange.getIn().getHeader(“myJsonResponse”, String.class);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...