这是我的问题。
我正在使用 IBM MQ V7.1
的试用版。我已经创建了一个队列管理器 MYQM
,一个 channel MY_SVRCONN
和 MCA User Id abc
。我已向用户提供 abc
以访问 MYQM
。我正在尝试将消息放入队列 Q1
。但是在获得队列连接时,我遇到了异常。
com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2013: The security authentication was not valid that was supplied for QueueManager 'MYQM' with connection mode 'Client' and host name '(1500)'. Please check if the supplied username and password are correct on the QueueManager to which you are connecting.
我使用下面的命令允许用户 abc 访问 MYQM
。
[mqm@localhost ~]$ setmqaut -m MYQM -t qmgr -p abc +connect
The setmqaut command completed successfully.
这是我的Java程序
public class MqPut
{
public static void main(String[] args)
{
sendMsg("Sample Message");
}
public static void sendMsg(String msg)
{
MQQueueConnectionFactory connectionFactory = null;
QueueConnection queueConn = null;
QueueSession queueSession = null;
QueueSender queueSender = null;
TextMessage message = null;
try
{
connectionFactory = new MQQueueConnectionFactory();
connectionFactory.setHostName(<MQ SERVER IP>);
connectionFactory.setPort(1500);
connectionFactory.setTransportType(WMQConstants.WMQ_CLIENT_NONJMS_MQ);
connectionFactory.setQueueManager("MYQM");
connectionFactory.setChannel("MY_SVRCONN");
queueConn = connectionFactory.createQueueConnection("abc","password");
queueSession = queueConn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
queueSender = queueSession.createSender(queueSession.createQueue("Q"));
queueSender.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
message = queueSession.createTextMessage(msg);
queueSender.send(message);
queueConn.close();
}
catch (Exception je)
{
je.printStackTrace();
}
}
}
我试过 WebSphere 7, configuring JMS Q connection factory without user id: MQRC_NOT_AUTHORIZED ,但我的问题仍然存在。我没有明白我做错了什么。感谢您的帮助。
编辑
用户 abc 不属于 mqm 组
最佳答案
你给svrconn channel 的用户设置chlauth( channel 认证)了吗? channel 身份验证是从 MQ 7.1 开始新增的。密码验证仅适用于 MQ 8。基本上,您需要在 qmgr svrconn channel 上允许来自您的客户端 IP 的远程连接。
在mqsc控制台试试 SET CHLAUTH(MY_SVRCONN) TYPE(ADDRESSMAP) ADDRESS(客户端机器的ip) USERSRC(CHANNEL)
如果这不起作用,请检查 qmgr 日志。它应该准确说明导致 2035 的原因。 在这里可以找到很好的技术说明 http://www-01.ibm.com/support/docview.wss?uid=swg21577137 Morag 非常有用的博客 https://www.ibm.com/developerworks/community/blogs/aimsupport/entry/blocked_by_chlauth_why?lang=en
关于java - 尝试访问 IBM MQ 中的队列时出现 DetailedJMSSecurityException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26827487/