1

我可以在基于内容的路由器中进行管道传输吗?我必须在基于内容的路由器中传输 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>
4

1 回答 1

3

是的,这是正确的。

Camel 默认以管道模式运行(例如管道和过滤器 EIP - http://camel.apache.org/pipes-and-filters.html),但如果您愿意,可以使用 < pipeline > 使其显式化。例如

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

但是很多时候你会省略 < pipeline > 并作为你的例子。

与管道相反的是多播(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>
于 2013-02-12T13:07:12.123 回答