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

developerWorks 中国  >  WebSphere  >

实现 SOA 连接的第一步:WebSphere MQ V7 新功能

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 初级

娄 丽军 (loulj@cn.ibm.com), 高级工程师, IBM

2009 年 1 月 12 日

“SOA Message Backbone”,这是对 WebSphere MQ V7.0 的最佳写照。它可跨越 J2EE、Microsoft .NET 等多种环境,支持多达 35 种平台;它支持 JMS, Web2.0 等全新的技术和标准,它还具有全面的安全机制 Secure Sockets Layer (SSL),并且可以通过各种手段,不断优化性能,简化管理。本文介绍了 WebSphere MQ V7.0 的新功能、新特性。

前言

“SOA Message Backbone”,这是对 WebSphere MQ V7.0 的最佳写照。它可跨越 J2EE、Microsoft .NET 等多种环境,支持多达 35 种平台;它支持 JMS, Web2.0 等全新的技术和标准,它还具有全面的安全机制Secure Sockets Layer (SSL),并且通过各种手段,不断优化性能,简化管理。

WebSphere MQ V7.0 新增功能主要包括:对 Web 2.0 的支持,对内置发布/订阅功能的增强,在 MQ Client、JMS、MQI 等方面功能及性能的增强,以及管理方面的增强等等。下面,我们将向您详细介绍这些增强功能。





回页首


功能的增强

马上下载 WebSphere MQ V7 试用版

要了解关于 WebSphere MQ 的更多信息,请访问以下链接:

对 Web 2.0 的支持

Web 2.0 通过采用新的 Web 技术(如 AJAX)和简洁技术(如 REST)来创建用户接口。引人注目和有价值的用户接口需要的不止是接口和工具,存取有意义的最新业务数据是向 Web 2.0 用户提供真正价值所必不可少的。WebSphere MQ V7.0 在核心应用程序的实际业务数据与 Web 2.0 之间建立起联系,体现了数据的价值所在,并使这些数据能够更加方便地呈现给 Web 2.0 用户。WebSphere MQ V7.0 提供了 HTTP 网桥(以前称为 SupportPac MA0Y),它利用 REST 编程模型将 AJAX 应用程序与 WebSphere MQ 主干链接在了一起。


图 1:WebSphere MQ Bridge for HTTP

WebSphere MQ V7.0 将 Web 2.0 与企业核心系统连接在了一起,使用户能有更丰富的体验,并且体现了业务数据的价值。Web 2.0 开发人员不需要具备 WebSphere MQ 知识或技能,就可以将新应用程序连接到核心业务系统。点到点与发布/预订两种消息传递方式都可以通过映射到 WebSphere MQ 队列和主题的统一资源标识(URI)来访问。REST 动词 GET、DELETE 和 POST 被映射到队列或主题的 MQGET 和 MQPUT 调用,如下表所示:


表 1 REST URI举例
REST URIs举例 资源是队列 资源是主题 MQ API
this.XMLHttpRequest.open(‘GET', “http://host/msg/queue/resource"); 从队列中读取下一条消息 读取与主题匹配的下一条消息 MQGET with browse
this.XMLHttpRequest.open(‘POST', “http://host/msg/queue/resource"); 将消息放入队列 发布一条某一主题的消息 MQPUT
this.XMLHttpRequest.open(‘DELETE', “http://host/msg/queue/resource"); 删除队列中的消息 读取订阅到的消息并删除 MQGET

MQ Bridge for HTTP 的另外一个好处在于:简化了对 MQ 客户端的要求,如下图所示:


图 2 传统 MQ Client 工作模式

之前通过 MQ Client 来访问 MQ Server 时,我们需要安装 MQ 客户端软件,这样就存在系统管理方面的开销,并且需要 3~10 M 的安装空间,这在某些特殊的用户环境中会遇到挑战。


图 3 Web 2.0 工作模式

采用了基于 HTTP 的客户端之后,不仅为 HTTP 应用,例如:AJAX, RESTful 等提供了一个访问后台 MQ Server 的有效途径,并且客户机应用程序就不需要安装或配置 WebSphere MQ 客户机代码了,因此 HTTP 网桥还可以用在不需要客户机的地方,而且简化了对需要简单访问 WebSphere MQ 的诸多应用程序的管理。

内置的发布/订阅功能

事件驱动的 SOA 提供了响应迅速且灵活的基础架构,可以更为快速和方便地改变应用程序的连接方式。WebSphere MQ 是事件驱动的 SOA 的理想传输层,它支持发布/订阅消息传递。发布/订阅为松耦合的应用程序提供了一种由事件驱动的灵活模式。它可以在预先完全不知道消息接收应用程序的情形下,在应用程序之间传递消息。消息发布和消息接收应用程序之间的链接并没有明确定义,因此当需要修改发送和接收数据的应用程序时并不需要对链接进行改动。

在 MQ V6 及其之前的版本中对发布/订阅的支持不是产品本身内置的,而是通过 MQ Support Pac 的形式提供的,Support Pac 的编号是 MA0D,要通过 MA0D 用户可以实现发布/订阅功能,我们要为每一个队列管理器创建一个代理(Broker),并且这个代理的名称和队列管理器的名称相同。在编写发布/订阅应用时,我们要熟悉 MQRFH2 这个特殊的消息头并且利用它以及相应的 Verb 来进行应用程序的开发。

而 MQ V7.0 为我们提供了一个新的内置于 MQ 队列管理器之中的内置的发布/订阅引擎,从而取代了 MA0D 的 Support Pac,这是一个非常大的改进,从而实现了队列管理器自身就可以管理发布/订阅工作而不需要依赖于外部单独的一套机制,管理进程合二为一;不仅如此,从编程接口而言,发布/订阅接口也成为了 MQI 内置的一部分,这样提高了应用程序的效率。而在 V7 之前,发布/订阅程序需要通过和一个运行在队列管理器之外的代理进程的队列接口进行通讯。

MQ Client 增强

WebSphere MQ V7.0 引入了新的服务质量,以帮助优化那些需要非持久性消息流传递的客户机应用程序的性能。服务器可以将非持久性消息以消息流方式发送给客户机,从而使这些消息可以在客户机发出请求之前就到达客户机的缓冲区。这种消息预读功能使 WebSphere MQ V7.0 能够预先发送客户机可能请求的消息。

另外,WebSphere MQ V7.0 服务器还可以控制发给客户机的消息流。消息预读可以将非持久性消息传递吞吐量提高 300%。因为客户机端的消息存储在客户机内存中而不在队列中,所以该功能只适用于非持久性消息传递。如果 MQ 服务器要将持久性消息发送给客户机,那么 MQ 会自动回复到常规的服务质量,对这些消息进行处理。对 MQ V7.0 客户机启用消息预读,不需要对现有应用程序进行更改,只需要重新配置 WebSphere MQ。

MQV7.0客户机使用TCP/IP的全双工协议,所谓全双工是指通信双方能在同一时刻进行发送和接收操作,与之对应,半双工则是指通信双方不能同时收发数据。在之前的MQ Client 版本中,由于使用半双工协议,队列管理器端只有当MQGET/MQGET操作在等待间隔(WaitInterval)期间,才能进行“心跳”检测。而采用了全双工协议之后,无论从客户端还是从队列管理器端都可以在发送/接收数据的同时就可以进行“心跳”检测,从而更加迅速地进行通讯故障的检测和孤立的服务器连接通道的检测,从而提高了可用性。

MQ V7.0 支持 TCP/IP 套接字共享,即连接到同一个队列管理器上的多个客户端线程可以共享同一个客户端通道的实例,每个线程的MQI调用透明地共享一个TCP/IP Socket连接,这有助于简化对大量客户机连接的管理。连接共享可以更方便地查看多个客户机的连接状态。通过共享套接字,客户机还可以提高可扩展性,减少建立连接(特别是 SSL 连接)所需的时间,从而提高了总吞吐量。

传统的 MQ Client 是采用同步的工作模式,而 MQ V7.0 提供了一项新功能,可以使客户机应用程序异步地工作,即在将消息送到队列或主题之后,继续执行有用的工作,而不是等待发回给客户机的响应代码,以异步方式传递消息这种方法使客户机不需要在每次将一条消息放入队列或主题之后等待队列管理器的响应。可以稍后请求返回码,如果需要,可以使用新的调用 MQSTAT,它可以提供最新的异步返回码。客户机应用程序可以选择不等待,而且可以准备发送下一条消息或做其他有用的工作而不是暂停以便与 MQ 服务器同步。这个新功能可以有效地提高那些不要求响应码的应用程序性能。





回页首


开发方面的增强

对 JMS 的增强

JMS 是用于消息传递的 Java 业界标准编程接口。MQ V7.0 极大改善了 JMS 使用的便捷性,并优化了其性能。之前 MQ支持 JMS 标准 V1.1。在保持JMS 接口不变的同时,MQ V7.0 对 JMS 接口进行了极大的优化和增强。MQ V7.0 将 JMS 配置集成到了基于 Eclipse 的图形工具 MQ Explorer 中,从而方便了 JMS 解决方案的设计和部署,从而实现的诸如连接工厂和目标这类的 JMS 对象可以与 MQ 队列和 MQ 通道这些对象一样显示在 MQ Explorer 中。由于利用 MQ Explorer 可以远程配置整个 WebSphere MQ 网络,这样就可以更为方便地浏览和配置整个网络中的 JMS 消息传递。使用 MQ V7 Explorer 可以更方便地:

  • 查看 JMS 资源的所有属性,更新 JMS 对象属性。
  • 创建 JMS 资源,譬如,使用详尽的向导来创建连接工厂。
  • 创建队列或主题,同时可以自动定义相应的 JMS 目标。
  • 定制 JMS 对象视图,就象处理其他 MQ 资源一样,譬如,过滤符合选择条件的 JMS 对象。

经过增强的 JMS 跟踪工具可以帮助我们改进问题的确定和可维护性,在遇到问题并且需要 IBM 支持人员的协助时,经过改进的诊断功能可以帮助快速解决问题,这包括首次故障数据捕获(FFDC)以及增强的跟踪控制和格式化。

对 MQI 的增强

WebSphere MQ 包含了大量编程接口 - MQI(Message Queue Interface),我们透过MQI与MQ系统交互,MQI 支持多种操作系统平台和多种编程语言。为了方便 MQI 开发人员的使用,WebSphere MQ V7.0 进一步增强了 MQI,添加了一些新的调用和行为。在之前的版本中,MQ 的消息由消息描述符(MQMD)和消息体(Message Body)组成,从 V7.0 开始,引入了消息属性,消息属性可以是与消息相关的任何值(Integer, String, Boolean等),但又不是消息体的一部分,从而就像是一个可扩展的用户自定义的 MQMD,它比 MQRFH2 使用起来更简单,接收端应用在不需要的时候也不需要解析它。


图 4 MQV7.0 新增消息属性

在 MQI 中引入了消息属性和消息句柄之后,我们可以:

  • MQI 用户可以用用户定义的数据来定制消息头。
  • 新的 MQI 调用支持属性的设置(MQSETMP)和属性的查询(MQINQMP),应用程序不需要解析消息头就可以找到消息元数据。
  • 开发人员可以使用消息句柄来指定消息之间的显式关系,譬如何时发送消息以响应某些消息。

例如:


图 5 MQ V7.0 消息属性的使用举例

WebSphere MQ V7.0 在 MQI 中引入了回调函数 - 新的调用 MQCB。传统上我们获取消息是通过使用 MQ 触发器或者是 MQGET 轮询的方式,而回调函数则采用类似 MDB(消息驱动Bean)的方式工作,这使得 JMS 和 MQI 客户机可以向队列管理器进行注册,以便在消息到达时可以自动通知他们,从而以异步方式处理消息。在这之前,WebSphere MQ 客户机使用 MQGET 对消息进行轮询,现在 MQI、JMS 和 XMS 客户机都将得益于这个回调:

  • 不再需要客户机应用程序持续不断地对队列管理器进行轮询
  • 释放了部分网络带宽
  • 缩短了从消息到达至响应之间的延迟时间
  • 减少了对服务器和客户机的 CPU 使用

WebSphere MQ V7.0 引入了对 MQI 的选择器支持,消息选择器是 MQOD 或者 MQSD 结构中的一个变长的字符串:

  • 应用程序可以根据消息属性或消息头从队列中选择消息。
  • 可以用标准查询语言(SQL92)构造的查询,通过匹配消息属性中的条件,来检索经过过滤的消息。
  • 可以将选择器与 MQOPEN 和 MQSUB 调用结合使用,检索与所需条件相符的消息。
  • 可以在服务器上运行查询,以便对客户机性能进行优化。

利用选择器,使客户机应用程序不再需要浏览所提供的消息以及比较选择条件并忽略不符的消息。现在只有符合选择条件的消息才会传递给目标客户机。由于不需要向客户机发送无用的且会被客户机丢弃的消息,因此可以提高性能并降低网络带宽的使用。

发布/订阅开发更简化

WebSphere MQ V7 对于 JMS 发布/订阅的支持维持不变,而对于 MQI 编程,首先增加了一个新的数据结构 MQSD(MQ Subscription Descriptor),用来设定主题和订阅属性;其次增加了一个 MQSUB 语句来注册、修改或者注销一个订阅,我们可以不需要在应用程序中创建和设置 MQRFH 和 MQRFH2 这两个消息头了,对于已有的语句增加了新的选项,比如可以通过 MQOPEN 访问主题,可以通过 MQCLOSE 注销一个订阅,通过 MQPUT,MQGET 来发布和接收订阅消息。





回页首


性能方面的提升

发布/订阅性能提升

WebSphere MQ V7.0 优化了发布/订阅消息传递的吞吐量。如前所述,由于从 V7 开始在队列管理器中集成了发布和订阅功能,因此不需要像以前一样在队列管理器和独立的发布和订阅组件中进行两次队列持久性发布。通过对持久性发布和订阅消息传递的消息日志记录进行优化,吞吐量可以获得 20% 的提升。对于所有接口(JMS、MQI 和 XMS),性能都能提高到这样的水平。

从可靠性角度,之前的 MQ 版本的发布/订阅的拓扑结构只能是树型结构(hierarchy),即所有的Borker 都通过父子关系连接在一起,而从 V7.0 开始,发布/订阅的拓扑结构既可以是树状的,也可以是通过群集联系在一起的,并且可以独立于已有的基于队列的群集进行定义。从而提供了可扩展性和可用性。发布/订阅的群集和 Message Broker 的 Collective 类似,主题消息可以在群集之间发布。如下图所示:


图6:发布/订阅的树状和群集拓扑结构

WebSphere MQ V7.0 利用发布/订阅集群提高了发布和订阅消息传递的可扩展性和可用性,发布和订阅集群使您能通过一组队列管理器来路由发布,从而消除了单点故障。

JMS 性能提升

WebSphere MQ V7 增强了 JMS 消息传递的吞吐量和性能。JMS 客户机应用程序可以受益于 WebSphere MQ V7.0 中这些性能的改善。消息预读将非持久性 JMS 的吞吐量提高了 300%。JMS 选择器性能通过服务器端的选择器匹配也得到了改善,消除了因客户机端选择器匹配而带来的网络延迟。选择器的性能在很大程度上依赖于选择器条件、头内容和匹配消息所占的比例。在 WebSphere MQ V7.0 中,JMS 选择器的吞吐量可以提高 250%。

通过取消轮询并采用异步方式将消息传递给监控目标,WebSphere MQ V7.0 优化了 JMS 消息侦听器。在这个发行版中,JMS 消息侦听器的吞吐量可以提高 45% ,而且还缩短了等待时间。共享客户机对话的引入还可以减少建立连接(特别是 SSL 连接)所需的时间,且增加了总吞吐量。要详细了解这方面的内容,请参考“MQ Client增强”这一部分。

WebSphere MQ V7.0 在队列管理器中集成了发布和订阅功能,因此不再需要像以前一样在队列管理器和独立的发布和订阅组件中进行两次队列持久性发布。通过对持久性发布和订阅的消息日志记录进行优化,提高了 JMS 消息传递吞吐量。

J2EE 应用程序服务器可以利用这些性能改善来提高消息驱动的 bean(message-driven bean,MDB)的消息吞吐量,MDB 在消息到达时通过 WebSphere MQ 进行调用,取消了对消息提供方的轮询,这也可以降低应用程序服务器的 CPU 使用。





回页首


管理方面的增强

MQ Explorer 功能增强

MQ Explorer 可以支持在 x86 上的 Linux 和 Microsoft Windows 机器上对 MQ 进行远程配置。如果要更方便地管理许多队列管理器,现在可以在 MQ Explorer 导航器中将其分组到不同的视图,例如,可以分别对测试队列管理器和生产队列管理器分组,并进行查看。


图 7:对队列管理器进行分组管理

配置安全性设置也更加容易,可以为每个队列管理器配置通道出口、用户标识和密码,或者为一个组或工作空间中的所有队列管理器配置通道出口、用户标识和密码。从 MQ V6.0.2 开始,MQ Explorer 插件包含了图形问题发现工具,只需要单击一次,该工具就可以对消息传递主干配置进行检测和分析,并且可以通过对象权限管理器(OAM),以图形化方式对用户许可进行配置。


图 8:使用 MQ Explorer 设置 OAM

并且无需购买 WebSphere MQ for z/OS V7.0 Client Attachment Feature,就可以利用 MQ Explorer来管理 MQ 网络中的 z/OS 平台上的 MQ 了。

发布/订阅管理简化

从 MQ V7.0 开始,对发布/订阅的管理完全集成在了图形化的 MQ Explorer 工具中,从而可以更方便地使用和配置这一功能。由于发布/订阅功能的内置,利用 MQ V7.0 ,可以直接在应用程序中发布主题,不需要启用单独的发布和订阅组件;可以自动启用属于所有队列管理器的发布和订阅服务;可以像管理队列那样直接管理作为 MQ Explorer 对象的主题,从而简化了管理以及安全管理。可以使用图形化的向导创建主题,该向导也可以生成相应的 JMS 主题。利用自带的工具发送、接收和测试,使得测试、发布和订阅工作变得更为简单,该工具同时包含了发布、订阅和点到点消息传递的具体样本。


图 9:使用 MQ Explorer 管理发布/订阅

利用 MQ V7.0,可以更轻松地看到某个主题下订阅了哪些应用程序,就像可以看到哪些应用程序正在使用具体某些队列一样(使用Display QStatus命令),可以在不更改任何代码的情况下,将现有应用程序从点到点消息传递模式切换为发布/订阅模式。MQ V7.0添加了一个新的 Topic 对象类型,该类型可以用于定义发布和订阅主题,以及建立支持更大主题空间的主题层次结构。在临时订阅后,队列管理器会自动进行清理,因此简化了管理而且节省了资源。Topic 对象还支持继承性,可以继承诸如安全性设置等属性,这有助于减少手工管理。通过对主题对象的权限设置并遵守现有 MQ 授权服务安全模式来限制主题的使用,V7.0 使发布/订阅许可的管理变得更为简单。





回页首


总结

本文从 MQ 对 Web 2.0 的支持,Pub/Sub、MQI 编程接口、MQ 客户端的增强,MQ JMS 标准的增强以及管理性的提升等方面简要介绍了 MQ V7.0 版本新增的一些主要功能,关于这些方面的详细信息,您也可以通过访问 MQ 网站获得这方面的信息。



参考资料

学习

获得产品和技术


关于作者

娄丽军是 IBM 资深 MQ 工程师。她在 developerWorks 中国网站上发表过数篇文章,并设有小娄消息中间件专栏




对本文的评价








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