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