Можно ли использовать компоненты верблюда в пользовательском компоненте? - PullRequest
1 голос
/ 24 апреля 2020

Я недавно начал с Apache Camel, и мы ищем создание пользовательских компонентов для абстрагирования большого количества логик c и упрощения маршрутов, но некоторые из этих логик c включают запросы http и другие части, которые имеют существующий верблюжий компонент, который мы хотим использовать.

Можно ли вызывать другие компоненты (например, компонент http) изнутри производителя нашего пользовательского компонента?

Я видел этот вопрос ( Может ли пользовательский компонент Camel внутренне использовать маршруты и другие компоненты? ), в котором упоминается использование контекста верблюда, но как реплицировать вызов маршрута за пределами RouteBuilder?

1 Ответ

0 голосов
/ 25 апреля 2020

Вам необходимо импортировать CamelContext, Exchange, ProducerTemplate и ExchangeBuilder.

import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.ExchangeBuilder;

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

@Autowired
private ProducerTemplate producer;
@Autowired
private CamelContext camelContext;

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

Exchange exchangeRequest = ExchangeBuilder.anExchange(camelContext)
.withBody("Hello World!")
.withHeader("username", "jdoe")
.withHeader("password", "pass")
.build();

Затем вы можете вызвать метод send для объекта-производителя, чтобы подключиться к вашему маршруту и ​​захватить ответ.

Exchange exchangeResponse = producer.send("direct:startRoute", exchangeRequest)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...