如何在 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);
我正在对 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);