Apache Camel:是啥推动消息?
Posted
技术标签:
【中文标题】Apache Camel:是啥推动消息?【英文标题】:Apache Camel: What marches messages along?Apache Camel:是什么推动消息? 【发布时间】:2012-06-20 19:55:58 【问题描述】:在像 Apache Camel 这样的 ESB 上,什么机制实际上是沿着从端点到端点的路由“行进”(拉/推)消息?
骆驼RouteBuilder
是否只是组成Endpoints
和Routes
的图并知道在访问某个Endpoint
后将消息传递到哪个目的地/下一个Endpoint
或自己执行Endpoints
知道它已处理的消息的下一个目的地。
不管怎样,我很困惑:
如果是RouteBuilder
知道消息通过系统的“流动”,那么这个RouteBuilder
需要知道何时将消息传递到Endpoint A
的业务逻辑应该传递Endpoint B
旁边的消息 vs Endpoint C
,但在所有 Camel 示例中,我看到此业务逻辑不存在;和
似乎将这种“流”业务逻辑放在Endpoints
本身中将它们耦合在一起,并破坏了 SOA/ESB/EIP 等的一些基本原则。
【问题讨论】:
【参考方案1】:我建议先阅读这篇 QA What exactly is Apache Camel? ...以及它所引用的链接,关于 Apache Camel 的更多背景。
业务逻辑可以是任何类型的逻辑,例如 Java bean (POJO)。 Camel 允许您以一种松散耦合的方式访问您的业务逻辑。例如,请参阅这些链接
http://camel.apache.org/service-activator.html http://camel.apache.org/bean-integration.html http://camel.apache.org/bean.html http://camel.apache.org/bean-binding.html http://camel.apache.org/hiding-middleware.html http://camel.apache.org/spring-remoting.html【讨论】:
【参考方案2】:在幕后,我相信骆驼正在构建一个纯图,其中每个节点都是骆驼端点/处理器,每条边都是两个端点(源和目的地)之间的路线。该图正是 RouteBuilder
在您调用其 API 时构建的。当你去start()
骆驼路线时,该图很可能被验证并翻译成一系列需要执行的Runnable
s,并且可能使用某种自定义Executor
或线程管理来处理这些@ 987654325@s.
因此,Runnable
s(在消息到达时处理消息的处理器)的执行由此自定义Executor
处理。这是“沿着消息前进”的机制,尽管任务排队的顺序是由RouteBuilder
组成的图的总体结构驱动的。
【讨论】:
以上是关于Apache Camel:是啥推动消息?的主要内容,如果未能解决你的问题,请参考以下文章
RabbitMQ - Apache Camel 读取消息如何处理失败的消息
EIP/Apache Camel - 如何同时处理消息,但每个组原子处理?
Apache Camel:GroupedExchangeAggregationStrategy 组 DefaultExchange 而不是消息正文