在多个总线间进行点到点消息传递
点到点消息传递使用队列目标,每个队列目标都表示一个消息队列。
服务集成队列目标位于特定总线成员(应用程序服务器或服务器集群)中。生产者将消息发送至队列目标时,服务集成总线会将该消息传送至该总线成员中的消息传递引擎。消息传递引擎然后将消息传送至使用者;必要时,消息传递引擎会对消息进行排队直到使用者准备好接收该消息。
只要配置了总线之间的连接,应用程序就可以将消息发送至远程总线中的队列目标。可配置总线以连接至其他消息传递网络并与这些网络交换消息。为此,必须配置外部总线连接。外部总线连接包含与远程消息传递网络相关的信息,例如,外部总线的类型以及是否允许消息传递应用程序将消息发送至外部总线。本地总线通过外部总线连接确定目标总线。如果直接连接至本地总线的总线未包含指定的目标,那么会使用更多服务集成总线链路将消息发送至路径中通往目标总线的下一个总线。当消息进入目标总线时,该总线会尝试将消息传送至预期目标。
为了将消息发送至外部总线中定义的目标,应用程序将在 JMS 目标对象(队列或主题)中指定总线名称(即,外部总线)和目标名称。您不需要在本地总线中配置任何目标对象。服务集成使用在本地总线上配置的外部总线的定义(即,外部总线连接)。此定义包括目标属性的缺省值,例如,缺省服务质量。这些缺省值适用于该外部总线中的所有目标。
可以将队列目标配置为外部目标或者别名目标,如有关总线目标的信息中所述。
当应用程序将消息发送至某个目标,但是未配置外部目标或别名目标,那么将根据为外部总线连接所指定的目标缺省值来派生目标缺省值。
- 服务集成使用外部总线“总线 2”的总线 1 中的定义将消息传递到总线 2。
- 总线 2 使用其本地队列 targetQueue 的总线 2 的定义将消息传递到到 targetQueue。
在此示例中,总线 1 中的服务集成使用它在外部总线“总线 2”的定义中的属性作为它在外部总线中的目标 targetQueue 的缺省值。服务集成不能使用范围限定为外部总线的配置信息。例如,总线 1 中的服务集成不知道 targetQueue 的总线 2 定义。
在下图中,连接至总线 1 的 JMS 应用程序将为总线 2 中的队列创建生产者。应用程序将使用 JNDI 来获取 JMS 目标对象,该 JMS 目标对象标识总线 2 中的服务集成总线队列。应用程序可以通过其他方式获取 JMS 目标(例如,从 JMS 消息的 JMSReplyTo 属性获取)。

- JMS 应用程序使用 JNDI 查询来获取 JMS 目标。
- JMS 应用程序将消息发送至该 JMS 目标;这是逻辑消息流。
- 本地总线“总线 1”将消息从发送应用程序传送至外部总线“总线 2”,该总线中包含作为目标的目标。总线 1 应用外部总线连接的缺省属性和目标角色。
- 外部总线会将消息放在作为目标的目标。
只有主管目标的总线才知道该目标存在。为了让应用程序将消息成功发送至外部总线中的目标,您必须确保该目标存在;本地总线无法验证该目标是否存在。如果通过服务集成总线链路接收到消息,但是外部总线中不存在该消息的目标,那么会使用用于接收的服务集成总线链路的异常处理配置来传递该消息。