在像 Apache Camel 这样的 ESB 上,什么机制实际上是沿着从一个端点到另一个端点的路由“行进”(拉/推)消息?
Camel RouteBuilder
是否只是组成一个 Endpoints
和 Routes
的图表,并知道哪个目的地/下一个 Endpoint
在消息访问某个 Endpoint
之后将消息传递给,或者让 Endpoints
自己知道哪个是它已处理的消息的下一个目的地。
不管怎样,我很困惑:
- 如果
RouteBuilder
知道消息在系统中的“流动”,那么这个RouteBuilder
就需要知道何时的业务逻辑端点 A
应该在Endpoint B
vsEndpoint C
旁边传递消息,但在所有 Camel 示例中,我看到这个业务逻辑不存在;和 - 似乎将这种“流”业务逻辑放在
Endpoints
本身中将它们耦合在一起,并违背了 SOA/ESB/EIP 等的一些基本原则。
最佳答案
在幕后,我相信 camel 正在构建一个纯图,其中每个节点都是一个 Camel 端点/处理器,每条边是两个端点(源和目的地)之间的路由。当您调用其 API 时,此图正是 RouteBuilder
正在构建的内容。当您转到 start()
一个 Camel 路由时,该图很可能被验证并转换为一系列需要执行的 Runnable
,并且可能使用某种自定义 Executor
或线程管理来处理这些 Runnable
。
因此,Runnable
的执行(处理器在消息到达时处理消息)由这个自定义的 Executor
处理。尽管任务排队的顺序是由 RouteBuilder
组成的图的总体结构驱动的,但这是“沿途传递消息”的机制。
关于java - Apache Camel : What marches messages along?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11089755/