是否可以在自定义组件中使用骆驼组件?

Is it possible to use camel components within a custom component?

我最近开始使用 Apache Camel,我们正在研究创建自定义组件来抽象大量逻辑并简化路由,但其中一些逻辑涉及 http 请求和其他具有我们想要的现有 camel 组件的部分利用。

是否可以从我们自定义组件的生产者中调用其他组件(例如 http 组件)?

我看到这个问题 (Can a custom Camel component use routes and other components internally?) 提到使用 camel 上下文,但是如何在 RouteBuilder 之外复制路由调用?

您需要导入 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;

然后您需要创建生产者模板和 camel 上下文的实例。我正在使用 spring 启动,所以我可以只注入依赖项。

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

在您的方法定义中,您需要使用 ExchangeBuilder 创建交换请求。您可以创建一个 body 并在此处添加 headers 以交换消息。

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

然后您可以调用生产者的发送方法 object 以接入您的路由并捕获响应。

Exchange exchangeResponse = producer.send("direct:startRoute", exchangeRequest)