0

Java EE と ActiveMQ を使用しています。QUEUE にメッセージを送信できる JMS Queue を実現したいのですが、Consumer + MessageListener がこのメッセージを読み取る必要があります。

私の消費者のコードは次のとおりです。

private void initializeActiveMq() throws JMSException {
            // Create a ConnectionFactory
            ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerUrl);
            // Create a Connection
             connection = connectionFactory.createConnection();
             connection.start();
            // Create a Session
            session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);


            // Create the destination (Queue)
            Queue queue = session.createQueue(queueName);
             // Create a MessageConsumer from the Session to the Queue
             consumer = session.createConsumer(queue);

             consumer.setMessageListener(this);

    }

しかし、問題は、このコードを実行するたびに、新しいコンシューマーをキューに追加し、コンシューマーがメッセージを正しく配信しなかったという奇妙な動作をすることです。コンシューマが 1 つしかない場合、それは完璧に機能します。

では、キューにコンシューマーが 1 つしかないことを確認するにはどうすればよいでしょうか?

4

1 に答える 1

0

私はまったく同じ問題を経験しました。アンデプロイ時に、戦争に適切なシャットダウン手順の概念があることを確認する必要があります。

init (ここですべての初期化を行う) と destroy (ここですべてのクリアを行う) を実装する HTTP サーブレットを使用することで、これを実現できます。Destory() は、war がアンデプロイされるときに JVM によって呼び出されます。

Spring を使用して、すべての Bean、ActiveMQ 接続、メッセージ コンシューマー、およびプロデューサーを定義しています。私の init() は、マスター xml ファイルから Spring アプリケーション コンテキストをロードし、それへの参照をローカルにキャッシュしてから、destory() がアプリケーション コンテキストで close() を呼び出します。

于 2013-10-22T16:28:08.833 に答える