camel:在多个路由中使用标头值

时间:2016-02-24 17:32:07

标签: apache-camel messaging

是否可以在一条路线中设置标题,然后在同一上下文中的另一条路线中再次使用它? 例如,我有一个设置标题的路由:

<setHeader headerName="clientId">
   <xpath>/Alarm/clientid/text()</xpath>
</setHeader>

当传递失败时,路由使用死信通道将消息发送到同一上下文中的错误路由,并且我想在错误路由发送的消息中使用我在上面定义的clientId头,但是当前调用头返回什么都没有(我假设是一个空字符串)。

1 个答案:

答案 0 :(得分:1)

它应该可以工作,我使用的是camel 2.15.1,检查下面的代码,如果你运行它,你应该看到标题

<bean id="mybean" class="java.lang.Exception" />
<camel:camelContext xmlns="http://camel.apache.org/schema/spring"
    trace="false">
    <camel:errorHandler id="deadLetterErrorHandler"
        type="DeadLetterChannel" deadLetterUri="direct:b">

    </camel:errorHandler>

    <camel:route>
        <camel:from uri="timer:foo?repeatCount=1" />
        <camel:setHeader headerName="myheader">
            <camel:simple>Sundar</camel:simple>
        </camel:setHeader>
        <camel:to uri="direct:a" />

    </camel:route>
    <camel:route errorHandlerRef="deadLetterErrorHandler">
        <camel:from uri="direct:a" />
        <camel:throwException ref="mybean"></camel:throwException>
    </camel:route>

    <camel:route>
        <camel:from uri="direct:b" />
        <camel:log message="${in.header.myheader}"/>
    </camel:route>
</camel:camelContext>

它应该打印如下所示的日志

24 Feb 2016 19:09:47,707  route3 INFO  Sundar