我最近开始使用Apache Camel,我们正在研究创建自定义组件来抽象很多逻辑并简化路由,但是其中一些逻辑涉及http请求以及我们想要利用的现有骆驼组件的其他部分
是否可以在自定义组件的生产者内部调用其他组件(例如,http组件)?
我确实看到了使用骆驼上下文提及的问题(Can a custom Camel component use routes and other components internally?),但是如何在RouteBuilder外部复制路由调用?
答案 0 :(得分:1)
您需要导入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;
然后,您需要创建生产者模板和骆驼上下文的实例。我使用的是Spring Boot,因此可以注入依赖项。
@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)