Apache Camel - 端点

我们已经了解了端点在我们的集成代码中的样子。到目前为止,我们使用的表达式(例如 file:/order、jms:orderQueue、direct:distributeOrderDSL)是端点。如您所见,它们遵循 URI 规范格式。 在评估此 URI 时,CamelContext 创建 Endpoint 实例; 您无需担心在 DSL 中实例化 Endpoint 实现。

以我们之前的示例为例,您可以在 Java DSL 中指定端点,如下所示 −

from ("file:/order").to("jms:orderQueue");

在 Spring 中,如下所示 −

<route>
   <from uri = "file:/order"/>
   <to uri = "jms:orderQueue"/>
</route>

在这两种情况下,端点都是常量字符串。 在某些情况下,您可能希望在运行时构建此字符串。 您可以使用 Java String 格式化程序方法来执行此操作。 Camel 提供了另一种更简单的方法来在运行时创建这些 URI 字符串。 为此,Camel 提供了 fromFtoF 方法,它们接受带有用户指定参数的参数。 下面的语句说明了toF方法的使用 −

from("direct:distributeOrderDSL”).toF("file://%s?fileName=%s", path, name);

由于有了这些方法,就不再需要使用 Java 内置 String 格式化程序方法。

Camel 默认使用 Simple 语言来计算端点表达式。Simple 语言主要是为了评估表达式谓词而设计的,而不用担心XPath 的复杂性。为了评估谓词,您可以将其他语言(例如 xpath)与默认的 Simple 语言结合起来。 这是通过使用加号分隔其他语言来完成的。 这里的代码片段展示了如何将 xpath 字符串连接到用 Simple 编写的表达式。

from("direct:start")
.toD("jms:${orderQueue}+language:xpath:/order/@id");

Spring中,你可以实现与这里相同的效果 −

<route>
   <from uri = "direct:start"/>
   <toD uri = "jms:${orderQueue}+language:xpath:/order/@id"/>
</route>

您可以连接任意多种语言,每种语言与前一种语言之间用加号分隔。 支持的语言列表可以在 https://camel.apache.org/languages.html 中找到。