gpt4 book ai didi

java - 从 mq 版本 7.0 迁移到 7.5

转载 作者:行者123 更新时间:2023-11-30 03:35:36 24 4
gpt4 key购买 nike

我正在从 Mq 版本 7.0 迁移到 7.5 。我能够使用 ejb - 消息驱动 Bean(MDB)通过入站队列接收消息,但在处理消息后发布消息。我收到 IBM MQRC 2082 MQRC_UNKOWN_ALIAS_BASE_Q 异常。

这是我遇到的异常:

Caused by: javax.jms.InvalidDestinationException: MQJMS2008: failed to open MQ queue 'OFS.TIG_IND2NSE_MSG'. at com.ibm.msg.client.wmq.v6.jms.internal.MQQueueServices.getQueueOpenException(MQQueueServices.java:901) at com.ibm.msg.client.wmq.v6.jms.internal.MQQueueServices.getOutputQueue(MQQueueServices.java:727) at com.ibm.msg.client.wmq.v6.jms.internal.JMSServicesMgr.getOutputQueue(JMSServicesMgr.java:210) at com.ibm.msg.client.wmq.v6.jms.internal.MQSession.createQProducer(MQSession.java:3138) at com.ibm.msg.client.wmq.v6.jms.internal.MQSession.createProducer(MQSession.java:2863) at com.ibm.msg.client.wmq.v6.jms.internal.MQSession.createProducer(MQSession.java:2920) at com.ibm.msg.client.jms.internal.JmsSessionImpl.createProducer(JmsSessionImpl.java:1191) at com.ibm.msg.client.jms.internal.JmsXAQueueSessionImpl$1.createSender(JmsXAQueueSessionImpl.java:415) at com.ibm.mq.jms.MQQueueSession.createSender(MQQueueSession.java:148) at weblogic.deployment.jms.WrappedSession.createSender(WrappedSession.java:344) at com.tiger.gmfs.framework.jms.QUtil.getSender(QUtil.java:216) at com.tiger.gmfs.framework.jms.QUtil.sendMessage(QUtil.java:110)

我写的代码是:这是我的 getSender 方法:protected QueueSender getSender() 抛出 JavaMessagingException, JMS异常{

    QueueSender sender = null;
queue = qsess.createQueue(qVO.getName());
sender = qsess.createSender(queue);
if (sender == null)
throw new JavaMessagingException("The queue sender is null.");


sender.setPriority(qVO.getPriority());
return sender;
}

这是我的 sendMessage 方法:

public void sendMessage(Message jmsMessage) throws JavaMessagingException,
JMSException {
QueueSender sender = null;
try {
sender = getSender();
sender.send(jmsMessage);
} catch (JMSException j) {
Exception l = j.getLinkedException();
if (l != null) {
JavaMessagingException be = new JavaMessagingException(
"JMSErrCode:" + l + " Code:" + j.getErrorCode()
+ " Message: " + jmsMessage, j);
throw be;
} else
throw new JavaMessagingException(j);
}catch(Exception e1){
System.out.println(e1);
}finally {

if (sender != null) {
sender.close();
TracingHelper.infoLog(QUtil.class, "sendMessage",
"Closed sender");
}
}
}

我应该在此处进行哪些更改才能使我的代码正常工作?

我已经在 jre 1.7 +weblogic 12c 中实现了相同的代码,该代码运行良好,但是当我将其更改为 jre 1.6 + weblogic 11g 时,我收到此错误。

最佳答案

从开发的角度来看,当应用程序打开队列时,开发人员必须确保使用正确的打开选项来打开 WebSphere MQ 队列。

如果应用程序想要放置消息,请使用 MQOO_OUTPUT 打开选项而不是任何 MQOO_INPUT* 选项打开队列。

如果应用程序想要获取消息,请使用以下任一打开选项打开队列,但不能同时打开所有选项MQOO_INPUT_SHAREDMQOO_INPUT_EXCLUSIVEMQOO_INPUT_AS_Q_DEF

原因是,如果要打开的队列是指向存在别名队列的同一队列管理器中的基本队列的别名队列,并且基本队列是本地队列 - OUTPUT 和 INPUT 打开选项是有效的。

但是,如果正在打开的别名队列指向远程队列或别名队列所在的同一队列管理器中的主题,或者别名队列指向不同队列管理器中存在的集群本地队列在集群中,所有 MQOO_INPUT* 打开选项在此场景下均无效。

因此,始终建议仅打开 WebSphere MQ 队列,并且仅使用正在执行的操作所需的适当打开选项。

在您的情况下,如果您尝试使用任何 MQOO_INPUT* 打开选项打开别名队列,并且它指向不同队列管理器中的集群本地队列,那么这是不正确的。您必须从代码中删除 MQOO_INPUT* 打开选项才能解决该问题,因为 MQOO_INPUT* 选项在这种情况下无效。

关于java - 从 mq 版本 7.0 迁移到 7.5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27977147/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com