2016-10-26 1 views
0

ich die folgende Ausnahme erhalten, wenn ich Nachrichten in die Warteschlange am Injektion, die jedes Mal passiert, wenn ich die 512. Nachricht injizieren, werden die vorherigen 511 fein injiziert:javax.jms.ResourceAllocationException: MQJMS2008 Fehler beim 512. Nachricht Injektion

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) 

Was ist der Grund für diesen Fehler?

ich die folgende Methode verwende eine Nachricht jedes Mal zu injizieren:

public void injectMessage(String content) throws JMSException, IOException { 
    MessageProducer producer = queueSession.createProducer(queue); 
    Message msg = queueSession.createTextMessage(content); 
    producer.send(msg); 
} 

Ist es wegen mir eine MessageProducer jedes Mal zu schaffen?

Antwort

0

Liegt es daran, dass ich jedes Mal einen MessageProducer erstelle?

Warum würden Sie das tun? Warum nicht den MessageProducer wiederverwenden?

1

Um sicher zu wissen, brauchen wir die verknüpfte Ausnahme 'cause by'. Aber Sie sind mehr als wahrscheinlich, treffen Sie eine Art von Ressourcen-Limit, da Sie eine Haupt- Ressource Leck haben, dass Sie ein MessageProducer jedes Mal erstellen, wenn die Funktion aufgerufen wird, aber nie schließen Sie es!

Fügen Sie 'producer.close()' am Ende der Funktion hinzu, vorzugsweise in einem finally-Block, oder noch besser, erstellen Sie den Erzeuger einmal und verwenden Sie ihn einfach jedes Mal, wenn die Funktion aufgerufen wird. Einen MessageProducer zu erstellen, ist ein teurer Vorgang. Tun Sie es so wenig wie möglich, um die bestmögliche Leistung zu erzielen.

Verwandte Themen