Apache Camel:什么推动消息传递?

11
在像Apache Camel这样的ESB上,实际上是哪种机制在沿着路由从端点到端点"推动"(拉/推)消息呢?
Camel的RouteBuilder仅构成了一个包含端点和路由的图形,就知道在访问某个端点后将一条消息传递到哪个目标/下一个端点,还是端点本身知道已处理的消息的下一个目标。
无论哪种方式,都会使人困惑:
- 如果是RouteBuilder知道消息通过系统的"流程",那么这个RouteBuilder需要知道何时Endpoint A应该将消息传递给Endpoint B而不是Endpoint C的业务逻辑,但在我看到的所有Camel示例中,这种业务逻辑并不存在; - 看起来将这种"流程"业务逻辑放在Endpoints本身中会使它们之间耦合,并破坏一些SOA/ESB/EIP等基本原则。
2个回答

10

我相信,在 Camel 内部,它正在构建一个纯的图形,其中每个节点都是 Camel 端点/处理器,每条边都是两个端点之间的路由(源和目标)。当您调用其 API 时,RouteBuilder 正在构建这个图形。当您去 start() 一个 Camel 路由时,该图形很可能会得到验证并被转化为一系列需要执行的 Runnable,并且可能使用某种自定义的 Executor 或线程管理来处理这些 Runnable

因此,Runnable 的执行(处理器随着消息到达而处理)由这个自定义的 Executor 处理。这就是 "沿着消息行进" 的机制,尽管任务排队的顺序由 RouteBuilder 组成的总体结构所驱动。


8

我建议先阅读这篇问答: 什么是Apache Camel? ...以及它所提到的链接,了解更多关于Apache Camel的背景信息。

业务逻辑可以是任何类型的逻辑,例如Java bean(POJO)。而Camel允许您以松散耦合的方式访问业务逻辑。例如,请参见以下链接:


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