WebSphere MQ的原理

WebsphereMQ是IBM的一款商业消息中间件,提供可靠的消息传输系统。它支持消息和队列管理,允许应用程序通过消息传递而非直接调用来通信。本文介绍了WebsphereMQ的基本概念,包括消息、队列和消息传输系统,并提供了基本操作指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 转帖自  http://blog.sina.com.cn/s/blog_3d1c58190100ax7i.html

 

Websphere MQ是IBM的商业通讯中间件(Commercial Messaging Middleware)。Websphere MQ提供一个具有工业标准、安全、可靠的消息传输系统。它的功能是控制和管理一个集成的商业应用,使得组成这个商业应用的多个分支程序(模块)之间通过传递消息完成整个工作流程。Websphere MQ基本由一个消息传输系统和一个应用程序接口组成,其资源是消息和队列(Messaging and Queuing)。

消息:消息就是一个信息单元,这个信息单元可以是一个请求(Request message),也可以是一个应答(Reply message),或者是一个报告(Report message)或一份报文(Datagram   messge)。一个消息包含两个因素——消息描述(用于定义诸如消息传输目标等)和数据消息(如应用程序数据或数据库查询等)。程序之间的通信通过传递消息而非直接调用程序。

队列:一个安全的存储消息的地方,消息的存储一般是顺序的,队列是消息分阶段地传送和接收。因为消息存放在队列中,所以应用程序可以相互独立的运行,以不同的速度,在不同的时间,在不同的地点。

消息传输系统:用于确保队列之间的消息提供,包括网络中不同系统上的远程队列之间的消息提供。并保证网络故障或关闭后的恢复。

应用程序接口:应用程序和消息系统之间通过Websphere MQ API实现的接口Websphere MQ API在所有Websphere MQ平台上是一致的。API只有14个调用,2个关键动词:发送(PUT)和接收(GET)。

 

如图所示:虽然应用程序A和应用程序B运行于同一系统A,它们不需要直接的通讯。应用程序A向队列1发送一条消息,而当应用程序B需要时就可以得到该消息。 

    如果消息传输的目标改为在系统B上的应用程序C,这种变化不会对应用程序A产生影响,应用程序A向队列Q2发送一条消息,系统A的Websphere MQ发现Q2实际上在系统B,它将消息放到本地的一个特殊队列-传输队列(Transmission Queue)。系统A的Websphere MQ然后建立一条到系统B通讯联接,传递这条消息到系统B,并等待确认。只有Websphere MQ接到系统B成功地收到消息的确认后,才从传输队列中移走消息。如果通讯线路不通,或系统B不在运行,消息会留在传输队列中,直到被成功地传送到目的地。这是Websphere MQ最基本而最重要的技术—可靠消息传输。

    事实上,Websphere MQ具有特殊的技术防止消息重复传送,确保消息一次且仅一次(once-and-only-once)传递。

 

#########################################################

IBM MQ 使用指南

随着计算机网络和分布式应用的不断发展,远程消息传递越来越成为应用系统中不可缺少的组成部分。
商业消息中间件的出现保证了消息传输的可靠性,高效率和安全性,同时也减少了系统的开发周期。
目前应用最多的消息中间件产品为IBM MQSeries。
东风生管系统就是通过MQ 通讯的。
本文就针对MQ的基本操作与配置进行详细的阐述,希望对读者有所帮助。
一.MQ基本操作
MQ中有几个很重要的组件:队列管理器(QueueManager)、队列(Queue)和通道(Channel)。其基本的操作方法如下:
创建队列管理器 
crtmqm –q QMgrName
-q是指创建缺省的队列管理器
删除队列管理器
dltmqm QmgrName
启动队列管理器
strmqm QmgrName
如果是启动默认的队列管理器,可以不带其名字
停止队列管理器
endmqm QmgrName 受控停止
endmqm –i QmgrName 立即停止
endmqm –p QmgrName 强制停止
显示队列管理器 
dspmq –m QmgrName
运行MQSeries命令 
runmqsc QmgrName
如果是默认队列管理器,可以不带其名字
往队列中放消息 
amqsput QName QmgrName
如果队列是默认队列管理器中的队列,可以不带其队列管理器的名字
从队列中取出消息 
amqsget QName QmgrName
如果队列是默认队列管理器中的队列,可以不带其队列管理器的名字
启动通道 
runmqchl –c ChlName –m QmgrName
启动侦听 
runmqlsr –t TYPE –p PORT –m QMgrName
停止侦听 
endmqlsr -m QmgrName
MQSeries命令
定义死信队列 
DEFINE QLOCAL(QNAME) DEFPSIST(YES) REPLACE
设定队列管理器的死信队列 
ALTER QMGR DEADQ(QNAME)
定义本地队列 
DEFINE QL(QNAME) REPLACE
定义别名队列 
DEFINE QALIAS(QALIASNAME) TARGQ(QNAME)
远程队列定义 
DEFINE QREMOTE(QRNAME) +
RNAME(AAA) RQMNAME(QMGRNAME) +
XMITQ(QTNAME)
定义模型队列 
DEFINE QMODEL(QNAME) DEFTYPE(TEMPDYN)
定义本地传输队列 
DEFINE QLOCAL(QTNAME) USAGE(XMITQ) DEFPSIST(YES) +
INITQ(SYSTEM.CHANNEL.INITQ)+
PROCESS(PROCESSNAME) REPLACE
创建进程定义 
DEFINE PROCESS(PRONAME) +
DESCR(‘STRING’)+
APPLTYPE(WINDOWSNT)+
APPLICID(’ runmqchl -c SDR_TEST -m QM_ TEST’)
其中APPLTYPE的值可以是:CICS、UNIX、WINDOWS、WINDOWSNT等
创建发送方通道 
DEFINE CHANNEL(SDRNAME) CHLTYPE(SDR)+
CONNAME(‘100.100.100.215(1418)’) XMITQ(QTNAME) REPLACE
其中CHLTYPE可以是:SDR、SVR、RCVR、RQSTR、CLNTCONN、SVRCONN、CLUSSDR和CLUSRCVR。
创建接收方通道 
DEFINE CHANNEL(SDR_ TEST) CHLTYPE(RCVR) REPLACE
创建服务器连接通道 
DEFINE CHANNEL(SVRCONNNAME) CHLTYPE(SVRCONN) REPLACE
显示队列的所有属性 
DISPLAY QUEUE(QNAME) [ALL]
显示队列的所选属性 
DISPLAY QUEUE(QNAME) DESCR GET PUT
DISPLAY QUEUE(QNAME)MAXDEPTH CURDEPTH
显示队列管理器的所有属性 
DISPLAY QMGR [ALL]
显示进程定义 
DISPLAY PROCESS(PRONAME)
更改属性 
ALTER QMGR DESCR(‘NEW DESCRIPTION’)
ALTER QLOCAL(QNAME) PUT(DISABLED)
ALTER QALIAS(QNAME) TARGQ(TARGQNAME)
删除队列 
DELETE QLOCAL(QNAME)
DELETE QREMOTE(QRNAME)
清除队列中的所有消息 
CLEAR QLOCAL(QNAME)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值