IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope:Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  WebSphere  >

WebSphere Message Broker V6 中的 JMS 传输节点

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 初级

Rich Bicheno (Rich_Bicheno@uk.ibm.com), WebSphere Message Broker Performance 团队性能专家, IBM

2006 年 7 月 16 日

尽管流行的 Java 消息传递服务 (JMS) 标准提供了通用 API,但是互连不同的 JMS 提供者可能并不是件容易的事,因为 JMS 是一项标准,而不是一种连接格式。本文向您介绍如何在 WebSphere Message Broker V6 中通过新的 JMS 传输节点轻松而灵活地解决这个问题。

引言

尽管目前 Java™ 消息传递服务 (JMS) 作为企业消息传递的标准广泛地使用,但是它无法解决应用程序之间的许多连接问题,有时甚至是一个 JMS 应用程序和另一个 JMS 应用程序之间的连接问题,更不用说建立 JMS 和非 JMS 应用程序之间的连接。

JMS 传输节点是 IBM® WebSphere® Message Broker V6 中新的特性,可以帮助解决这些连接和协议转换的难题。本文描述了什么是 JMS 传输节点、如何配置它们,以及如何使用它们来解决常见的连接或协议转换问题,并提升消息传递基础结构的商业价值。除了对该节点的功能、用途和价值进行概述之外,本文还提供了在实现使用 JMS 传输节点的消息流时关于关键性能和可伸缩性因素的建议。

什么是 JMS?

JMS 是用于构建企业消息传递应用程序的标准的 J2EE 消息传递 API。JMS 规范提供了抽象的、独立于提供者的消息传递接口,这样一来,可以使用通用 API 编写消息传递应用程序,而不用担心基础消息传递的实现。JMS 提供了两种通用的消息传递模式,用于构建消息传递应用程序:点到点模式和发布/订阅 (pub/sub) 模式。JMS 应用程序向 JMS 目标发送消息,而这些目标可能是队列(在点到点域中)和主题(在发布/订阅域中)。

使用 JMS 作为消息传递接口的优点包括:

  • 因为它们按照标准的 API 编写,所以应用程序在不同的 JMS 提供者之间具有可移植性,并且您可以将应用程序迁移到任何其他的 JMS 提供者。
  • 程序员可以使用通用的 API 编写程序,从而避开具体的基础实现,这就意味着程序员可以构建通用的技巧,而不再需要深入地研究特定产品的相关知识。

有关 JMS 更详细的信息,请参阅 JMS specifications from Sun Microsystems

大多数企业消息传递提供者都提供了一种 JMS 实现作为使用其产品的机制。WebSphere Message Broker V6 及其以前的发布版、以及 WebSphere MQ,都是 JMS 提供者,它们使得您可以跨 WebSphere MQ、WebSphere 实时传输和 WebSphere 广播传输进行 JMS 消息传递。

在企业内部集成 JMS

在所宣称的使用 JMS 的优点中,其中一点是它使得应用程序具有可移植性。但在实践中,许多 JMS 提供者提供了超出标准的 JMS API 的各种扩展和功能,结果使得应用程序不再具有真正的可移植性。一旦完成了 JMS 应用程序的编写、测试和生产,您可能不想迁移消息传递提供者并承受迁移所带来的中断期。

使用新的 JMS 提供者向现有的基础结构添加新的应用程序,可能会带来困难,因为 JMS 规范并没有为 JMS 通信定义相应的连接格式。因此,基础消息很可能在不同的 JMS 提供者之间不兼容,即一个 JMS 提供者在不进行两种格式之间的转换的情况下,无法直接向另一个 JMS 提供者发送消息。在企业内部基于不同的提供者对 JMS 应用程序进行集成时,这种不兼容性将会带来问题,您需要完成从一种 JMS 消息实现到另一种 JMS 消息实现的协议转换。WebSphere Message Broker V6 中新的 JMS 传输节点,通过解决这种通信问题,可以为企业带来显著的效益。

另一种常见的企业场景涉及到将基于 JMS 的应用程序连接到专用的消息传递应用程序。这两种消息传递的格式并不兼容,并且在两个系统之间同样需要某种形式的集成和转换,而这可以通过 WebSphere Message Broker V6 中的 JMS 传输节点来提供。

什么是 JMS 传输节点?

WebSphere Message Broker V6 支持许多消息传递协议,包括:

  • HTTP 和 Web 服务
  • WebSphere MQ
  • WebSphere MQTT
  • WebSphere MQ 实时传输

通过允许 WebSphere Message Broker V6 发送和接收来自任何 JMS 提供者传输的消息,JMS 传输节点扩展了这个列表,只要该提供者符合 JMS 1.1 规范即可。JMS 传输节点允许代理作为任何 JMS 提供者的 JMS 客户端(JMS 使用者或 JMS 生产者),从而允许代理发送消息和接收来自 JMS 提供者的消息。JMS 节点可以采用两种 JMS 消息传递模式:点到点模式和发布/订阅模式。

JMS 传输节点有下列四种类型:

JMSInput 节点
用作 JMS 目标的 JMS 使用者,并且可以在点到点模式中作为队列接收者或在发布/订阅模式中作为订阅者连接到 JMS 提供者。该节点的任务是为转换和路由消息的消息流接收消息。一旦输入节点接收到了 JMS 消息,它将构建一个内部的 JMS 消息树,以使您能够像使用任何其他 WebSphere Message Broker 树表示那样对其进行使用。JMSInput 节点可以接收 JMS 1.1 规范中定义的所有六种类型的 JMS 消息:基本 JMS 消息、文本、对象、字节、流和映射。
JMSOutput 节点
用作 JMS 目标的 JMS 生产者。它可以在点到点模式中作为队列发送者或在发布/订阅模式中作为发布者连接到 JMS 提供者。其任务是发送在消息流中经过转换和路由的消息。它将内部 JMS 树转换为要发送给 JMS 提供者的 JMS 消息。JMSOutput 节点可以发送 JMS 1.1 规范中定义的所有六种类型的 JMS 消息。
JMSMQTransform 节点
与 JMSInput 节点联合使用。它将接收到的来自 JMS 提供者的消息转换为可以发送到 WebSphere MQ 的格式。
MQJMSTransform 节点
与 JMSOutput 节点联合使用。它将接收到的来自 WebSphere MQ 的消息转换为可以发送到 JMS 提供者的格式。

节点配置

JMS 节点具有与任何 JMS 客户端相同的配置要求,即访问 JMS 提供者的客户端代码、访问 JNDI 储存库所需的定义、用于检索储存库的管理对象的名称。这些节点可以重用任何现有的 JNDI 储存库和已为现有的 JMS 网络建立的管理对象。可以在 WebSphere Message Broker 工具包中通过修改相应的节点属性来完成这些配置。下面的图 1 介绍了为 JMSInput 节点配置属性的一个示例。这些节点实现的一个重要的优点是,不需要编写任何代码来对其进行设置:


图 1. JMSInput 节点配置属性
图 1. JMSInput 节点配置属性

更高级的 JMS 客户端配置,如添加对进入的消息进行筛选的消息选择器,也可以作为节点属性进行配置。有关这些配置的更详细的信息,请参阅 WebSphere Message Broker 工具包的联机帮助。

连接到 JMS 提供者

下面的图 2 介绍了如何将 JMSInput 和 JMSOutput 节点连接到 JMS 提供者。该图表显示了在将宿主于代理的消息流中运行的 JMSInput 和 JMSOutput 节点。如上所述,这些节点可以用作客户端,因此类似于任何 JMS 客户端,它们使用 JNDI 来查找 JMS 连接工厂和目标。然后,它们使用所查找到的对象来连接到 JMS 提供者和指定的目标(队列或者主题),并向该目标发送消息或接收来自该目标的消息:


图 2. 连接到 JMS 提供者的 JMSInput 和 JMSOutput 节点
图 2. 连接到 JMS 提供者的 JMSInput 和 JMSOutput 节点

技术优势和商业价值

到目前为止,本文主要关注于什么是 JMS 传输节点以及如何对它们进行配置和使用。本部分描述了一些常见的场景,以向您介绍如何在企业消息传递基础结构中使用这些节点。正如您将看到的,JMS 传输节点可以帮助您解决许多转换和桥接问题,而不用编写任何代码。

充实现有的 JMS 提供者

通过向 JMS 网络添加代理功能,您可以使用 JMS 传输节点来充实任何具有 JMS 1.1 支持的企业消息传递系统。一旦 JMSInput 节点接收到了来自 JMS 提供者的消息,可以使用所有的 WebSphere Message Broker V6 转换和路由功能来对这些消息进行处理。在完成了消息处理之后,您可以通过 JMSOutput 节点将结果发送回相同的或另一个 JMS 网络。

下面的图 3 介绍了一些简单的示例流。它们显示了用于转换和将 JMS 消息存储到数据库的 XML 转换和数据库节点:


图 3. 使用 JMSInput 和 JMSOutput 节点充实消息流
图 3. 使用 JMSInput 和 JMSOutput 节点充实消息流

桥接任何 JMS 提供者

如上所述,不同的 JMS 提供者之间存连接兼容性问题。如果没有 WebSphere Message Broker V6,要桥接任何两种 JMS 提供者,通常都需要自定义代码。WebSphere Message Broker V6 中的 JMS 传输节点使得您可以进行桥接,而无需编写任何自定义的代码。

下面的图 4 介绍了如何将 JMSInput 节点连接到一个提供者,而将 JMSOutput 节点连接到另一个提供者,这样一来,这些消息就可以从一个提供者流向另一个提供者。另外,您可以根据需要在其中插入完成任何附加转换或路由处理的任何 WebSphere Message Broker 节点:


图 4. 使用 JMSInput 和 JMSOutput 节点桥接 JMS 提供者
图 4. 使用 JMSInput 和 JMSOutput 节点桥接 JMS 提供者

任何与 JMS 1.1 兼容的提供者都可以使用这种方式进行桥接,如集成 WebSphere MQ JMS 和 WebSphere Service Integration Bus(WebSphere Application Server V6 JMS 提供者)。因此,通过使用同一消息代理中其他的提供者以及使用代理作为任意数目的不同提供者之间的桥梁,您可以运行多个类似的流。

利用应用服务器应用程序集成 JMS

任何兼容于 J2EE 的应用服务器,如 WebSphere Application Server,必须包含一个 JMS 提供者以支持 J2EE 应用程序进行消息传递。因此,Web 应用程序通常使用运行于应用服务器上的 Java Servlet 或 EJB 来使用 JMS。

JMS 传输节点允许 WebSphere Message Broker V6 连接到任何与 JMS 1.1 兼容的 JMS 提供者。因此,它们可以连接到应用服务器的 JMS 提供者。当消息代理可以与应用服务器的 JMS 提供者进行通信时,它就可以向该 JMS 目标发送消息并接收来自于该 JMS 目标的消息,而运行于应用服务器的 Servlet、EJB 或 MDB 将使用这些消息。因此,您可以使用 WebSphere Message Broker V6 来充实这些由应用程序使用的消息,甚至可以将应用程序桥接到 WebSphere MQ 或另一个 JMS 网络。可以使用 WebSphere Message Broker V6 来充实运行于应用服务器的基于 Web 的应用程序,或使用 WebSphere Message Broker V6 的集成功能将这些应用程序集成到企业基础结构中。

将任何 JMS 提供者桥接到 WebSphere MQ

您可以使用 MQJMSTransform 和 JMSMQTransform 节点将任何 JMS 网络连接到现有的 WebSphere MQ 网络。下面的图 5 介绍了如何在消息流中使用这些节点来完成这项任务:


图 5. 在 JMS 和 MQ 之间转换消息
图 5. 在 JMS 和 MQ 之间转换消息

这个特性让您可以轻松地将 JMS 网络集成于任何支持 MQ 的应用程序。JMS 传输节点允许建立如下连接:

  • 从支持 WebSphere MQ 的应用程序到 JMS 应用程序
  • 从一个 JMS 网络到其他的 JMS 网络

因此,您可以连接 WebSphere MQ 集群和 WebSphere Application Server 集群。因为该连接使用 WebSphere Message Broker 实现,所以它非常健壮并具有可伸缩性。

通过 JMS 提供者使用事务

JMS 传输节点提供了不同级别的事务支持,可以将事务支持作为节点实例的属性,按照您的特定需求对其进行配置:

  • 它们可以是非事务的,这样一来,流中传递的消息就不属于任何事务的一部分。这种设置最适合于非持久的消息,因为在这种情况下,必须满足高吞吐量的需求。
  • 可以允许独立的节点支持本地事务,这意味着每个节点对其 JMS 提供者使用事务型 JMS 会话,所以这些消息的发送和接受将作为独立事务的一部分。
  • 事务的第三个级别是全局事务(也称作 XA 事务)。向 JMSInput 节点提供消息或接收来自于 JMSOutput 节点的消息的 JMS 目标,可以作为消息流全局事务的一部分。因此,该流所执行的整个操作可以包含于一项事务中,以便根据事务的结果,执行所有的操作,或不执行任何操作。

任何符合 JMS 1.1 规范的 JMS 提供者都可以使用全局事务,并且全局事务在 JMS 会话中提供对 JMS XAResource API 的支持。WebSphere MQ JMS 便是这种提供者中的一个示例。全局事务使用 WebSphere MQ Queue Manager 作为事务协调器。该协调器处理类似事务开始和结束等事件,以及在工作单元中包含其他资源的需求,包括如更新 WebSphere MQ 队列、DB2 数据库和任何与 XA 兼容的 JMS 提供者目标等资源。因此,您可以在单个 XA 事务中合并一个或多个 JMS 提供者。例如,在同一个 XA 事务中,可以包括:

  • 接收来自 WebSphere MQ 的消息
  • 将消息记录到数据库中
  • 向 JMS 提供者发送消息

在 XA 事务中还可以包括前面介绍的任何消息流。

连接 JMS 发布/订阅和点到点网络

如上所述,JMS 节点可以用于点到点或发布/订阅域。在单个流中,您可以将 JMSInput 节点连接到 JMS 点到点网络,并将 JMSOutput 节点配置为 JMS 发布/订阅网络。相反的配置也是可行的。因此,可以通过 JMSInput 节点接收队列所发布的消息,并通过 JMSOutput 节点将其发布到发布/订阅网络的主题,JMSOutput 节点为连接到不同的消息传递域提供了一种快速的方式,无需编写任何自定义的代码。图 6 介绍了建立这种连接的简单方法:


图 6. 连接点到点和发布/订阅
图 6. 连接点到点和发布/订阅

性能和可伸缩性

本部分讨论了在实现使用 JMS 传输节点的消息流时的性能因素。有关 JMS 传输节点性能的更详细的信息,请参阅 WebSphere Message Broker V6 performance reports

JMS 传输节点的性能依赖于您所使用的 JMS 客户端和传输。例如,与 WebSphere MQ 客户端传输相比,WebSphere MQ 实时传输通常会产生更高的消息速率,因为 WebSphere MQ 实时传输是更轻型的协议,同时作为折衷,与 WebSphere MQ 客户端传输相比,它提供了较低的服务质量。

与任何 JMS 应用程序一样,您所选择的服务质量将会影响到性能,即可靠性和健壮性是有代价的。例如,非持久型、非事务型客户端比持久型、事务型客户端执行速度更快,所以应该仅在有必要的时候才使用这些选项。

每个 JMS 提供者都有相应的优化参数和技术用以提高 JMS 的性能。有关 JMS 服务器或 JMS 客户端设置的优化信息,请参阅相应的 JMS 提供者文档。有关 IBM JMS 提供者的优化信息,请参见下面的参考资料部分。

消息类型和大小同样也是重要的性能因素。较小的消息提供更好的性能,特别是在使用持久消息的情况下。节点对不同类型的 JMS 消息进行不同的处理。JMS 字节消息所需的工作要比其他类型的消息更少,而在对 JMS 流和 JMS 映射消息进行解析和解释的时候,则需要进行额外的工作,因此在给定资源使用量的情况下会带来较低的性能。

通常,在调整任何 WebSphere Message Broker 应用程序时,使用消息流的附加副本(附加实例)和多个执行组将提高消息的吞吐率。有关这种调整的示例,请参阅 WebSphere Message Broker V6 performance reports。对于包含 JMS 传输节点的消息流来说,也是这样的。随着具体场景的变化,实际的性能增益也会有所不同。

在点到点模式中,在使用消息流的每个附加实例的同时,都将为相同的 JMS 队列建立到 JMS 提供者的新连接(对于 JMSInput 和 JMSOutput 节点,都是如此)。其结果是出现服务于相同目标的多个连接和线程,这将可能产生更高的消息速率。

在发布/订阅模式中,JMSInput 节点对于目标的连接存在一个上限(以避免多项订阅以及产生重复的消息),因此附加实例无法起到什么作用。然而,通过不同的方法,您可以使用 JMS 传输节点构建消息流,而在这些 JMS 传输节点中允许使用附加副本(尽管不使用附加实例)对消息吞吐量进行调整。您必须对主题树进行相应的设计,以使消息流的每个副本可以服务于一个特定的主题或树中特定的部分。通过这种方式,您可以同时运行多个消息流(包括 JMS 传输节点),其中每个消息流订阅或发布到不同的主题。

结束语

本文解释了 WebSphere Message Broker V6 中新的 JMS 传输节点的任务和功能。并介绍了如何使用这些节点来解决常见的协议转换和桥接问题。这些节点的典型用途包括:

  • 充实现有的 JMS 提供者
  • 桥接任何 JMS 提供者
  • 使用应用服务器应用程序集成 JMS
  • 将任何 JMS 提供者桥接到 WebSphere MQ
  • 在 XA 协调事务中使用 JMS 提供者
  • 连接 JMS 发布/订阅和点到点网络

在许多情况下,都不需要编写代码,在您需要花费最少的工作量来解决协议转换或桥接问题的时候,这是个很大的优点。在其他的一些情况下,您可能需要对消息执行更加复杂的转换或路由处理,在使用其中一种 JMS 传输节点将消息读入到消息流中之后,便可以使用 WebSphere Message Broker 的各种功能对其进行处理。本文还讨论了设计消息流应用程序时有关性能和可伸缩性的因素。



参考资料



关于作者

Rich Bicheno 是英国 IBM Hursley Software Lab 的 WebSphere Message Broker Performance 团队的性能专家。他和开发小组一起从事开发新版本的 WebSphere Message Broker,并且作为顾问同客户一起解决 WebSphere Message Broker 的设计、配置以及优化问题。您可以通过 Rich_Bicheno@uk.ibm.com 与 Rich 联系。




对本文的评价

太差! (1)
需提高 (2)
一般;尚可 (3)
好文章 (4)
真棒!(5)

建议?




回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款