javax.jms.ResourceAllocationException:注入第512个消息时出现MQJMS2008错误

时间:2016-10-26 12:03:48

标签: java ibm-mq

当我将消息注入队列时,我得到以下异常,每次注入第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?

2 个答案:

答案 0 :(得分:1)

要确定我们需要'cause by'链接异常。但是,由于您每次调用该函数时都会创建一个MessageProducer,因此您很可能会遇到某种资源限制,因为您有主要资源泄漏,但是从不关闭它!

将'producer.close()'添加到函数的末尾,最好是在finally块中,或者甚至更好地创建生成器一次,并在每次调用函数时简单地使用它。创建MessageProducer是一项昂贵的操作,因此尽可能少地创建它以获得最佳性能。

答案 1 :(得分:0)

  

是不是每次都要创建一个MessageProducer?

你为什么这样做?为什么不重用MessageProducer?