Apache Camel中的recipientList和routingSlip的区别?

来源:互联网 发布:电信云计算发展措施 编辑:程序博客网 时间:2024/05/19 05:29
二者都是根据消息来动态的路由到一个多个结点

简单用法如下:


<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不支持用线程池运行




6 0