二者都是根据消息来动态的路由到一个多个结点
最后,结果都会路由到bean:bean1,bean:changeInfo,bean:bean2这3个节点上面
简单用法如下:
<route autoStartup="true">
<from uri="direct:recipientList" />
<recipientList delimiter="," ignoreInvalidEndpoints="true">
<header>endlist</header>
</recipientList>
</route>
<route autoStartup="true">
<from uri="direct:routingSlip" />
<routingSlip uriDelimiter="," ignoreInvalidEndpoints="true">
<header>endlist</header>
</routingSlip>
</route>
ProducerTemplate pt = context.getBean("camelTemplate", ProducerTemplate.class);
pt.send("direct:routingSlip", new Processor()
{
String endList = "bean:bean1,bean:changeInfo,bean:bean2";
public void process(Exchange exch) throws Exception
{
exch.getIn().setHeader("endlist", endList);
}
});
最后,结果都会路由到bean:bean1,bean:changeInfo,bean:bean2这3个节点上面
但是,他们是有区别的:
routeSliping是将消息依次传入后面的节点进行处理,不会负责,后面的节点修改的是同一个消息
recipientList 会将消息复制多份发送到后面的节点,后面每个节点处理的消息不是同一份
也就是说,recipientList 效果如同 multicast ,routeSliping效果如同:pipeline
既然这样recipientList支持在线程池里面运行,而routeSliping不支持用线程池运行