camel9

看似好像基于内容的路由(Context base route)是一个结束的路由。消息只能传送到几个目的地中的一个。其实并非如此。

from("jms:incomingOrders")

.choice()

.when(header("CamelFileName").endsWith(".xml"))

.to("jms:xmlOrders")

.when(header("CamelFileName").regex("^.*(csv|csl)$"))

.to("jms:csvOrders")

.otherwise()

.to("jms:badOrders");



from("jms:incomingOrders")

.choice()

.when(header("CamelFileName").endsWith(".xml"))

.to("jms:xmlOrders")

.when(header("CamelFileName").regex("^.*(csv|csl)$"))

.to("jms:csvOrders")

.otherwise()

.to("jms:badOrders")

.end()

.to("jms:continuedProcessing");



通过.end()语句可以结束.choice()语句。这样的话,jms:xmlOrders和jms:csvOrders和jms:badOrders中的消息都会发送到jms:continuedProcessing队列中去。


如果你不想把jms:badOrders中的消息发送到jms:continuedProcessing中,你还可以这样做:


from("jms:incomingOrders")

.choice()

.when(header("CamelFileName").endsWith(".xml"))

.to("jms:xmlOrders")

.when(header("CamelFileName").regex("^.*(csv|csl)$"))

.to("jms:csvOrders")

.otherwise()

.to("jms:badOrders").stop()

.end()

.to("jms:continuedProcessing");

通过stop()语句停止jms:badOrders的发送。


Spring DSL实现相同的功能:

<route>

<from uri="jms:incomingOrders"/>

<choice>

<when>

<simple>${header.CamelFileName} regex '^.*xml$'</simple>

<to uri="jms:xmlOrders"/>

</when>

<when>

<simple>${header.CamelFileName} regex '^.*(csv|csl)$'</simple>

<to uri="jms:csvOrders"/>

</when>

<otherwise>

<to uri="jms:badOrders"/>

<stop/>

</otherwise>

</choice>

<to uri="jms:continuedProcessing"/>

</route>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值