Websphere MQ 学习笔记
通信技术
MQI(Message Queue Interface)
消息队列接口为程序提供了一种异步通信方式。
一个程序以一个队列作为中转与另一个程序相互通信,这个队列相对于该程序而言既可是本地的也可以是远程的。
当程序A需要和程序B通信时,A只需PUT一条消息到一个和B相联系的队列上,程序A然后可以干别的事。它似乎感觉不到通信的发生,通信以及对通信错误的恢复是由队列管理完成的。
WebSphere MQ的原理
Websphere MQ基本由一个消息传输系统和一个应用程序接口组成,其资源是消息和队列(Messaging and Queuing)。
1、消息:消息就是一个信息单元,这个信息单元可以是一个请求(Request message),也可以是一个应答(Reply message),或者是一个报告(Report message)或一份报文(Datagram messge)。
一个消息包含两个因素——消息描述(用于定义诸如消息传输目标等)和数据消息(如应用程序数据或数据库查询等)。程序之间的通信通过传递消息而非直接调用程序。
2、队列:一个安全的存储消息的地方,消息的存储一般是顺序的,队列是消息分阶段地传送和接收。因为消息存放在队列中,所以应用程序可以相互独立的运行,以不同的速度,在不同的时间,在不同的地点。
3、消息传输系统:用于确保队列之间的消息提供,包括网络中不同系统上的远程队列之间的消息提供。并保证网络故障或关闭后的恢复。
4、应用程序接口:应用程序和消息系统之间通过Websphere MQ API实现的接口Websphere MQ API在所有Websphere MQ平台上是一致的。API只有14个调用,2个关键动词:发送(PUT)和接收(GET)。
WebSphere MQ对象(objects)
WebSphere MQ对象是一种由WebSphere MQ管理的具有可恢复能力的资源。在本书中描述的许多任务都和下列对象相关:
队列管理器(Queue managers)
队列(Queues)
名字列表(Namelists)
分发列表(Distribution lists)
进程定义(Process definitions)
通道(Channels)
存储类(Storage classes)
每一个对象都有一个名字,以便通过命令和MQI调用可以引用它。通常在这些对象类型中的每一种对象的名字管理器创建了这样一条报告消息并发往本地队列管理器之后,应用程序才能作相应的处理。
最大消息长度为 100 MB(其中 1 MB 等于 1 048 576 字节),缺省最大消息长度是 4 MB。
队列是用于存储消息的数据结构,目前WebSphere MQ 版本 5.3 支持超过 2 GB 大小的队列。
1.本地队列(local queue):
一个本地队列是一个物理上位于本地队列管理器中的队列。本地队列实际上存在与本地系统的内存或磁盘存储终。本地队列管理器控制队列的访问。
应用程序可以“PUT”消息到本地队列,也可以从本地队列“GET”消息,另外程序还可以查询或修改这些队列的某些属性。对队列属性的修改需要相应的权限。
2.远程队列(remote queue):
一个远程队列属于一个不与该应用程序直接相连的队列管理器。对这类队列的访问包含有本地队列管理器和远程队列管理器的通信过程。这种通信涉及到通道。
应用程序可对远程队列进行某些操作,比如程序可以向一个远程队列放一条消息,但程序不能从远程队列中去消息。应用程序只能从本地队列读取消息。
3.传输队列(Transmission queue):
传输队列是临时存储目标为远程队列管理器的消息的队列。队列管理器利用传输队列把消息分阶段地发向远程队列。
4.动态队列和模板队列:
除了有固定定义的队列之外,WebSphere MQ还为程序在它们执行时提供了动态地创建队列的能力。
5.启动队列
启动队列是在触发中使用的队列。如果队列管理器将使用触发,则必须至少为此队列管理器定义一个启动队列。
6.群集传输队列
每个在群集中的队列管理器有一个称为 SYSTEM.CLUSTER.TRANSMIT.QUEUE 的群集传输队列。
7.死信队列 (Dead letter queue)
死信(未传递的消息)队列是存储无法发送到其正确目的地的消息的队列。有时候会出现队列管理器不能把消息发送到目的地的情况,此时消息将被发送到某个死信队列中。
死信队列是WebSphere MQ面对远端系统错误时的一种解决方案。
8.命令队列
命令队列 SYSTEM.ADMIN.COMMAND.QUEUE 是用来存放由应用管理程序放的具有PCF(program command format)的消息的队列。该队列主要用于编写管理程序时使用。
9.回复队列
当应用程序发送请求消息时,接收消息的应用程序可以将回复消息发送给发送应用程序。
10.别名队列
别名队列实际上是本地队列、远程队列定义或队列名表的另外一个名字。
队列管理器负责维护它所拥有的队列,以及将它接收到的所有消息存储到相应的队列。可以由应用程序或队列管理器将消息放入队列,这些是它的正常操作的一部分。
消息通道是一种提供从一个队列管理器到另一个队列管理器的通信路径。
消息通道是一个单向链接。它通过消息通道代理(message channel agents)把两个队列管理器连接起来。
消息通道的定义可以分为以下6种类型:
发送通道(Sender)
接收通道(Receiver)
服务器通道(Server)
请求器通道(Requester)
群集发送通道(Cluster sender)
群集接收通道(Cluster receiver)
如果要在队列管理之间实现消息传输,必须要在两个队列管理器上都要定义相应的通道。发送方和接收方通道的组合形式如下:
发送通道-接收通道(Sender-receiver )
请求器通道-服务器通道(Requester-server)
请求器通道-发送通道(Requester-sender (callback) )
服务器通道-接收通道(Server-receiver )
群集发送通道-群集接收通道(Cluster sender –cluster receiver)
MQI通道是WebSphere MQ 客户端和服务器上的队列管理器的通信的通道。
消息通道与MQI通道之间的区别可以从两方面进行比较:
MQI通道是双向的:一个MQI通道可以被用来发送请求,也可用来接收响应。而消息通道则只能单向数据通信。如果要在两个队列管理器之间实现双向通信,那么需要定义两个消息通道,一个用来实现数据的发送,另一个用来实现数据的接收。
MQI通道的通信是同步的:当一个MQI请求从客户端发送服务器端时,WebSphere MQ的客户端在发送下一个请求之间必须要等待来自服务器端的响应。而消息通道,在通道中传输的消息是与时间无关的。大量的消息可以从一个队列管理器发送到另一个队列管理器,发送队列管理器不必等待来自接收队列管理器的任何响应。
命令名 目的
amqmcert 管理 SSL 证书
amqmdain 配置或控制 WebSphere MQ 服务(仅 Windows 系统)
crtmqcvx 转换数据
crtmqm 创建本地队列管理器
dltmqm 删除队列管理器
dmpmqaut 转储打开对象的权限
dmpmqlog 转储日志
dspmq 显示队列管理器
dspmqaut 显示打开对象的权限
dmpmqcap 显示处理程序容量和处理程序数
dspmqcsv 显示命令服务器状态
dspmqfls 显示文件名
dspmqtrc 显示格式化跟踪输出(HP-UX、Linux 和 Solaris)
dspmqrtn 显示事务的详细信息
endmqcsv 停止队列管理器上的命令服务器
endmqlsr 停止队列管理器上的侦听器进程
endmqm 停止本地队列管理器
endmqtrc 停止对实体的跟踪(不用于 AIX)
rcdmqimg 向日志写对象的映象
rcrmqobj 根据它们在日志中的映象重新创建一个对象
rsvmqtrn 提交或逆序恢复事务
runmqchi 启动通道启动器进程
runmqchl 启动发送方或请求者通道
runmqdlq 启动死信队列处理程序
runmqlsr 启动侦听器进程
runmqsc 向队列管理器发出 MQSC 命令
runmqtmc 调用客户机的触发器监控器(仅 AIX 客户机)
runmqtrm 调用服务器的触发器监控器
setmqaut 更改打开对象的权限
setmqcap 设置处理程序容量
setmqcrl 设置证书撤销列表(CRL)服务器定义
setmqscp 设置服务连接点(仅 Windows 系统)
strmqcsv 启动队列管理器的命令服务器
strmqm 启动本地队列管理器
strmqtrc 启用跟踪(不用于 AIX)