我想在 WebSphere MQ 服务器上创建一个队列管理器和一个队列,并且我想做两件事
1) 使用 WMQ Explorer 从客户端访问队列管理器和队列
2) 编写一个在客户端上运行的 Java 独立应用程序,并从队列中放入和接收消息。
但是我遇到了身份验证异常。请让我知道我做错了什么?
Linux 服务器盒:
我安装了 WebSphere MQ v7.1
队列管理器QM_TEST
创建(crtmqm
, strmqm
命令)
本地队列Q_TEST
创建(runmqsc
和define qlocal
)
SVRCONN 通道定义(DEFINE CHANNEL (TEST_CHANNEL) CHLTYPE (SVRCONN) TRPTYPE (TCP)
)
启动了一个监听器(runmqlsr -t tcp -m QM_TEST -p 1414
)
Linux 客户端盒:
尝试使用主机名、IP 地址、队列管理器名称和通道名称显示/隐藏队列管理器;但是我收到以下错误:
Access not permitted. You are not authorized to perform this operation. (AMQ4036)
Severity: 10 (Warning)
Explanation: The queue manager security mechanism has indicated that the userid associated with this request is not authorized to access the object.
尝试使用java代码访问队列管理器和队列,重点如下:
public void sendMail(Mail mail) { MQConnectionFactory cf = new
MQQueueConnectionFactory(); Connection conn = null; try { //config
cf.setHostName("hostname"); cf.setPort(1414);
cf.setQueueManager("QM_TEST"); cf.setChannel("TEST_CHANNEL");
cf.setTransportType(WMQConstants.WMQ_CM_CLIENT);//WMQ_CM_DIRECT_TCPIP);
WMQ_CM_CLIENT
conn = cf.createConnection(); //fails here
但是我收到以下错误:
发生错误:JMSWMQ2013:安全身份验证无效
为具有连接模式的 QueueManager 'QM_TEST' 提供
“客户端”和主机名“主机名(1414)”。
你能帮我吗?如何传递安全认证信息?现在,如果我也可以禁用安全性就可以了。只需要让这个工作?
如果我需要提供更多信息,请告诉我。
UPDATE:
我创建了“mq-user”linux 用户(mq-users 组)。 CHLAUTH 已启用(默认)。
创建队列管理器 QM_TEST (使用 sudo mqm)后,我使用 sudo mqm 再次执行以下 mqsc 命令:
DEFINE QLOCAL(TEST_QUEUE)
SET AUTHREC PROFILE('TEST_QUEUE') OBJTYPE(QUEUE) PRINCIPAL('mq-user') AUTHADD(PUT,GET)
SET AUTHREC OBJTYPE(QMGR) PRINCIPAL('mq-user') AUTHADD(CONNECT)
DEFINE CHANNEL (TEST_CHANNEL) CHLTYPE (SVRCONN) TRPTYPE (TCP)
SET CHLAUTH(TEST_CHANNEL) TYPE(ADDRESSMAP) ADDRESS('xxx.xx.xxx.*') MCAUSER('mq-user')
DEFINE LISTENER (TEST_LISTENER) TRPTYPE (TCP) CONTROL (QMGR) PORT (1414)
START LISTENER (TEST_LISTENER)
我仍然收到 AMQ4036 access not allowed 错误。请注意,我从以第三个用户身份登录的第三台远程计算机(客户端计算机)访问队列管理器和队列。不过我意识到我可以传递“mq-user”凭据。我希望在某个地方有明确的分步说明,WebShere MQ 71。信息中心对我来说还不够清楚。
这里还缺少什么?