我可以在基于内容的路由器中管道吗

时间:2013-02-12 12:49:17

标签: apache-camel

我可以在基于内容的路由器中进行管道传输吗? 我必须在基于内容的路由器中管道bean。为此,我采用了以下配置。我希望配置本身解释了我的要求。这是对的吗? 我是否还要添加end()标签?

<route>
  <from uri="activemq:queue:injob"/>
  <choice>
    <when>
       <simple>${header.type} == 'heartbeat'</simple>
       <to uri="bean:heartBeatHandler"/>
       <to uri="activemq:queue:outjob"/>
    </when>
    <when>
      <simple>${header.type} == 'dnsrequest'</simple>
      <to uri="bean:dnsRequestHandler"/>
      <to uri="bean:parser"/>
      <to uri="activemq:queue:outjob"/>
    </when>
    <when>
      <simple>${header.type} == 'whoisrequest'</simple>
      <to uri="bean:whoisRequestHandler"/>
      <to uri="bean:parser"/>
      <to uri="activemq:queue:outjob"/>
    </when>
    <otherwise>
      <to uri="bean:errorHandler"/>
    </otherwise>
  </choice>
</route>

1 个答案:

答案 0 :(得分:3)

是的,这是正确的。

默认情况下,Camel以管道模式运行(例如管道和过滤器EIP - http://camel.apache.org/pipes-and-filters.html),但是如果你想要,你可以使用&lt;管道&gt;。例如

<when>
   <simple>${header.type == 'heartbeat'}</simple>
   <pipeline>
     <to uri="bean:heartBeatHandler"/>
     <to uri="activemq:queue:outjob"/>
   </pipeline>
</when>

但通常你会省略&lt;管道&gt;并做你的榜样。

反对管道有多播(http://camel.apache.org/multicast.html),当你将这两者结合起来时,你可能需要使用管道,例如

<multicast>
  <pipeline>
     <to uri="bean:heartBeatHandler"/>
     <to uri="activemq:queue:outjob"/>
   </pipeline>
  <pipeline>
     <to uri="bean:somethingElse"/>
     <to uri="activemq:queue:somethingElse"/>
   </pipeline>
</multicast>