当我将消息注入队列时,我得到以下异常,每次注入第512条消息时都会发生这种情况,之前的511注入正常:
Exception in thread "main" javax.jms.ResourceAllocationException: MQJMS2008: failed to open MQ queue 'xxxx.xx.xxxxx.xxxx'.
at com.ibm.msg.client.wmq.v6.jms.internal.MQQueueServices.getQueueOpenException(MQQueueServices.java:907)
at com.ibm.msg.client.wmq.v6.jms.internal.MQQueueServices.getOutputQueue(MQQueueServices.java:726)
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:3173)
at com.ibm.msg.client.wmq.v6.jms.internal.MQSession.createProducer(MQSession.java:2896)
at com.ibm.msg.client.wmq.v6.jms.internal.MQSession.createProducer(MQSession.java:2953)
at com.ibm.msg.client.jms.internal.JmsSessionImpl.createProducer(JmsSessionImpl.java:1302)
at com.ibm.msg.client.jms.internal.JmsQueueSessionImpl.createSender(JmsQueueSessionImpl.java:131)
at com.ibm.mq.jms.MQQueueSession.createSender(MQQueueSession.java:148)
at com.ibm.mq.jms.MQQueueSession.createProducer(MQQueueSession.java:249)
at com.connect.MQAction.injectMessage(MQAction.java:45)
at pricecheck.Main.main(Main.java:73)
出现此错误的原因是什么?
我每次都使用以下方法注入消息:
public void injectMessage(String content) throws JMSException, IOException {
MessageProducer producer = queueSession.createProducer(queue);
Message msg = queueSession.createTextMessage(content);
producer.send(msg);
}
是不是每次都要创建一个MessageProducer?
答案 0 :(得分:1)
要确定我们需要'cause by'链接异常。但是,由于您每次调用该函数时都会创建一个MessageProducer,因此您很可能会遇到某种资源限制,因为您有主要资源泄漏,但是从不关闭它!
将'producer.close()'添加到函数的末尾,最好是在finally块中,或者甚至更好地创建生成器一次,并在每次调用函数时简单地使用它。创建MessageProducer是一项昂贵的操作,因此尽可能少地创建它以获得最佳性能。
答案 1 :(得分:0)
是不是每次都要创建一个MessageProducer?
你为什么这样做?为什么不重用MessageProducer?