JMS 应用程序如何连接至总线上的消息传递引擎
有几个因素会影响 JMS 应用程序如何连接至服务集成总线以便可以使用该总线提供的资源。
要连接至服务集成总线,应用程序实际上连接至总线上的消息传递引擎。
缺省情况下,该环境自动将应用程序连接至总线上的可用消息传递引擎。但是,可指定额外的配置详细信息来影响连接进程;例如,标识特殊引导服务器、将连接范围限制为某个可用消息传递引擎子组、改进可用性或性能或者确保顺序处理接收的消息。
在应用程序服务器中运行的应用程序:缺省配置
WebSphere® Application Server 环境会将在应用程序服务器中运行的应用程序导向可用的消息传递引擎。
如果在同一个服务器中找到消息传递引擎,那么创建了一个连接,它为应用程序提供与消息传递引擎的最快可用连接。否则,如果在同一台主机或另一台主机上的另一个进程中找到消息传递引擎,那么说明建立了远程连接。如果找不到合适的消息传递引擎,那么应用程序无法连接至总线。

该图显示在应用程序服务器中运行的两个应用程序。server3 上的应用程序 X 已连接至同一个服务器上运行的消息传递引擎。server1 上的应用程序 Y 已连接至在同一总线中运行但位于另一服务器和主机上的消息传递引擎;这是因为 server1 没有合适的消息传递引擎。
在应用程序服务器外部运行的应用程序
在应用程序服务器外部(例如,在客户机容器中或 WebSphere Application Server 环境外部)运行的客户机应用程序自身找不到合适的消息传递引擎,必须通过引导服务器完成引导过程。引导服务器是运行 SIBService 服务的应用程序服务器,但它不需要运行任何消息传递引擎。引导服务器将选择正在应用程序服务器中运行并且支持必需的目标传输链的消息传递引擎。

此图显示了在应用程序服务器外部运行的客户机应用程序。要连接至消息传递引擎,应用程序首先连接至引导服务器。引导服务器首先选择消息传递引擎,然后告诉客户机应用程序要连接至该消息传递引擎。
引导服务器使用特定的端口和引导传输链,它们与主机名一起形成引导服务器的端点地址。
![[IBM i]](../images/iseries.gif)
当创建应用程序服务器时,会自动给它分配唯一的不安全的引导端口 SIB_ENDPOINT_ADDRESS 和一个安全的引导端口 SIB_ENDPOINT_SECURE_ADDRESS。如果要使用应用程序服务器作为引导服务器,且已对该服务器分配了不同于 7276 的不安全端口,那么必须在连接工厂的“提供程序端点”属性上指定该服务器的端点地址。
必须在应用程序服务器之外的应用程序使用的每个连接工厂中指定引导服务器的端点地址。为了避免必须指定过多的引导服务器,您可以提供几台具有高可用性的服务器来作为专用引导服务器。然后,您只需要对每个连接工厂指定少量的引导服务器。
消息传递引擎选择过程
- 对于 JMS 客户机应用程序,此信息是在连接工厂上配置的。
- 对于消息驱动的 Bean (MDB) 应用程序,此信息是在激活规范上配置的。
- 对于其他类型的应用程序,此信息是由应用程序通过程序配置的。
- 如果消息传递引擎正在同一个应用程序服务器中的必需总线中运行,那么将建立从应用程序至该消息传递引擎的连接。如果没有合适的消息传递引擎,那么检查下一规则。
- 如果消息传递引擎正在应用程序所在的同一主机上运行,那么应用程序与所选的消息传递引擎进行远程连接。如果没有合适的消息传递引擎,那么检查下一规则。
- 如果消息传递引擎正在总线中的任何位置运行,那么应用程序与所选的消息传递引擎进行远程连接。如果没有合适的消息传递引擎,那么连接尝试失败。
在两种情况(即,在应用程序服务器中运行的应用程序以及在应用程序服务器外部运行的应用程序)下,可将可用于连接的消息传递引擎的范围限制为服务集成总线中可用的消息传递引擎的子组。可通过配置连接工厂或激活规范的下列连接属性来实现此目标:
- 目标
执行连接相近搜索以选择适当的消息传递引擎之前,应选择属于指定目标组的消息传递引擎集合。然后,将连接相近搜索限制为仅对这些消息传递引擎进行。如果未指定目标组(缺省情况),那么在连接邻近度搜索期间将考虑总线中的所有消息传递引擎。
例如,如果将 目标类型 属性设置为 总线成员名称,那么 目标 属性会指定可从中选择合适的消息传递引擎的总线成员名称。
- 目标类型
- 总线成员名称
- 总线成员的名称。此选项检索由指定的总线成员(应用程序服务器或服务器集群)主管的活动消息传递引擎。
- 定制消息传递引擎组名
- 一组构成自声明集群的定制消息传递引擎的名称。此选项检索已向所指定定制组注册的活动消息传递引擎。
- 消息传递引擎名称
- 消息传递引擎的名称。此选项检索可用于到达所指定消息传递引擎的可用端点。
- 目标重要性
- 此属性定义是否将连接邻近度搜索限制为仅对目标组中的消息传递引擎进行。
- 首选
- 最好从目标组中选择消息传递引擎。如果目标组包含可用的消息传递引擎,那么将选择该消息传递引擎。如果目标组未包含可用的消息传递引擎,但在同一服务集成总线中有可用的消息传递引擎,那么将选择目标组外部的消息传递引擎。
- 必需
- 必须从目标组中选择消息传递引擎。如果目标组包含可用的消息传递引擎,那么将选择该消息传递引擎。如果目标组未包含可用的消息传递引擎,那么连接过程将失败。
- 目标入站传输链
应用程序连接至不在该应用程序所在进程中的消息传递引擎时应使用的消息传递引擎入站传输链的名称。
这些传输链指定可以用来与客户机应用程序所连接的应用程序服务器通信的通信协议。 如果选择另一个进程中的消息传递引擎,那么仅当该消息传递引擎在运行所指定入站传输链的服务器中时,才可以建立连接。
提供了下列预定义消息传递引擎入站传输链:- InboundBasicMessaging
- 基于 TCP/IP 的 JFAP
- InboundSecureMessaging
- 基于 SSL 和 TCP/IP 的 JFAP
- 连接邻近度
- 对于在应用程序服务器中运行的应用程序,此属性定义与应用程序服务器相关的消息传递引擎的邻近度。对于在应用程序服务器外面运行的应用程序,此属性定义与引导服务器相关的消息传递引擎的邻近度。
- 总线
- 可以连接至同一总线中的多个消息传递引擎。
首先选择同一服务器中的适当消息传递引擎,然后选择同一主机中的适当消息传递引擎,最后选择另一主机中的适当消息传递引擎。
- 集群
- 可以连接至同一服务器集群中的多个消息传递引擎。如果应用程序不是在集群服务器中运行,或者引导服务器不在集群中,那么没有合适的消息传递引擎。
首先选择同一服务器中的适当消息传递引擎,然后选择同一主机中的适当消息传递引擎,最后选择另一主机中的适当消息传递引擎。
- 主机
- 可以连接至同一主机中的多个消息传递引擎。选择合适的消息传递引擎的顺序为:同一服务器中的合适消息传递引擎优先于同一主机中的合适消息传递引擎。
- 服务器
- 可以连接至同一应用程序服务器中的多个消息传递引擎。
- 集群中的所有服务器可从 MDB 应用程序接收消息以充分利用集群中的处理能力。
- 一次只有一个服务器能从 MDB 应用程序接收消息以确保顺序处理消息。
有关更多信息,请参阅如何在集群中连接消息驱动的 Bean。