我正在尝试使用apache camel将文件内容路由到activemq队列。我使用camel从特定文件夹中轮询xml文件,然后将其内容发送到队列。我的问题是我想根据内容值将内容发送到动态队列名称。例如:
xml文件内容为
<name="queue1"/>
然后它意味着这个需要发送到名为“queue1”的队列。如何将“queue1”动态值用于camel route spring dsl中的“to:”参数?
由于
答案 0 :(得分:2)
假设您有一个xml文档,您可以使用xpath提取信息并将其设置在标题中,您可以使用简单的
http://camel.apache.org/simple.html
http://camel.apache.org/xpath.html
http://camel.apache.org/recipient-list.html
@EndpointInject(uri = "direct:start")
private ProducerTemplate start;
@EndpointInject(uri = "mock:result1")
private MockEndpoint result1;
@Test
public void testName3() throws Exception {
context.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:start")
.setHeader("address", xpath("/address/text()", String.class))
.recipientList(simple("mock:${header.address}"));
}
});
result1.expectedMessageCount(1);
start.sendBody("<address>result1</address>");
result1.assertIsSatisfied();
}
答案 1 :(得分:1)
我认为最好的方法是将该名称保存到标题中,如下例所示: https://stackoverflow.com/a/9637840/3703819
然后在端点中使用Simple表达式,如下所示:
<recipientList>
<simple>activemq:queue:${headers.dest}</simple>
</recipientList>