骆驼路线和终点

2022-09-02 22:05:10

我一直在仔细研究Apache Camel文档,试图具体了解它的两个最基本的概念(端点和路由),尽管这些术语在整个文档中无处不在,但我找不到任何实际定义它们是什么以及它们的用途的参考。虽然他们的名字听起来相当明显,而且我想我理解他们是什么,但我现在被分配到一项任务,这项任务让我深入Apache Camel Land,了解这些机制绝对至关重要。

我的猜测是,“端点”只是一个bean - 一个可以像其他任何一样在配置文件中配置的bean - 它将名称映射到URI /端口组合(这取自W3C文档)。在Apache Camel的上下文中,我的猜测是端点用于将组件连接在一起,以便可以在它们之间形成“路由”(连接/映射)。因此,当位于端点 1 的组件 A 想要与位于端点 2 的组件 B 进行通信时,只要存在从 1 到 2 的映射,Camel 就能够在这两者之间传输消息。

如果我在这里错了,请阻止我并纠正我!

所以现在,我看到了一些例子,看起来路由可以在Java中配置:

from("endpointA").routeId("someMessage").to("endpointB");

我已经看到过一些示例,其中看起来可以在 XML 中配置路由:

<route id="">
    <from .../>
    <to .../>
</route>

这两种配置路由的方法,还是它们完全是不同的概念?

最后,可以在端点之间路由的消息的格式是什么?例如,如果它必须是 XML,那么这些路由消息的 XSD/架构是什么?如果它必须是 Java 对象,那么哪些限制/限制适用于 Camel 可以发送的对象?


答案 1

看起来你对这个概念有了很好的把握。我认为用更抽象的术语来思考端点是有帮助的。骆驼文档在这里没有多大帮助。可以将终结点视为组件的接口。每个组件可以配置 1 个或多个终结点。它帮助我在路由上下文中考虑终结点。一个简单的路由可以从端点 A(这可能是 JMS 队列、tcp 套接字、文件或任何驼峰组件)转到端点 B(可以是任何驼峰组件)。当然,您也可以在路由中使用处理器来转换数据。

您给出的两个路由创建示例就是这样,创建路由的两种方法。它们是同一概念的例子。第一个是Java DSL,第二个使用XML。

消息的格式通常是 XML,XML 可以是任何有效的 XML,不需要绑定到 XSD。该消息也可以是任何 Java 对象。只要它留在JVM中(即,不经过套接字),它就不需要可序列化。


答案 2

路由是处理步骤的有序组合

端点表示路由的开始或结束(在大多数情况下),其他路由可能作为其开始/结束连接到该路由,或者可能返回到外部系统(例如 JMS、电子邮件等)。


推荐