如何在 Apache Camel 3.X.X 路由上设置 header?

How to set header on Apache Camel 3.X.X route?

我正在对 Camel 路由进行集成测试。

骆驼路线:

from("direct:abc")
  .routeId("abc-route")
  .process(MyProcessor())
  .toD("direct:xyz")

由于这条路由正在隔离测试,我需要在测试中设置headers;之前,他们是从另一条路线到达的。我该怎么做?

简化测试class:

@SpringBootTest
@MockEndpoints
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
class MyRouteTest {

  @Autowired
  lateinit var camelContext: CamelContext

  @Produce(uri = "direct:abc")
  lateinit var template: ProducerTemplate

  @EndpointInject(uri = "mock:direct:xyz")
  lateinit var destEndpoint: MockEndpoint

  @Test
  fun `should test route`() {
    template.sendBody("")
  }
}

我已经试过了camelContext.adapt(ModelCamelContext::class.java)但是还是进不去路线强行修改

尽管已经在评论中回答了,但我认为这个问题值得回答。

ProducerTemplate interface 有很多不同的方法可以将 Camel Exchange 发送到 Camel 端点。

有一些方法可以只发送一条消息 body,一个 body 具有一个或多个 headers 或一个 body 具有一个或多个 Exchange 属性。

还有一个 fluent interface 可用于以漂亮的描述性方式自定义 Exchange。

来自 Camel 文档的示例:

Integer result = FluentProducerTemplate.on(context)
    .withHeader("key-1", "value-1")
    .withHeader("key-2", "value-2")
    .withBody("Hello")
    .to("direct:inout")
    .request(Integer.class);