2016-10-26 87 views
0

時MQJMS2008的錯誤,我得到當我注入的消息隊列進入,這恰好每次下列異常時,我注入了512個消息,前面的511精注射:javax.jms.ResourceAllocationException:注射1/512消息

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

是不是因爲我創建的MessageProducer每次?

你爲什麼要這麼做?爲什麼不重用MessageProducer?

1

爲了確切知道我們需要'cause by'鏈接的異常。但是,由於您每次調用函數時都會創建一個MessageProducer,但是您永遠不會關閉它,所以您的資源限制很可能會達到某種資源限制:主要資源泄漏!

添加「producer.close()」到函數結束時,優選在最後塊,或甚至更好一旦創建生產者和簡單地使用每個被調用函數時它。創建MessageProducer是一項昂貴的操作,因此儘可能少地獲得最佳性能。