【发布时间】:2012-06-29 03:10:17
【问题描述】:
我正在尝试在 weblogic 10r3 服务器上调试 web 应用程序 hostde。该应用正在通过 Java 消息驱动 Bean 接收来自外部 IBM JMS 队列(类名:com.ibm.mq.jms.MQQueue)的输入。
我编写了一个小型测试应用程序来连接到该队列并发送测试消息。现在的问题是测试消息生成异常,并且以某种方式它被放回队列并一次又一次地循环。这会产生很多异常,导致日志不可读。
首先,我尝试通过在我的测试应用程序上构建消费者来删除有害消息,但代码在consumer.receive() 上无限期阻塞。
然后我尝试将JMSexpiration 设置为某个数字而不是默认的 0,但最终消息仍然使用 0 作为过期。
欢迎所有想法,非常感谢
代码概述了 JMS 生产者:
static String rawTradeUpload = "some long chunk of data"
Hashtable ht = new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY,
weblogic.jndi.WLInitialContextFactory.class.getName());
//ht.put(Context.PROVIDER_URL, "t3://gprimeap1d.eur.nsroot.net:12016");
ht.put(Context.PROVIDER_URL, "t3://gprimeap1d.eur.nsroot.net:12001");
ht.put(Context.SECURITY_PRINCIPAL, "weblogic");
ht.put(Context.SECURITY_CREDENTIALS, "welcome5");
Connection con = null;
Session s = null;
try {
if(ctx == null)
ctx = new InitialContext(ht);
ConnectionFactory myConnFactory = null;
Queue myQueue = null;
myConnFactory = (ConnectionFactory) ctx
.lookup("SwiftConnectionFactory");
con = myConnFactory.createConnection();
s = con.createSession(false, Session.AUTO_ACKNOWLEDGE);
myQueue = (Queue) ctx
.lookup("IncomingSwiftFxQueue");
MessageProducer producer = s.createProducer(myQueue);
Message msg = s.createTextMessage(rawTradeUpload);
producer.send(msg);
s.close();
con.close();
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
【问题讨论】:
-
您能否发布一些创建消息并将消息写入队列的代码部分?
-
嘿凯文,这是生产者的代码,我也写了一个消费者和队列浏览器。它都是从同一个会话创建的
-
感谢 Peter 和 Zahir,我将向 MQ 团队咨询有关回退队列设置的问题。
标签: java jms weblogic message-queue ibm-mq