一、IBM WebSphere MQ简介
WebSphere MQ就IBM推出的商业消息中间件,又称IBM MQ,目前在传统行业如银行等仍在广泛使用,这里webspheremq安装及初步使用进行介绍。
二、基础知识
2.1 基本概念
2.1.1 消息
消息是数据的载体,由消息描述(如消息id、消息类型、消息优先级等)和数据组成。消息最大长度为100MB,默认最大长度为4MB。消息有下面4种类型:
请求消息(request message):从客户端发往服务端的查询或更新消息通常为请求消息,请求消息需要应答,消息中包含回复消息的路由信息;
回复消息(reply message):回复消息是对请求消息的应答,回复地址来自于请求消息;
报文消息(datagram message):报文消息不需要回复,只是单向的消息传递;
报告消息(report message):报告消息用于对系统故障的响应,由应用程序或队列管理器(如远程队列不存在或已满)创建;
2.2 队列
队列是存储消息的数据结构,按功能常用有:
本地队列(local queue):本地队列是本地队列管理器中的队列,存在于本地内存或磁盘中,由本地队列管理器控制访问;
远程队列(remote queue):远程队列属于不与当前应用直接相连的队列管理器,只能向远程队列放消息,不能从远程队列中读消息。
传输队列(transmission queue):传输队列(关联远程队列管理器)位于本地队列管理器上,是临时存储目标为远程队列管理器的消息队列;
死信队列(dead letter queue):死信队列用于存储无法发送到目的地(如目的队列不存在或队列已经满了)的消息;
除上述队列外,还有动态队列、命令队列、回复队列、别名队列等。
2.3 队列管理器
队列管理器是队列或其他对象的容器,管理拥有的队列。与应用直接相连的管理器为本地队列管理器。
2.4 通道
通道是不同队列管理器之间通信的路径,通道是单行的,通过消息通道代理将不同队列管理器连接起来。常用通道类型有:
发送通道(sender, SRD):消息发送方;
接收通道(receiver, RCVR):消息接收方;
服务器通道(server, SVR):消息接收方;
请求器通道(requester, RQSTR):消息发送方;
集群发送通道(cluster sender, CLUSSDR):消息发送方;
集群接收通道(cluster receiver, CLUSRCVR):消息接收方;
通道间的组合是固定的且每队通道名称需要一致,组合如下:
三、安装
3.1 websphere基本安装
websphere基本安装步骤如下:
1.下载webspheremq安装包:
wget http://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/messaging/mqadv/mqadv_dev915_ubuntu_x86-64.tar.gz
2.解压并进入安装包:
#解压后的文件为MQServer tar -zxvf mqadv_dev915_ubuntu_x86-64.tar.gz cd MQServer
3.同意安装协议:
sudo ./mqlicense.sh -text_only
4.安装websphere mq和websphere mq explorer(mq的界面查看工具):
#下面三个为依赖包,需提前安装 sudo dpkg -i ibmmq-runtime_9.1.5.0_amd64.deb sudo dpkg -i ibmmq-gskit_9.1.5.0_amd64.deb sudo dpkg -i ibmmq-jre_9.1.5.0_amd64.deb #安装websphere server sudo dpkg -i ibmmq-server_9.1.5.0_amd64.deb #安装websphere client sudo dpkg -i ibmmq-client_9.1.5.0_amd64.deb #安装示例 sudo dpkg -i ibmmq-samples_9.1.5.0_amd64.deb
5.检查安装
dpkg -l | grep mq
6.查看安装版本信息
cd /opt/mqm bin/dspmqver
输出如下:
Name: IBM MQ Version: 9.1.5.0 Level: p915-L200318.DE BuildType: IKAP - (Production) Platform: IBM MQ for Linux (x86-64 platform) Mode: 64-bit O/S: Linux 4.18.0-25-generic O/S Details: Ubuntu 18.04.2 LTS (Bionic Beaver) InstName: Installation1 InstDesc: Primary: No InstPath: /opt/mqm DataPath: /var/mqm MaxCmdLevel: 915 LicenseType: Developer
3.2 管理界面ibmmq-explorer安装
管理界面ibmmq-explorer安装如下:
#安装mq的界面查看工具explorer sudo dpkg -i ibmmq-explorer_9.1.5.0_amd64.deb #启动explorer /opt/mqm/bin/strmqcfg
四、常用命令
进入目录/opt/mqm。
4.1 用户管理
#修改密码,这里设置为root sudo passwd mqm #切换用户为mqm su mqm
4.2 队列管理器
#进入目录 cd /opt/mqm #创建队列管理器QUEUE_ONE_MANAGER bin/crtmqm -q QUEUE_ONE_MANAGER #启动队列管理器QUEUE_ONE_MANAGER bin/strmqm QUEUE_ONE_MANAGER #查看队列管理器 bin/dspmq #查看队列管理器详细信息 bin/dspmq -o all #查看队列管理器详细信息 bin/dspmq -o all -m QUEUE_ONE_MANAGER #查看队列管理器配置信息 bin/dspmqinf QUEUE_ONE_MANAGER #停止队列管理器 bin/endmqm QUEUE_ONE_MANAGER #删除队列管理器 bin/dltmqm QUEUE_ONE_MANAGER #选中队列管理器,进入MQSC命令,之后可在指定队列管理器上运行命令 bin/runmqsc QUEUE_ONE_MANAGER
4.3 队列
#选中队列管理器,进入MQSC命令,之后可在指定队列管理器上运行命令 bin/runmqsc QUEUE_ONE_MANAGER #创建本地队列QUEUE_ONE define qlocal(QUEUE_ONE) #创建本地队列QUEUE_ONE, usage表示队列用法,normal:本地队列 xmitq:传输队列 define qlocal(QUEUE_TR) usage(xmitq) #查看本地队列QUEUE_ONE display qlocal(QUEUE_ONE) #修改本地队列QUEUE_ONE alter qlocal(QUEUE_ONE) maxmsgl(10) #删除本地队列QUEUE_ONE delete qlocal(QUEUE_ONE) #查看队列QUEUE_ONE状态 display qstatus(QUEUE_ONE) #创建远程队列 #qremote:远程队列名称,一般与rename相同 #rename:远程队列管理器中的本地队列 #rqmname:远程队列管理器 #xmitq:使用的传输队列 define qremote(QUEUE_TWO) rename(QUEUE_TWO) rqmname(QUEUE_TWO_MANAGER) xmitq(QUEUE_TR) #停止MQSC end
其他类型队列有:
qlocal:本地队列 qremote:远程队列 qalias:别名队列 qmodel:模型队列
4.4 通道
#选中队列管理器,进入MQSC命令,之后可在指定队列管理器上运行命令 bin/runmqsc QUEUE_ONE_MANAGER #创建发送通道 #channel:通道名称 #chltype: 通道类型,sdr/rcvr/svr/rqstr/clussdr/clusrcvr #conname:连接名称,格式: ip(port) #xmitq:传输队列 #trptype:协议类型 define channel(ONE_TWO_CHL) chltype(sdr) conname('127.0.0.1(9003)') xmitq(QUEUE_TR) trptype(tcp) #创建接收通道 define channel(ONE_TWO_CHL) chltype(RCVR) #查看通道 display channel(ONE_TWO_CHL) #删除通道 delete channel(ONE_TWO_CHL) #启用通道 start channel(ONE_TWO_CHL) #停止通道 stop channel(ONE_TWO_CHL) #重置通道 reset channel(ONE_TWO_CHL) #测试通道 ping channel(ONE_TWO_CHL) #修改通道 alter channel(ONE_TWO_CHL) #解决通道争议 resolve channel(ONE_TWO_CHL)
4.5 消息
#进入目录 cd /opt/mqm/samp/bin #放消息,注意 bin/amqsput QUEUE_ONE QUEUE_ONE_MANAGER #取消息 bin/amqsget QUEUE_ONE QUEUE_ONE_MANAGER #读消息,但不取消息,消息仍在队列中 bin/amqsbcg QUEUE_ONE QUEUE_ONE_MANAGER
4.6 字符集
#选中队列管理器,进入MQSC命令,之后可在指定队列管理器上运行命令 bin/runmqsc QUEUE_ONE_MANAGER #查看当前字符集, ccsid为1208即为utf-8编码, 1386为gbk编码 819: ISO-8859-1:Latin-1 countries display qmgr ccsid #修改字符集 alter qmgr ccsid(1386)
五、消息发送
5.1 消息完整发送流程
5.2 消息完整发送流程示例
这里示例消息远程发送,从队列管理器QUEUE_ONE_MANAGER的远程队列QUEUE_TWO,发送消息到队列管理器QUEUE_TWO_MANAGER的本地队列QUEUE_TWO。
5.2.1 接收端
crtmqm QUEUE_TWO_MANAGER strmqm QUEUE_TWO_MANAGER runmqsc QUEUE_TWO_MANAGER define ql(QUEUE_TWO) define channel(ONE_TWO_CHL) chltype (RCVR) trptype (TCP) alter listener(system.default.listener.tcp) trptype(tcp) port(9004) start listener(system.default.listener.tcp)
5.2.2 发送端
crtmqm QUEUE_ONE_MANAGER strmqm QUEUE_ONE_MANAGER runmqsc QUEUE_ONE_MANAGER define qlocal(QUEUE_TR) usage (xmitq) define qremote(QUEUE_TWO) rname (QUEUE_TWO) rqmname(QUEUE_TWO_MANAGER) xmitq (QUEUE_TR) define channel(ONE_TWO_CHL) chltype(sdr) conname('127.0.0.1(9004)') xmitq(QUEUE_TR) trptype(tcp) start channel(ONE_TWO_CHL)
5.3 测试
5.3.1 发送端
进入发送命令行:
samp/bin/amqsput QUEUE_TWO QUEUE_ONE_MANAGER
输入:
hello,nice to meet you study hard make progress everyday
5.3.2 接收端:
进入接收命令行:
samp/bin/amqsget QUEUE_TWO QUEUE_TWO_MANAGER
输出:
message <hello,nice to meet you> message <study hard > message <make progress everyday>
六、备注
6.1 常见问题
6.1.1 code2058
报错:放或取消息时,报错,MQCONNX ended with reason code 2058 原因:队列名没有大写 解决:操作队列时改为大写
6.1.2 code2035
报错:放或取消息时,报错,MQCONNX ended with reason code 2035 原因:用户没在mqm组 解决:切换为mqm用户或把当前用户加入mqm组
6.2 相关示例查看
官网示例具体流程,
接收方如下:
#消息接收方receiver: crtmqm QM_APPLE strmqm QM_APPLE runmqsc QM_APPLE define ql(Q1) define channel (QM_ORANGE.QM_APPLE) chltype (RCVR) trptype (TCP) alter listener(system.default.listener.tcp) trptype(tcp) port(9002) start listener(system.default.listener.tcp) ./amqsget Q1 QM_APPLE
发送方如:
#消息发送方sender: crtmqm QM_ORANGE strmqm QM_ORANGE runmqsc QM_ORANGE define qlocal(QM_APPLE) usage (xmitq) define qremote (Q1) rname (Q1) rqmname(QM_APPLE) xmitq (QM_APPLE) define channel(QM_ORANGE.QM_APPLE) chltype(sdr) conname('127.0.0.1(9002)') xmitq(QM_APPLE) trptype(tcp) start channel(QM_ORANGE.QM_APPLE) ./amqsput Q1 QM_ORANGE
本文由一叶发布,不代表一叶立场,转载联系作者并注明出处:https://yiyeo.com/jishu/121.html