我正在尝试在Spring引导中使用JMS连接到远程Enterprise MQ服务器。当我尝试连接到本地MQ时,我可以进行连接并发送消息,但相同的代码不适用于远程MQ-
Caused by: com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2013: The security authentication was not valid that was supplied for QueueManager 'MQGWD2' with connection mode 'Client' and host name 'mqcad1.sdde.deere.com(2171)'.
Please check if the supplied username and password are correct on the QueueManager to which you are connecting.
at com.ibm.msg.client.wmq.common.internal.Reason.reasonToException(Reason.java:531)
at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:215)
at com.ibm.msg.client.wmq.internal.WMQConnection.<init>(WMQConnection.java:424)
at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createV7ProviderConnection(WMQConnectionFactory.java:8475)
at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createProviderConnection(WMQConnectionFactory.java:7815)
at com.ibm.msg.client.jms.admin.JmsConnectionFactoryImpl._createConnection(JmsConnectionFactoryImpl.java:303)
at com.ibm.msg.client.jms.admin.JmsConnectionFactoryImpl.createConnection(JmsConnectionFactoryImpl.java:236)
at com.ibm.mq.jms.MQConnectionFactory.createCommonConnection(MQConnectionFactory.java:6016)
at com.ibm.mq.jms.MQQueueConnectionFactory.createQueueConnection(MQQueueConnectionFactory.java:136)
at com.ibm.mq.jms.MQQueueConnectionFactory.createConnection(MQQueueConnectionFactory.java:209)
at org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter.doCreateConnection(UserCredentialsConnectionFactoryAdapter.java:188)
at org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter.createConnection(UserCredentialsConnectionFactoryAdapter.java:162)
at org.springframework.jms.connection.SingleConnectionFactory.doCreateConnection(SingleConnectionFactory.java:428)
at org.springframework.jms.connection.SingleConnectionFactory.initConnection(SingleConnectionFactory.java:353)
at org.springframework.jms.connection.SingleConnectionFactory.getConnection(SingleConnectionFactory.java:328)
at org.springframework.jms.connection.SingleConnectionFactory.createConnection(SingleConnectionFactory.java:243)
at org.springframework.jms.support.JmsAccessor.createConnection(JmsAccessor.java:197)
at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:494)
... 53 more
Caused by: com.ibm.mq.MQException: JMSCMQ0001: IBM MQ call failed with compcode '2' ('MQCC_FAILED') reason '2035' ('MQRC_NOT_AUTHORIZED').
at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:203)
请注意,对于本地MQ服务器,我使用-admin、passw0rd作为默认设置的凭据。
对于Enterprise MQ,我们创建了一个应用程序ID,并使用该appID获得了对MQ的访问权限。
在进入队列时,我会给出所有的详细信息——队列管理器、主机、端口、通道、队列名称和用户名(appID)以及密码。
我的问题是,相同的代码也适用于本地队列,但当我访问远程队列时,会被未经授权。此外,我们没有获得远程MQ的任何错误日志,因此很难调试出现未授权错误的原因。有人能在这方面帮忙吗?任何投入都会非常有帮助。当我们访问远程MQ时会发生什么变化?
我只有两个文件-
特性-
ibm.mq.queueManager=QM1
ibm.mq.channel=DEV.ADMIN.SVRCONN
ibm.mq.connName=localhost(1414)
ibm.mq.user=admin(this is replaced by appID when I hit remote MQ)
ibm.mq.password=passw0rd(pwd for appID in case of remote MQ)
创建了一个测试控制器-
@EnableJms
@Component
@RestController
public class SendMessage {
@Autowired
JmsTemplate jmsTemplate;
@GetMapping("send")
String send(){
try{
jmsTemplate.convertAndSend("DEV.QUEUE.1", "Hello World!");
return "OK";
}catch(JmsException ex){
return "FAIL";
}
}