0

JMS アプリケーションをテストしようとしています。consumer に問題はありませんが、次のコードを持つプロデューサーを実行しようとすると

public class QueueProducer {

    /**
     * @param args
     * @throws NamingException
     * @throws JMSException
     */
    public static void main(String[] args) throws JMSException, NamingException {
        System.out
                .println("--------Entering JMS Example QueueProducer--------");
        Context context = QueueConsumer.getInitialContext();
        QueueConnectionFactory queueConnectionFactory = (QueueConnectionFactory) context
                .lookup("ConnectionFactory");
        Queue queue = (Queue) context
                .lookup("queue/zaneacademy_jms_tutorial_02");
        QueueConnection queueConnection = queueConnectionFactory
                .createQueueConnection();
        QueueSession queueSession = queueConnection.createQueueSession(false,
                QueueSession.AUTO_ACKNOWLEDGE);
        queueConnection.start();
        QueueProducer queueProducer = new QueueProducer();
        queueProducer.sendMessage("Message 1 From QueueProducer...",
                queueSession, queue);
        System.out.println("--------Exiting JMS Example QueueProducer--------");
    }

    public void sendMessage(String text, QueueSession queueSession, Queue queue)
            throws JMSException {
        QueueSender queueSender = queueSession.createSender(queue);
        TextMessage textMessage = queueSession.createTextMessage(text);
        queueSender.send(textMessage);
        System.out.println("Message Sent : "+textMessage.getText());
        queueSender.close();
    }

}

プロデューサーにメッセージだけを表示し、数秒後にこの警告を表示します

 WARN  [SimpleConnectionManager] A problem has been detected with the connection to remote client 5c4o12-  tsh1gl-hfybsrs4-1-hfybss2a-4, jmsClientID=b-l5ssbyfh-1-4srsbyfh-lg1hst-21o4c5. It is possible the client has exited without closing its connection(s) or the network has failed. All associated connection resources will be cleaned up.
4

2 に答える 2

1

キュー接続を閉じる必要があるかもしれません。queueConnection.close();の最後に追加してみてくださいmain

さらに、クローズする必要があるリソースは、finally ブロックで実行する必要があります。これにより、リソースの操作中に例外が発生した場合でも、リソースが確実に閉じられます。例えば:

QueueSender queueSender = ...
try {
    // use queueSender
}
finally {
    queueSender.close();
}

についても同じですqueueConnection

于 2013-04-25T20:00:15.300 に答える
1

私は同じ問題に直面しました。QueueConnection と QueueSession を閉じる必要があると思います。上記のコード スニペットでは、追加のコードは次のようになります。

        queueConnection.stop();
        queuesession.close();
        queueConnection.close();

この後、私の問題は解決しました。

于 2015-02-26T17:50:30.763 に答える