IBM MQ 笔记(二)

IBM MQ 笔记(二)

引子

前几天由于工作原因刚学了 IBM MQ 的基本使用 , 等到在工作中上手的时候发现 IBM MQ 怎么都连接不上 , 查看日志发现一直在提示 MQCONN ended with reason code 2035 , 查了下这个错误发现是由于用户没有操作原因导致的 , 因此在这里记录下解决办法 , 同时也对 MQ 通信的几种方式做一个简单的总结。

2035 错误

其实最开始并不是报 2035 错误 , 最开始日志都没有打印 , 场面一度十分尴尬 , 后来经过同事排查发现是软件启动时需要的一个 so 文件引用为空 , 将问题解决后 , 再重启软件才在日志中看到这个错误。

2035 错误是指用户没有权限[1] , 当时的情况是 , 我在本地的 Linux 虚拟机上新建了一个 MQ , 之后通过将新建的 MQ 的队列、通道、ip、端口告诉了客户端(我测试的软件) , 在客户端发起连接的时候 , 被 MQ 拒绝了 , 因此当我查看客户端打印的日志的时候 , 上面提示 2035 错误 , 即客户端没有权限连接 MQ 。

后来通过查询发现在给 MQ 建立通道的时候 , 需要将通道的 MACUSER 参数设置为 mqm , mqm 是客户机投印在本地 MQ 的用户 , 在 Linux 上安装 MQ 时 , 都会默认新建这么一个用户 , 因此我通过命令

ALTER CHANNEL(QM_CHANNEL) CHLTYPE(SVRCONN) MCAUSER(‘mqm’)

为通道设置 MCAUSER 参数 , 这里有一个需要注意的点是 mqm 用户需要在 mqm 分组里 , 只有在 mqm 分组中的用户才有权限操作 MQ。ps: 可以通过 cat /etc/group 查看分组 , 通过 cat /etc/passwd 查看用户

在进行完这一系列设置后, 我重启客户端软件 , 发现日志中还是报错 , 依旧是 2035 错误 , 通过万能的搜索引擎 , 终于让我找到了解决办法[2],[3]。

由于我使用的 MQ 版本是 7.5 , 在 MQ 7.5 以后引入了一个通道认证记录 , 这个通道认证记录在创建 MQ 的时候是默认开启的 , 这个通道认证记录的作用相当于对连接 MQ 的客户机做一层认证 , 即:只有在通道认证记录里面进行过认证的客户机 , 才能被允许连接 MQ , 知道这个后 , 我选择最简单粗暴的方法 , 通过命令

ALTER QMGR CHLAUTH(DISABLED)

将通道认证记录关闭 , 再次重启客户机 , 连接成功。

MQ 通信方式

这里我总结的信息 , 主要是参考了最后参考资料 [4] 那篇博客 , 感兴趣的可以去那篇博客里看具体的操作方法。

单机测试

单机测试顾名思义 , 就是新建一个队列 , 我将信息塞到这个队列里去后 , 我再将信息从这个队列里取出来。具体如何 put 和 get , 可以参考我的上一篇博文。

两个 MQ 通信测试

这种通信方式即新建两个 MQ, 在 MQ_SEND 的队列中 put 信息 , 之后能从 MQ_REC 中将 put 到 MQ_SEND 中的信息取出来。具体如何操作 , 也可以参考我的上一篇博文。

客户机-服务器通信

这种通信方式为通过客户机连接服务器 MQ , 在客户机上将信息塞进服务器 MQ 的队列中 , 之后我们能从服务器 MQ 上进行 get 操作将信息取出。注意这里的 put 操作发生在客户机上 , get 操作发生在服务器上。

参考资料

[1]. webSphere MQ使用(2035错误)

[2].Websphere MQ 8.0 解决客户机连接报2035错误码

[3].MQ7.5以后的权限问题解决

[4].[M WebSphere MQ 系列(三)配置和使用WebSphere MQ

你可能感兴趣的:(mq)