基于Camel内容的路由在春天DSL问题中使用标题

时间:2015-09-26 15:27:15

标签: spring apache-camel spring-dsl

我正在尝试使用Spring DSL进行一些路由。我无法将消息发送到目的地。我知道我遗失了一些东西,请帮我解决问题。 我在deviceMessageRouteIdentifier中设置了标题,如下所示

    Message outMsg = exchange.getOut();
    outMsg.setHeader("device_template_id","11");
    outMsg.setHeader("view_id", "2");  

我的骆驼路线就在这里

  <camel:route>
    <camel:from uri="direct:devicemessageprocessor"/>
    <camel:bean ref="deviceMessageRouteIdentifier"/>
    <camel:to uri="seda:deviceRouting"/>
    </camel:route>
            <camel:route>
        <camel:from
            uri="seda:deviceRouting?concurrentConsumers=10&amp;blockWhenFull=true&amp;purgeWhenStopping=true" />
        <choice>
            <when>
                <header>$device_template_id = '11'</header>
                <to uri="direct:gen2Bridge" />
            </when>
            <when>
                <header>$view_id = '1'</header>
                <to uri="direct:prediction" />
            </when>
        </choice>
    </camel:route>

  <camel:route>
        <camel:from uri="direct:gen2Bridge"/>
        <camel:bean ref="gen2BridgeProcessor" />
  </camel:route>

我能够访问deviceMessageRouteIdentifier但无法到达目标gen2BridgeProcessor

提前致谢

1 个答案:

答案 0 :(得分:0)

您应该使用简单语言作为谓词,而不是标题。 header仅用于查找标头值。

 <header>$device_template_id = '11'</header>

应该是

 <simple>${header.device_template_id} == '11'</simple>

等于运算符是==。有关更多详细信息,请参阅简单语言