Apache Camel:处理器和Bean是否具有相同的目的?

43

看起来两者都有相同的作用。是否有任何区别使得一个在特定情况下更有用而另一个则不是?

2个回答

35
实际上,它们非常相似,但处理器比Bean更受限制。我通常使用处理器来处理与Exchange交互的简单用例。此外,inline processors是一种很好的交互方式,无需创建单独的类。
Bean提供了更多的灵活性,并支持真正的POJO方法。这使您可以更轻松地与现有API集成(只需要转换输入/输出以匹配等)。
Beans还提供了关于Camel路由/EIP集成的出色功能和灵活性,包括...
- 丰富的bindings集,允许您快速将Exchange中的数据绑定到bean方法的属性等。 - POJO consuming/producing 允许您以可重复使用的方式与端点进行交互。 - used as expressions/predicates(用于POJO EIP实现... 过滤器等)。

13
归根结底,我认为这取决于个人喜好。一般来说,我倾向于使用POJO方法进行处理,因此开始使用beans来完成处理,但随着时间的推移,我慢慢地转向使用Processors。
我在以下情况下感到痛苦:
- Bean方法有多个参数 - 尝试从exchange params /消息头中获取数据
我知道Camel 2.8通过允许在bean中使用注释(可在这里找到)来解决这些问题。但我不想走这条路——将Camel注释放入不关心是否被Camel调用的bean中感觉不对。
最终,我们创建了一个无注释、客户端不可知的bean和一个非常薄的Processor,从camel中提取所需的所有信息并将其传递给该bean。
只是我的个人意见——bean路线确实不错——它也能很好地完成工作(尤其是在2.8版本中)。
编辑
自此之后,Camel在使用POJO处理消息方面进行了许多改进——这个答案可能已经不适用了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接