http4 не устанавливает свойства HTTP_RESPONSE

У меня есть очень простой маршрут, который получает URL-адрес и печатает содержимое с использованием компонента Camel HTTP4:

from("timer://foo?fixedRate=true&delay=0&period=10000")
    .to("http4://www.google.com")
    .process(e -> System.out.println("Out body: " + e.getOut().getBody()));

Обратите внимание, что я использую out.body, потому что, как указано в документации Camel:

Camel будет хранить ответ HTTP от внешнего сервера в теле OUT. Все заголовки из сообщения IN будут скопированы в сообщение OUT, поэтому заголовки будут сохранены во время маршрутизации.

Но я получаю нулевые значения из OUT (как body, так и headers). Все заполняется только в сообщении IN.

Я что-то упустил или это ошибка?

2 ответа

Решение

В Camel маршрут состоит из узлов. Каждый узел принимает Exchange. Exchange имеет сообщения IN и OUT. Так что в вашем случае узел с компонентом http4 взял Exchange, названный google.com, и записал тело и заголовки в сообщение OUT. Далее узел с вашим процессором занял Exchange. Теперь сообщение IN имеет ответ от предыдущего узла (http4), но вы печатаете OUT, который пуст! Таким образом, сообщения IN и OUT для каждого узла, а не для маршрута!

Вы получаете тело Out от процессора без предварительной настройки. Вот почему вы получаете ноль. Чтобы это работало, вам сначала нужно явно скопировать входящее сообщение, заголовки и вложения в Out Body, а затем распечатать его. Или проще принять сообщение In, как вы упомянули.

Следующая часть из книги "Верблюд в действии", которая является отличной книгой, и я думаю, что она очень полезна.

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

Другие вопросы по тегам