前言
首先介绍一下MQ
MQ消息队列的简称是一种应用程序对应用程序的通信方法。说白了也就是通过队列的方式来对应用程序进行数据通信。而无需专用链接来链接它们。
MQ的通讯方式
1.数据报的方式 Datagram (Send and forget)
应用程序在创建完消息后。利用MQ的API将消息发送到队列中。它充分利用了MQ(once and once only )
2.请求和应答方式 Request/Reply
发送消息之后需等待对方处理结果。 需考虑如下问题:
a.等待应答的时间是多少?
b.如果没有应答怎么办。
c.本次session是否需要保留?
MQ的开发流程
1.让应用程序与队列管理器链接,通过MQconnect调用来进行此链接。
2.使用MQOpen调用为输出打开一个队列
3.应用程序使用MQPut调用将其数据放到队列上。
4.调用MQOpen调用打开输入队列
5.使用MQGet从队列上接收数据
MQ安装组件(linux)
- Runtime(MQSeriesRuntime),运行时环境,必须安装(客户端和服务器端都需要)
- Server(MQSeriesServer),运行队列管理器和提供消息队列服务,服务器端需要
- Client(MQSeriesClient),MQ的很小的功能子集,连接Server组件,不提供队列管理器
- SDK(MQSeriesSDK),开发需要,用来编译应用程序
- Sample programs,示例程序
- Java messaging(MQSeriesJava),支持Java消息服务功能(JMS)
- Man pages,帮助文档,提供control命令,MQI命令,MQSC命令帮助
- Java JRE,必须,Java运行时,支持MQ部分Java编写的功能
- Message Catalogs,支持的语言
- Global Security Kit,支持加密安全认证功能,必须先安装JRE
- Telemetry Service(MQSeriesXRService),遥感通信MQTT协议,支持传感器等设备连接通信
- MQ Explorer,管理监控MQ
- Managed File Transfer,文件传输
- Advanced Message Security,更高级的安全保护,必须安装JRE和Security Kit
- AMQP Service,提供AMQP通道,支持MQ Light APIs
1.下载mq软件包并且创建相关用户组
可在IMB官网搜索并且下载对应的版本
组:mqm 600 用户:mqm 600
安装 rpm 包时,系统会自动以此用户的名义安装,-d参数-为指定家目录。
用户ID和组ID最好指定,因为在双机安装过程中,需要保持主备机mqm用户和组的ID号一致。
Python
#groupadd -g 600 mqm
#useradd -u 600 -d /var/mqm -g mqm mqm
1
2
3
#groupadd -g 600 mqm
#useradd -u 600 -d /var/mqm -g mqm mqm
2.安装介质准备
将 MQ 安装包上传到 /soft 目录里并解压
Python
#tar -zxvf WSMQ_8.0_IFR_TRIAL_LNX_ON_X86_64_.tar.gz
1
#tar -zxvf WSMQ_8.0_IFR_TRIAL_LNX_ON_X86_64_.tar.gz
解压出的安装目录里面,有许多rpm包以及License文件
3.运行MQ许可认证程序
Python
#./mqlicense.sh
1
#./mqlicense.sh
在图形界面客户端上,MQ 会显示一个许可证窗口,选择同意即可。
在文本界面客户端上,MQ 会询问用什么语言显示许可证,按“2”是英语。显示许可证后,再按“1”同意许可证。或者追加-text_only
Python
#./mqlicense.sh -text_only
1
#./mqlicense.sh -text_only
4.安装软件包
MQ安装软件包可有选择性的进行最小化安装,也可将所有组件全部进行安装。
1)进入到MQ安装介质的解压目录
Python
#rpm -ivh *.rpm
1
#rpm -ivh *.rpm
以上语句,即可将所有rpm包打上
如果仅仅是作为服务器使用,可只安装下面的三个包就足够了。其它的MQ组件可以按需求安装
Python
#rpm -ivh MQSeriesRuntime-7.1.0-3.x86_64.rpm
#rpm -ivh MQSeriesSDK-7.1.0-3.x86_64.rpm
#rpm -ivh MQSeriesServer-7.1.0-3.x86_64.rpm
1
2
3
4
5
#rpm -ivh MQSeriesRuntime-7.1.0-3.x86_64.rpm
#rpm -ivh MQSeriesSDK-7.1.0-3.x86_64.rpm
#rpm -ivh MQSeriesServer-7.1.0-3.x86_64.rpm
rpm -ivh MQSeriesServer-7.1.0-3.x86_64.rpm安装之后出现提示要验证系统配置是否符合要求。
根据提示我们可输入并且确认。
Python
su -c mqm "/opt/mqm/bin/mqconfig"
1
su-cmqm"/opt/mqm/bin/mqconfig"
2)为稳妥起见,可将所有标为“FAIL”的检测项调整到“PASS”;例如,我们可以修改 /etc/sysctl.conf文件,添加或修改其中的一些值:
Python
kernel.sem = 500256000 250 1024
fs.file-max = 524288
net.ipv4.tcp_keepalive_time= 300
1
2
3
4
5
kernel.sem=5002560002501024
fs.file-max=524288
net.ipv4.tcp_keepalive_time=300
要立即使这些 sysctl 值生效,输入命令 sysctl–p 即可。
然后打开/etc/security/limits.conf文件,添加或修改如下配置,设置mqm用户的最大文件打开数限制:
Python
mqm hard nofile 10240
mqm soft nofile 1024
1
2
3
mqmhardnofile10240
mqmsoftnofile1024
3)修改完毕之后,重新运行su mqm -c "/opt/mqm/bin/mqconfig"确认我们的修改已经生效,然后就可以进行下一步
安装完成之后,系统会自动生成两个目录
/opt/mqm目录是用来存放MQ的软件安装文件
/var/mqm目录是用来存放MQ的数据文件
2)添加PATH路径
为mqm用户添加执行mq命令的PATH路径,编辑mqm用户的profile文件,将以下语句加入
Python
export PATH=$PATH:/opt/mqm/bin
1
exportPATH=$PATH:/opt/mqm/bin
5.为用户授予MQ权限
创建一个普通用户,若需要赋予它mq权限,只需将用户加入到mqm组即可,已知用户可用usermod命令
权限要求:普通用户必须属于mqm组,才有权限运行相关管理命令.
Python
#useradd -g mqm pmts
1
#useradd -g mqm pmts
并且将mqm的PATH路径加入到新建用户的profile文件
6.测试队列管理器和队列
1)切换至 /opt/mqm/samp/bin 目录,这是样本程序的目录。
2)使用下列命令将消息放入队列:
Python
./amqsput NEAREAST.QUEUE
1
./amqsputNEAREAST.QUEUE
显示下列消息:
样本 AMQSPUT0 启动
目标队列是NEAREADT.QUEUE
3)输入一些文本消息,可以敲回车输入换行,连敲两次回车则发送该消息(或按ctrl+d输入结束符),然后提示:
样本 AMQSPUT0 结束
现在消息已经放入了队列中,并且操作回到命令提示符。
4)要从队列取出消息,请使用下列命令:
Python
./amqsget NEAREAST.QUEUE
1
./amqsgetNEAREAST.QUEUE
样本程序启动并显示刚才发送的消息。暂停之后,样本结束并回到命令提示符。
如果上述步骤都顺利完成,则说明MQ的服务安装成功了。
7.MQ的常用操作
1)创建队列管理器QM,并设置队列管理器的日志空间大小为16384,主日志数量为20,次日志数量为2
Python
$crtmqm -lf 16384 -lp 20 -ls2 QM
1
$crtmqm-lf16384-lp20-ls2QM
2)启动队列管理器
Python
$strmqm QM
1
$strmqmQM
3)停止队列管理器
-i参数指定立即停止,-p参数指定强制停止,一般我们使用立即停止
Python
$endmqm -I QM
1
$endmqm-IQM
4)进入队列管理器
Python
$runmqsc QM
1
$runmqscQM
5)查看队列管理器QM的通道状态
Python
$runmqsc QM
dis chs(*)
1
2
3
$runmqscQM
dischs(*)
6)设置队列管理器CCSID
CCSID即队列管理器使用的字符编码
819 指ISO 8859-1
1208指utf-8编码
1306指gbk编码
Python
alter qmgr ccsid(1306)
1
alterqmgrccsid(1306)
7)常用队列管理命令:
注:前提是首先运行runmqsc启动MQSC。
显示特定队列如Q1的信息:
dis q(Q1)
显示队列管理器中的所有队列的信息:
dis q(*)
删除队列Q1
delete qlocal(Q1)
禁用特定队列如Q1上的put操作:
alter ql(Q1) put(disabled)
将队列管理器的死信队列更改为 SYSTEM.DEAD.LETTER.QUEUE
alter qmgr deadq(SYSTEM.DEAD.LETTER.QUEUE)