WebSphere MQ出口程序编写和配置1

1 出口程序的概念

使用WebSphere MQ(以下简称MQ)做分布式数据传输时,我们需要在两个队列管理器之间或者在MQ的客户端与服务器之间建立通道,MQ的通道分为三大类:消息通道,MQI通道,Cluster通道。其中消息通道用于队列管理器之间的数据传输,它主要有Sender,Receiver, Server,Requester四种类型;MQI通道用于Client与Server端的通讯,它可以认为是一种API通道,使得客户端能够通过API编程访问和使用服务器端的消息队列资源;Cluster通道是位于同一个队列管理器群集内部的若干队列管理器之间相互通讯用的。

为了使用户在利用MQ进行消息传输时增加对消息的客户化处理以及对通道的控制,MQ提供通道出口(Channel Exit)的解决方案。出口程序在定义通道时指明,并由MCA(消息通道代理)程序调用,目的在于增强通道的处理以及提供安全服务和消息处理服务。

利用出口机制,客户可将自己的加密、压缩等计算处理模块平滑地嵌入到MQ的消息传输处理流程中,从而使这些计算处理的算法部分与进行队列读写的应用程序相分离,这样根据灵活性和扩展性的需要,可以经常改变出口的计算处理算法,而不需修改应用程序。

MQ提供的出口程序类型主要有:安全出口(Security Exit), 发送/接收出口(Send/Receive Exit), 消息出口(Message Exit), 消息重试出口(Message Retry Exit)等。

一般而言,出口程序是成对使用的,譬如在发送端使用了加密出口程序,则在接收端必须使用解密出口程序。这些出口程序的作用分别在于:

    安全出口:主要用于两个MQSeries系统之间通道启动时的双方的身份认证;

    发送和接收出口:可以用来进行数据的加密/解密以及数据的压缩/解压缩;

    消息出口:可以用来在消息级实现用户的特定功能,如数据转换,加密/解密等。

例如,利用通道出口程序将数字签名加在通道上的每一条消息上,该数字签名被接收端通道代理程序接收,进行相关验证,在消息从发送端到接收端传输的过程中,绝不会被更改。WebSphere MQ为用户提供了一些非常实用的工具:SupportPac软件包,用户可以从产品的Internet站点上下载使用,其中的MS0C就是一个如何使用MQ的安全出口实现PKI认证的例子。


2 出口程序的工作机制

2.1 安全出口的工作机制

安全出口主要用于通道两端的MCA互相连接时,进行对方的安全验证。它在MCA初始化和终止时被调用。在通道启动时,MCA程序从启动会话转为同步处理,然后转向数据交换,其中包括安全出口程序,这个相互认证过程必须成功完成之后才能进行消息传输。

2.1.1 安全出口认证过程:

安全检查是一个循环过程,(Caller MCA是指发起连接者,可以是Sender、Server或Requester通道;被发起者称为Responder MCA,可以是任何种类的通道。),如图1所示:

在两个安全出口程序中间需要建立起安全连接,一个在发送端MCA,另一个在接收端MCA。在上面的安全循环中,本地队列管理器要由远端队列管理器鉴别自己,而作为回应,远端队列管理器也要由本地队列管理器鉴别自己。这是一个双向的过程。

发送端MCA启动通道后,由接收端MCA创建安全令牌以初始化安全信息,然后发送安全令牌给本地队列管理器上的MCA,发送端MCA接收到安全令牌后,利用认证机制将该令牌作为入口创建另外的令牌,并将它发送回接收端MCA。接收端MCA检查第二次收到的令牌,完成相互鉴定。如果以上操作成功,接收者队列管理器就确认与发送者队列管理器的通信,即发送端可以向接收端传输消息。安全出口成对使用,任何一方都可以终止连接。

2.1.2 安全出口应用场合:

安全出口虽然名为”安全”出口,但它并不仅仅只用于安全目的,也并非所有的与安全有关的功能都必须在这里实现,用户完全可以灵活地利用它实现自己需要的功能,例如,在可以免费下载的MQ的SupportPac中,针对MQ for Windows 95/98平台,曾经提供了一个安全出口的例子程序,用于将通道的Connection Name从对方的IP地址改为对方的队列管理器名。

安全出口在发送端和接收端均可以返回以下几种结果之一:

    安全认证无误结束;

    禁止并关闭通道;

    发送安全消息给远端相应的安全通道;

    发送安全消息,并且要求应答(OS/390平台上使用CICS时,无此支持)

注意:

安全出口通常成对使用。如果定义了通道,必须确认通道两端具有一致的安全出口程序名。

2.2 消息出口的工作机制

消息出口作用于通道的任何一端,对每一个消息调用一次,即:在消息离开传输队列之后被放入目的队列之前。消息出口在以下这些情况下被调用:

    MCA初始化和终止时;

    发送MCA执行MQGET调用从传输队列中取出消息后(见图2);
图 2

    接收MCA执行MQPUT调用向本地队列放入消息前(见图3)。
图 3

2.2.1 消息出口应用场合:

    消息数据加密:消息出口一般用于消息传输前的加密和传输后的解密,其中的加/解密算法可以由用户自行定义。

    消息数据转换

    日志

    其它一些应用

消息出口可以返回以下几种情况之一:

    消息可以被取走(GET出口),消息已经被出口程序正确处理(返回MQXCC_OK);

    被放入队列中(PUT出口),消息已经被出口程序正确处理(返回MQXCC_OK);

    不能正确处理消息,消息被MCA放入死信队列。

    关闭通道。

以下文章点击率最高

Loading…

     

如果这文章对你有帮助,请扫左上角微信支付-支付宝,给于打赏,以助博客运营