5.3. Message Endpoint

概述

消息端点 是应用程序与消息传递系统间的接口。如 图 5.3 “Message Endpoint Pattern” 所示,您可以有一个发件人端点,有时也称为代理或服务消费者,它负责发送 In 消息和接收器端点,有时也称为端点或服务,该服务负责接收 In 消息。

图 5.3. Message Endpoint Pattern

Message endpoint pattern

端点类型

Apache Camel 定义两种基本端点类型:

  • 消费者端点 Apache Camel 路由开始时出现,并读取来自传入频道的消息(等同于 接收器 端点)。
  • Apache Camel 路由结束时 制作者端点 producer-latex Appears,并在消息中写入传出频道(等同于 发送方 端点)。可以使用多个制作者端点定义路由。

端点 URI

在 Apache Camel 中,端点由 端点 URI 代表,它通常会封装以下数据类型:

  • 消费者端点 IFL Advertises 一个特定位置的端点 URI (例如,公开发送方可以连接到的服务)。另外,URI 可以指定消息源,如消息队列。端点 URI 可以包含用于配置端点的设置。
  • 制作制作者端点的端点 URI 进行登录,包含要发送消息以及配置端点的设置的详细信息。在某些情况下,URI 指定远程接收器端点的位置;在其他情况下,目的地可以有一个抽象形式,如队列名称。

Apache Camel 中的端点 URI 有以下通用形式:

ComponentPrefix:ComponentSpecificURI

其中 component Prefix 是一个识别特定 Apache Camel 组件的 URI 前缀(有关所有支持组件的详细信息,请参阅 Apache Camel 组件参考 )。URI(Pack SpecificURI )的其余部分具有特定组件定义的语法。例如,要连接到 JMS 队列 Foo.Bar,您可以定义类似如下的端点 URI:

jms:Foo.Bar

若要定义将消费者端点 file://local/router/messages/foo 直接连接到制作者 端点的路由,可以使用以下 Java DSL 片段:

from("file://local/router/messages/foo").to("jms:Foo.Bar");

另外,您可以在 XML 中定义相同的路由,如下所示:

<camelContext id="CamelContextID" xmlns="http://camel.apache.org/schema/spring">
  <route>
    <from uri="file://local/router/messages/foo"/>
    <to uri="jms:Foo.Bar"/>
  </route>
</camelContext>

动态到

& lt;toD > 参数允许您使用串联在一起的一个或多个表达式向动态计算端点发送消息。

默认情况下,使用 Simple 语言计算端点。以下示例向标头定义的端点发送信息:

<route>
  <from uri="direct:start"/>
  <toD uri="${header.foo}"/>
</route>

在 Java DSL 中,同一命令的格式是:

from("direct:start")
  .toD("${header.foo}");

URI 也可以带有字面的前缀,如下例所示:

<route>
  <from uri="direct:start"/>
  <toD uri="mock:${header.foo}"/>
</route>

在 Java DSL 中,同一命令的格式是:

from("direct:start")
  .toD("mock:${header.foo}");

在上例中,如果 header.foo 的值为 orange,则 URI 将解析为 模拟:orange

要使用简单以外的语言,您需要定义 language: 参数。请参阅 第 II 部分 “路由表达式和指定语言”

使用不同语言的格式是使用语言 :语言名称: 在 URI 中。例如,要使用 Xpath,请使用以下格式:

<route>
  <from uri="direct:start"/>
  <toD uri="language:xpath:/order/@uri/">
</route>

以下是 Java DSL 中相同的示例:

from("direct:start")
  .toD("language:xpath:/order/@uri");

如果没有指定 语言: 如果端点是一个组件名称。在某些情况下,组件和语言的名称相同,比如 xquery。

您可以使用 + 符号连接多个语言。在以下示例中,URI 是 Simple 和 Xpath 语言的组合。simple 是默认值,因此不需要定义语言。+ 符号为 Xpath 指令后,使用 language:xpath 表示。

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

在 Java DSL 中,格式如下:

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

很多语言可以同时相互连接,只需使用 + 分开,并使用语言指定每个 语言:语言名称

以下选项可用于 D

名称

默认值

描述

uri

 

必需:要使用的 URI。

pattern

 

设置一个在发送到端点时要使用的特定 Exchange Pattern。原始 MEP 随即被恢复。

cacheSize

 

配置 ProducerCache 的缓存大小,它将缓存制作者以供重复使用。默认缓存大小为 1000,如果未指定其他值,则将使用该大小。将值设为 -1 会完全关闭缓存。

ignoreInvalidEndpoint

false

指定是否忽略无法解析的端点 URI。如果禁用,Camel 将抛出一个指定无效端点 URI 的异常。