IBM websphere通道联通搭建和测试

简介

消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。

IBM WebSphere MQ 产品支持应用程序通过不同组件如处理器、子系统、操作系统以及通信协议的网络彼此进行通信。例如,IBM WebSphere MQ 支持 35 种以上的不同操作系统。

IBM WebSphere MQ 支持两种不同的应用程序编程接口:Java 消息服务(JMS)和消息队列接口(MQI)。在 IBM WebSphere MQ 服务器上,JMS 绑定方式被映射到 MQI。如图 3所示,应用程序直接与其本地队列管理器通过使用 MQI 进行对话,MQI 是一组要求队列管理器提供服务的调用。MQI 的引人之处是它只提供 13 次调用。这意味着对于应用程序编程员它是一种非常易于使用的接口,因为大部分艰苦工作都将透明完成的。
在这里插入图片描述
上图 显示了 IBM WebSphere MQ 编程的原理。

  1. 第一步是让应用程序与队列管理器连接。它通过 MQConnect 调用来进行此连接。
  2. 下一步使用 MQOpen 调用为输出打开一个队列。
  3. 然后应用程序使用 MQPut 调用将其数据放到队列上。
  4. 要接收数据,应用程序调用 MQOpen 调用打开输入队列。应用程序使用 MQGet 调用从队列上接收数据。

图中还显示了消息通道代理(MCA)、通道出口和对象权限管理器(OAM)。
5. MCA 是 IBM WebSphere MQ 程序,它使用现有传输服务诸如 TCP/IP 与 SNA 将消息从本地传输队列移到目标队列管理器。这些传输服务即通道。通道出口是用户写入库,可以在通道运作期间,从已定义位置号之一进入这些库。
6. OAM 是命令和对象管理的缺省授权服务(针对操作系统)。这三个组件对 IBM WebSphere MQ 的现有安全性解决方案非常重要。

mq安装

window安装

下载mq地址:https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/messaging/mqadv/
下载mqadv_dev924_windows.zip 解压安装。
安装完成后右侧工具栏ibmmq图表处于正在启动中,打开ibmmq资源管理器
在这里插入图片描述
进入ibmmq资源管理器后,可右键创建一个队列管理器(除名字外,其他默认):input01
或者通过命令行创建,注意cmd要管理员运行

D:\Program Files\IBM\MQ\bin64>crtmqm -q input01
已创建 IBM MQ 队列管理器“input01”。
已创建目录“D:\ProgramData\IBM\MQ\qmgrs\input01”。
队列管理器与安装“Installation1”关联。
正在创建或替换队列管理器“input01”的缺省对象。
缺省对象统计:86 个已创建。0 个已替换。0 个已失败。
正在完成设置。
设置完成。

D:\Program Files\IBM\MQ\bin64>strmqm input01
IBM MQ 队列管理器“input01”正在启动。
队列管理器与安装“Installation1”关联。
在日志重放阶段在队列管理器“input01”上访问了 6 条日志记录。
完成队列管理器“input01”的日志重放。
为队列管理器“input01”恢复了事务管理器状态。
已启用纯文本通信。
使用 V9.2.4.0 启动了 IBM MQ 队列管理器“input01”。

D:\Program Files\IBM\MQ\bin64>endmqm  -i input01
IBM MQ 队列管理器‘input01’正在结束。
IBM MQ 队列管理器‘input01’已结束。

D:\Program Files\IBM\MQ\bin64>dltmqm  input01
IBM MQ 队列管理器‘input01’已删除。

在这里插入图片描述

执行runmqsc可以对队列管理器执行MQSeries命令

PS D:\Program Files\IBM\MQ\bin64> runmqsc input01
5724-H72 (C) Copyright IBM Corp. 1994, 2021.
启动队列管理器 input01 的 MQSC。


display channel(*)
     1 : display channel(*)
AMQ8414I: 显示通道细节。
   CHANNEL(SYSTEM.AUTO.RECEIVER)           CHLTYPE(RCVR)
AMQ8414I: 显示通道细节。
   CHANNEL(SYSTEM.AUTO.SVRCONN)            CHLTYPE(SVRCONN)
AMQ8414I: 显示通道细节。
   CHANNEL(SYSTEM.DEF.AMQP)                CHLTYPE(AMQP)
AMQ8414I: 显示通道细节。
   CHANNEL(SYSTEM.DEF.CLUSRCVR)            CHLTYPE(CLUSRCVR)
AMQ8414I: 显示通道细节。
   CHANNEL(SYSTEM.DEF.CLUSSDR)             CHLTYPE(CLUSSDR)
AMQ8414I: 显示通道细节。
   CHANNEL(SYSTEM.DEF.RECEIVER)            CHLTYPE(RCVR)
AMQ8414I: 显示通道细节。
   CHANNEL(SYSTEM.DEF.REQUESTER)           CHLTYPE(RQSTR)
AMQ8414I: 显示通道细节。
   CHANNEL(SYSTEM.DEF.SENDER)              CHLTYPE(SDR)
AMQ8414I: 显示通道细节。
   CHANNEL(SYSTEM.DEF.SERVER)              CHLTYPE(SVR)
AMQ8414I: 显示通道细节。
   CHANNEL(SYSTEM.DEF.SVRCONN)             CHLTYPE(SVRCONN)
AMQ8414I: 显示通道细节。
   CHANNEL(SYSTEM.DEF.CLNTCONN)            CHLTYPE(CLNTCONN)

linux安装

docker仓库地址:https://hub.docker.com/r/ibmcom/mq/
该镜像的默认用户是admin,密码是 passw0rd

docker pull ibmcom/mq

启动IBM MQ服务端

docker run  --env LICENSE=accept --env MQ_QMGR_NAME=QM1 --publish 1414:1414 --publish 9443:9443 --detach --network host ibmcom/mq

查看连接信息

进入docker
在这里插入图片描述
安装完成后可通过web管理器查看:
https://10.10.0.115:9443/ibmmq/console/#/
查看队列管理器(容器内执行)

bash-4.4$ dspmq
QMNAME(QM1) STATUS(Running)

查看可连接通道
在这里插入图片描述

进入客户端
runmqsc
执行命令
display channel(*)

默认的用户名和密码
该镜像的默认用户是admin,密码是 passw0rd

使用window MQ资源管理器管理

服务器ip:你docker安装mq的ip地址
通道名称:DEV.ADMIN.SVRCONN
账号密码:admin/passw0rd
队列管理器名称:QM1
有了以上四个要素后,可使用window队列管理器管理远程队列管理
右键队列管理器-》添加远程队列管理器
在这里插入图片描述
输入队列管理器名称(注意名称必须和远程队列管理器名称相同,名称对不上会无法完成链接)
在这里插入图片描述

输入服务器主机和通道(注意SVRCONN类型是服务器连接通道)
在这里插入图片描述
下两步,选择启用用户标识,输入用户名
在这里插入图片描述
点击完成,输入密码
在这里插入图片描述
创建完成后菜单显示
在这里插入图片描述

常用工具和命令

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命令

进去交互命令行:runmqsc 队列管理器名称

定义死信队列 
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
重置通道
reset chl('JZKJ.TO.CAINIAO_YW')
显示所有通道
display channel(*)
显示队列的所有属性 
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)

通道搭建

通道连接基本过程
在这里插入图片描述
远程队列的定义包含:

  1. 目标队列的位置
    设定目标队列名和队列管理器名
  2. 传输路径
    设定传输队列名
    在这里插入图片描述

搭建流程

推荐使用两个linux,使用相同ibmmq的版本搭建
1.安装两个ibmmq分别创建两个队列管理器QM_LINUXSENDER,另一个为:QM_LINUX。
2.QM_LINUXSENDER作为发送方,QM_LIUNUX作为接收方
3. QM_LINUXSENDER上新建远程队列指定接收方队列管理器为:QM_LINUX,目标队列:Q.LOCAL,传输队列为:Q.TRANSFER
4. 新建发送方通道SC.WINDOW.LINUX关联传输队列:Q.TRANSFER,输入传输目标服务器的ip和端口:注意格式是:ip(端口),我这里是10.10.0.115(1414)
5. 新建传输队列:Q.TRANSFER
6. 新建接收方通道SC.WINDOW.LINUX注意和发送方通道名称一致,因为对于连接通道来说,这两个是绑定在一起的,因为远程队列已经指定了目标队列管理器和名称,所有接收方通道只需要和名字发送方通道保持一致即可,什么都无需关联,由发送方关联好就行。
7. QM_LINUX新建本地队列Q.LOCAL

在这里插入图片描述

队列管理器搭建(测试环境)

创建队列管理器

docker run  --env LICENSE=accept --env MQ_QMGR_NAME=QM_LINUX --publish 1414:1414 --publish 9443:9443 --detach --network host ibmcom/mq:9.1.5.0-r2-amd64
docker run  --env LICENSE=accept --env MQ_QMGR_NAME=QM_LINUXSENDER --publish 1414:1414 --publish 9443:9443 --detach --network host ibmcom/mq:9.1.5.0-r2-amd64
新建远程队列

QM_LINUXSENDER上新建远程队列:Q.REMOTE指定接收方队列管理器为:QM_LINUX,目标队列:Q.LOCAL,传输队列为:Q.TRANSFER
队列管理器-》队列-》新建-》远程队列定义
在这里插入图片描述

输入关联信息
在这里插入图片描述

新建发送方通道

右键-》通道-》新建-》发送方通道
在这里插入图片描述

新建发送方通道SC.WINDOW.LINUX关联传输队列:Q.TRANSFER,连接名称输入传输目标服务器的ip和端口:注意格式是:ip(端口),我这里是10.10.0.115(1414)
在这里插入图片描述
启动发送者通道
如果发送方通道未启动一直处于,正在重试的状态,可不予理会,等后面启动接收方通道自动连接。
在这里插入图片描述

新建传输队列

右键-》队列-》新建-》本地队列
在这里插入图片描述

新建传输队列:Q.TRANSFER,用法修改为:传输
在这里插入图片描述

新建接收方通道

注意先按照章节:使用window MQ资源管理器管理linux,远程将队列管理器加入到MQ资源管理
选择QM_LINUX队列管理器-》右键-》接收方通道
在这里插入图片描述
新建接收方通道SC.WINDOW.LINUX注意和发送方通道名称一致,配置全部默认即可
在这里插入图片描述

新建本地队列

新建本地队列Q.LOCAL
在这里插入图片描述

远程队列发送消息测试

在QM_WINDOW上Q.REMOTE上投放消息
在这里插入图片描述
放入消息:test
在这里插入图片描述

通道认证

注意这里在QM_WINDOW和QM_LINUX上发送方通道会一直处于重试状态无法连接,这里明显就是通道的认证引起的,有两种方式解决这个问题。
在这里插入图片描述

关闭通道认证

注意发送方和接收方的mq都需要关闭。
在这里插入图片描述
禁用后,mq资源管理器暂时不要断开这些远程队列管理器,因为通道认证关闭了,远程就无法连接了。
重启QM_LINUXSENDER的 SC.WINDOW.LINUX通道 发现发送方和接收方都是正常了
在这里插入图片描述
在这里插入图片描述
发送方的远程队列Q.REMOTE放入测试消息
在这里插入图片描述
此时如果放入消息会提示(因为我们关闭了通道认证)
在这里插入图片描述
此时我们可以登录到docker容器中使用命令发送和接收
我们在QM_LINXU上使用amqsget 一直不停接收消息
在这里插入图片描述
同时在QM_LINUXSENDER使用amqsput发送消息
在这里插入图片描述

基于ip通道认证

这里由于关闭了通道认证导致管理器无法连接,需要登录到容器中
runmqsc 进入交互后执行命令

ALTER QMGR CHLAUTH(ENABLED)

注意两个都要打开。
此时如果重启发送方通道后发现,一直处于正在重试阶段了
可以给发送方和接收方的队列添加一个通道认证记录,通道允许对方ip地址访问
比如在发送方。
通道认证记录邮件新建
在这里插入图片描述
选择地址:
在这里插入图片描述
输入通道名称,点击显示匹配的通道在这里插入图片描述
选择通道后下一步,输入对方的ip地址
在这里插入图片描述
固定的用户标识输入:mqm
在这里插入图片描述
后面一路默认,接收方通道也是相同的通道名称,对方的ip地址即可,只有下面的不同。
在这里插入图片描述
重新启动通道即可,发现一切正常。
右键远程队列,放入测试消息,输入你好后,点击放入消息
**加粗样式
**
接收方QLOCAL中查看消息是否正常接收,右键浏览消息
在这里插入图片描述

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值