2011-10-11 33 views
8

私はActiveMQブローカと、いくつかの自己生成オブジェクトをブローカに置くプロデューサを持っています。私も問題なく、それらのメッセージ(シリアル化されたオブジェクト)を受け取る消費者があります。しかし、私はブローカに接続してすべてのメッセージ(シリアル化されたオブジェクト)を表示するツールを作成したいと考えています。 ActiveMQブローカからすべてのメッセージを取得するにはどうすればよいですか?

は、私が実行しようとしましたその使用とActiveMQConnection:私はobjectMessage.getObject()で例外を取得し、このコードで

Set<ActiveMQQueue> currentMessageQueues = activeMQConnection.getDestinationSource().getQueues(); 
Iterator<ActiveMQQueue> messageQueueIterator = currentMessageQueues.iterator(); 

while (messageQueueIterator.hasNext()) { 
    ActiveMQQueue currentQueue = messageQueueIterator.next(); 
    QueueSession queueSession = activeMQConnection.createQueueSession(true, Session.AUTO_ACKNOWLEDGE); 
    QueueBrowser browser = queueSession.createBrowser(currentQueue); 
    Enumeration<?> messagesInQueue = browser.getEnumeration(); 

    while (messagesInQueue.hasMoreElements()) { 
     Message queueMessage = (Message) messagesInQueue.nextElement(); 

     if (queueMessage instanceof ActiveMQObjectMessage) { 
      ActiveMQObjectMessage objectMessage = (ActiveMQObjectMessage) queueMessage; 
      objectMessage.getObject(); 
     } 
    } 
} 

:私はデバッグモードを使用してActiveMQObjectMessageを目的としている

javax.jms.JMSException: Failed to build body from content. Serializable class not available to broker. Reason: java.lang.ClassNotFoundException: MyMessage 

nullに設定します。

このアプローチは良いですか?はいの場合は間違っていますか? ブローカからオブジェクトを受け取るにはどうしたらいいですか?

+0

コンシューマーはまだ動作していますか? Maye彼らは見てしようとしている間、キューから消費/削除? – Dag

+0

いいえ、コンシューマは実行されません – telebog

答えて

2

私はあなたのキューブラウザーの使い方が良いと思います。キュー上のメッセージを表示してUIを提供しないだけの目的なら、JMXサポート-を使用し、jconsoleまたはjvisualvmのようなツールを使用してJMXリスナーに接続することもできます。

あなたのコンシューマまたはプロデューサとは異なるインスタンスでキューブラウザ/モニタを実行している可能性があります。これが、このインスタンスでクラスが使用できない理由、およびobjectMessage.getObject()呼び出しが失敗する理由です。直列化されたオブジェクトをオブジェクトに変換するために使用できるクラス定義。ブラウザーを実行しているインスタンスにクラスjarを入れて、それが機能するかどうかを調べることができます。

+0

私はクラス定義を持っていますが、これは問題ではないという点があります。私はJConsoleを使用しました。 – telebog

関連する問題