2016-10-26 4 views
0

を注入する際、私はキューにメッセージを注入していたときに、私は次の例外を取得するには、以前の511は罰金を注入されていますjavax.jms.ResourceAllocationException:私は512番目のメッセージを注入するとき毎回起こるMQJMS2008エラー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

確かに私たちは '原因'リンク例外が必要です。しかし、あなたはメジャーのリソースリークを持っているので、何らかの種類のリソース制限に遭っている可能性は高いですが、関数が呼び出されるたびにMessageProducerを作成しますが、決して閉じないでください!

'最後にproducer.close()'を追加してください。できればfinallyブロック内に追加してください。プロデューサを一度作成してから、関数を呼び出すたびに使用してください。 MessageProducerを作成するのは高価な操作なので、可能な限りパフォーマンスを極力低下させることはありません。

関連する問題