Apache Camel 基于文件内容的动态路由

Apache Camel dynamic route based on file content

我正在尝试使用 apache camel 将文件内容路由到 activemq 队列。我使用 camel 从特定文件夹中轮询 xml 文件,然后将其内容发送到队列。我的问题是我想根据内容值将内容发送到动态队列名称。例如:
xml 文件内容为

<name="queue1"/>

那就意味着这个需要发送到名为"queue1"的队列。如何在骆驼路线 spring dsl 中将 "queue1" 动态值用于 "to:" 参数?

谢谢

假设你有一个 xml-document,你可以使用 xpath 提取信息并将其设置在一个 header 中,你可以使用简单的

获得

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();
}

我认为最好的方法是将该名称保存到 header,如本例所示: https://whosebug.com/a/9637840/3703819

然后在 Endpoint 中使用 Simple 表达式,如下所示:

<recipientList>
    <simple>activemq:queue:${headers.dest}</simple>
</recipientList>