Верблюд: переберите элементы в заголовке, обработайте его параллельно - PullRequest
0 голосов
/ 25 сентября 2018

Я храню список URL-адресов в заголовке верблюда Apache, ниже приведен код,

List<String> supplierHotelRefs = new ArrayList();
supplierHotelRefs.add("a.com");
supplierHotelRefs.add("b.com");
supplierHotelRefs.add("c.com");
 exchange.getIn().setBody(supplierHotelRefs);

Теперь мне нужно перебрать этот список, присутствующий в заголовке, и сделать вызов URL-адресов.Это должна быть параллельная деятельность.Я попытался с split (..), которая работает нормально, если мы храним список в теле, но из-за некоторых ограничений я не могу сохранить его в теле.Будет полезно, если я получу код для итерации и параллельной обработки коллекции, представленной в заголовке Camel.

С уважением, Рагхаван

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Вы можете установить список в заголовке и разбить на этот заголовок.

exchange.getIn().setHeader("supplierHotelRefs",supplierHotelRefs);

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

from("").....
//split based on the header
split(header("supplierHotelRefs"))
//process every split exchange parallely
.parallelProcessing()
//end split block
.end()
//continue route definition after split
.log("completed split processing")

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

0 голосов
/ 25 сентября 2018

Можно использовать Список получателей EIP , см. http://camel.apache.org/recipient-list.html

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

List<String> supplierHotelRefs = new ArrayList();
supplierHotelRefs.add("http4://a.com");
supplierHotelRefs.add("http4://b.com");
supplierHotelRefs.add("http4://c.com");
exchange.getIn().setHeader("yourHeaderName", supplierHotelRefs);

. Как вы можете заметить, каждый элемент списка имеет действительный URL-адрес http4 компонент Camel. Этот компонент используется для выполнения http-вызовов.В этом списке вы можете иметь все, что захотите (другие компоненты Camel).

Затем вы используете EIP списка получателей, сообщая, что все получатели находятся в предыдущем созданном заголовке.parallelProcessing = true, вызывать все элементы в списке параллельно.Это вызывает это в XML DSL:

<recipientList parallelProcessing="true">
   <header>yourHeaderName</header>
</recipientList>  

или в Java DSL:

from("...")
  ...
  .recipientList(header("yourHeaderName"));
...