IBM的WebSphere MQ消息中间件有很多的特性和优点,使用WebSphere MQ可以简化和优化消息通讯的应用设计。将这些技术和功能应用到客户的通讯系统之中,可以简化应用逻辑,优化系统架构,从而提高整个系统的可靠性、可用性和可扩展性。下面将介绍怎样使用WebSphereMQ的一些特性来简化程序。
1.利用消息的COA机制处理接收回执
在通讯应用处理中,如果数据的发送方需得到接收方结果收妥的确认后方可进行。我们可以利用MQ的消息的COA(Confirm On Arrival)机制来实现。
所谓COA机制,是指当消息从源地址发往目的地址时,当消息到达目的队列之后,由MQ系统本身自动产生一个应答,返回给源地址,返回的消息的内容可以是原始消息的前100个字节或者是原始消息的全部内容。
当从发送方向接收方发送数据时,在消息中设置COA标志,当消息到达接收方时,接收方的MQ系统会自动产生一个应答,反馈给发送方,发送方只有在收到此应答消息时,才对接收行进行相应业务处理。
2.利用MQ机制实现网络超时和业务处理超时处理
在有些客户业务系统中,数据的发送和接收有两种情况需要特殊处理,一种是发生网络故障,数据没有在指定的时间内到达接收方情况下的超时处理;另一种情况是,在指定时间内,尚未发出的数据要从MQ的队列清除,对此两种情况的解决方案如下:
网络故障,数据没有在指定的时间内到达接收方情况下的超时处理
把数据从发送方送到接收方,若发生网络故障,数据将无法在规定的时间内被发出,为此我们可以采用如下方案,在方案中我们可以利用到MQ的以下三种机制:
MQ消息生命周期:MQ的消息可以设定生命周期,在消息指定生命周期到达时,可以自动将消息删除或取出进行其他处理。
MQ还有一种报告机制,可以自动产生报告,报告的类型有COA(confirm on arrival)、COD(confirm on delivery), COEXPIRATION(confirm on expiration)等,既分别在消息到达对方、到达对方并且被应用程序取走、到达对方但却已超时的情况下,自动向消息发出方发回一个应答。
MQ通道出口,MQ通道出口有若干类型,分别为:security exit, send exit, receive exit, message exit等,其中,利用send exit, receive exit, message exit等可以修改消息的内容,如对消息进行加密,压缩等。
我们经常主要利用这三种机制,实现消息的超时意外处理,方法是:为消息设定生命周期,在指定生命周期到达时,MQ将自动产生一个超时报告消息,并将原始数据发送到另外一个临时队列中暂存,由系统管理员决定进一步处理方式。如需继续发送,则重新放入发送队列;也可取消该处理。
当数据到达接收方之后,接收方不需进行超时控制,因此,在从发送方到接收方通道的发送一端,利用message exit将消息的生命周期重新置为0(代表无生命周期限制),这样消息只要一从发送方发出,便被取消生命周期限制,当他们到达接收方,就保证一定能被处理,从而满足业务需求。
在规定时间内,尚未发出数据的处理
通过调用MQ的编程接口,在消息发送方可将尚未发出的请求消息从发送队列中取出进行相应处理或输出到文本文件中。
3.WebSphere MQ充当资源管理器
在有些项目中为了保证IBM WebSphere MQ和数据库的之间的数据完整性和完整性,可以有两个方案:
第一个方案是可以使用MQ充当交易管理器,从而保证MQ和数据库之间的数据的完整性和一致性。这个方案中只能实现一阶段的事务提交。
第二个方案是可以使用一个CICS交易服务器可以同时协调多个资源管理器(Resource Manager)之间的数据完整性和交易完整性,这其中Resource Manager包括有各种主流关系数据库(DB2,Informix,Oracle,Sybase),消息中间件(IBM WebSphere MQ)和主机390的交易。 有时由于业务需求,要求一个交易中间件系统可以同时协调两个数据库的业务操作或一个数据库与消息中间件之间业务操作,这一切即要求保证据完整性和交易完整性,又要求对应用程序透明操作. 目前, 只有CICS对此完全支持。这个方案比较普及,可以实现两阶段事务提交。
4.智能消息分发和多点广播
在有一些系统中需要实现消息分发和广播发送,例如数据从总中心分发到各分中心时,我们可以利用MQ的Distribution List(分布式列表)功能,利用一次MQ函数调用,将数据广播发送到所有分中心,MQ可以确保数据的可靠传递,同时还可利用MQ的COA功能使消息到达分中心后自动向总中心发回确认消息。
WebSphere MQ适用于不同类型的应用。其中重要的,也是正在发展中的是“多点广播”应用,即能够将消息发送到多个目标站点。可以使用一条WebSphere MQ指令将单一消息发送到多个目标站点,并确保为每一站点可靠地提供信息。WebSphere MQ不仅提供了多点广播的功能,而且还拥有智能消息分发功能,在将一条消息发送到同一系统上等多个用户时,WebSphere MQ将消息的一个复制版本和该系统上接收者的名单发送到目标MQ系统。目标MQ系统在本地复制这些消息,并将它们发送到名单上的队列,从而尽可能减少网络的传输量。
5.大数据量传输的支持
在很多系统架构中,MQ担当着整个系统的通讯骨架,实现发送方和接收方之间各类报文传输的功能,在此,MQ可以极大并充分地发挥其优势,因为WebSphere MQ可以高效地实现大数据量的传输,其优越的传输性能是同类产品所无法比拟的。WebSphere MQ支持的最大消息长度为100M,是同类产品消息长度最大的,因此它支持声音、图象等多媒体数据;而且,WebSphere MQ有着完善的机制来实现消息分段的需求,即可以把大消息做分段处理。对于分段消息的传输,WebSphere MQ用一阶段提交的方式来处理,即把所有segment消息当成一个完整的事务,保证他们或者都被传输到接收方的应用程序,或者一个都不传输。
6.基于群集的负载均衡
为了提高系统的可用性和可扩展性,可以采用WebSphere MQ的群集功能实现动态负载均衡。IBM的CICS和WebSphere MQ均支持群集功能。很多项目中目前的应用需求都是采用WebSphere MQ实现群集功能。例如,在两台应用服务器和一台通讯服务器(或称负载均衡服务器)分别配置多个WebSphere MQ系统,这三个MQ的队列管理器组成一个群集, 实现负载均衡。通讯服务器上的MQ作为群集的网关,群集外的队列管理发上来的数据经过该网关可被转发到另两台MQ应用服务器上;两台MQ应用服务器上应用的处理结果也可以MQ消息的形式经由网关,被发送到群集外的各个队列管理器。这些功能都可以通过MQ群集进行简单配置加以实现。
队列管理器的群集功能大大减化WebSphere MQ了系统配置,并能够实现群集内部各个队列管理器的路由功能。
队列管理器的群集功能使队列管理器之间能够共享负载,并且当某一系统或网络出现故障时,能够自动将消息发送到其它运行结点;同一群集中的队列管理器可以位于不同的平台和物理位置;群集功能使对队列管理器的管理更加简单高效。
7.数据库处理和消息操作协同工作
前面提到WebSphere MQ可以作为一个资源管理器也可以作为事务管理器,在CICS的管理下与数据库协同工作,实现MQ队列操作和数据库操作的同步。 同时MQ本身也可作为事务管理器,利用与数据库之间XA的连接实现数据库与MQ队列的两阶段提交。这是WebSphere MQ迈向同关系型数据库技术更紧密集成的第一步,将允许WebSphere MQ用户享受到更先进得功能,如高性能的大型数据对象处理能力、更好的安全性和日志管理。有了WebSphere MQ,包含MQ和SQL操作的应用程序可以通过MQBEGIN命令开始作业单元,该作业单元中的所有WebSphere MQ和数据库操作都可以使用MQCMIT和MQBACK命令提交或回退。这在事务完整性比较重要的场合中可以简化应用程序的开发。
8.业务处理的优先策略
为了进一步优化客户系统的响应能力,需要考虑在数据传输及业务处理的过程中根据其对响应时间的要求制定相应的优先原则。
在基于WebSphere MQ的数据传输和处理的过程中,除了先入,先出的顺序处理以外,还可通过给数据指定优先级选项,使得队列中的数据按照优先级排队处理。MQ的优先级分为0到9共十个优先级供用户选择。如果客户有很多种业务类型的数据需要传输,它们使用公共的网络物理链路和MQ连接,但有不同的处理要求,例如有的业务数据量小,但要求实时响应;而有的业务数据量大,对响应时间无要求。这样我们就可以对各类数据指定相应的优先级,按优先级从高到低的顺序排列,优先级高的数据将被优先传输和处理。
9.支持事件驱动机制
WebSphere MQ特有的触发机制,能够在触发条件满足时,启动应用程序的执行,即应用程序不必总是在运行中的。当第一个或第几个信息到达一个指定的队列时,一个应用可以有选择的被触发起来,这样可以做到应用程序的运行是随机的,基于任务的,并不是可预知的。同时,由于许多不常用的应用不必同时都在运行着,大大地节省了系统资源。
在接收方,利用MQ的触发机制,在队列中的消息到达时,自动触发接收处理程序。MQ的触发类型有every、first、depth等几种类型,在接收方设置为every类型进行触发,MQ的队列中每到达一条消息,会自动触发一个消息接收处理应用。