2016-07-08 12 views
0

JMSキューにあるメッセージを取得する方法を教えてください。私はこの解決策を見ていた:Jboss Messaging JMSしかし、ちょうどすぐに送信し、受信します。サーバーが再起動した場合、Javaコードでメッセージを取得するにはどうすればよいですか?JBoss JMSキューからメッセージを取得する

オンラインで何も見つかりませんでした。もちろん、JMSキューの動作を誤解している場合を除きます。

答えて

1

現在のバージョンのJBossは、JMSメッセージングにHornetQを使用しています。

Java JMSクライアントコードを使用していて、クラスタ化されたメッセージブローカインスタンスに接続している場合、クライアントは別のノードにフェールオーバーする必要があります。

単一インスタンスのブローカ構成では、クライアントコードでJMS例外が発生します。つまり、新しい接続を確立して新しいセッションを開始する必要があります。キューを閲覧するための

/** 
* QueueBrowserGss.java 
* 
* Created on Sep 24, 2012, 3:52:28 PM 
* 
* To the extent possible under law, Red Hat, Inc. has dedicated all copyright to this 
* software to the public domain worldwide, pursuant to the CC0 Public Domain Dedication. This 
* software is distributed without any warranty. 
* 
* See <http://creativecommons.org/publicdomain/zero/1.0/>. 
* 
*/ 
package com.redhat.gss.client; 

import java.util.ArrayList; 
import java.util.Date; 
import java.util.Enumeration; 
import java.util.List; 
import java.util.Properties; 

import javax.jms.JMSException; 
import javax.jms.Queue; 
import javax.jms.QueueBrowser; 
import javax.jms.QueueConnection; 
import javax.jms.QueueConnectionFactory; 
import javax.jms.QueueSession; 
import javax.jms.Session; 
import javax.naming.Context; 
import javax.naming.InitialContext; 

import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 

/** 
* @author grovedc 
* 
*/ 
public class QueueBrowserGss { 
    private static final Log logger = LogFactory.getLog(QueueBrowserGss.class); 

    @SuppressWarnings("unchecked") 
    public static void main(String[] args) { 
     QueueConnection queueConnection = null; 
     Queue queue = null; 
     QueueConnectionFactory queueConnFactory = null; 
     QueueBrowser queueBrowser = null; 
     QueueSession queueSession = null; 

     List<Object> messages = new ArrayList<Object>(7000); 

     Properties properties = new Properties(); 
     properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); 
     properties.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces"); 
     // properties.put(Context.PROVIDER_URL, "jnp://" + server + ":" + port); 
     properties.put("Context.PROVIDER_URL", "jnp://10.0.0.150:1100"); 

     try { 
      InitialContext ctx = new InitialContext(properties); 
      queue = (Queue) ctx.lookup("queue/D"); 
      queueConnFactory = (QueueConnectionFactory) ctx.lookup("ConnectionFactory"); 

      queueConnection = queueConnFactory.createQueueConnection(); 
      queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); 
      queueBrowser = queueSession.createBrowser(queue); 
      queueConnection.start(); 

      for (Enumeration<Object> e = queueBrowser.getEnumeration(); e.hasMoreElements();) { 
        messages.add(e.nextElement()); 
      } 

      logger.info("Messages are retrieved from queue. Process completed on: " + new Date()); 
      logger.info("Number of Messages present: " + messages.size()); 

     } catch (Exception ex) { 
      logger.error(String.format("Exception Occured : %s", ex.getMessage()), ex); 
     } finally { 
      try { 
       if (queueConnection != null) 
        queueConnection.stop(); 
      } catch (JMSException e) { 
       logger.error(e); 
      } 
     } 
    } 
} 

JNPプロトコルとポートはJBoss Messagingのためのものです。

+0

のコンテンツを投稿を閲覧することJMSToolBoxのようなツールを使用することができます。私はちょうどコンソールにすべてのメッセージを表示するJavaコードが必要なのです。私はそれを理解し、すぐに答えを投稿します。返信いただきありがとうございます! – syy

0

QueueBrowserにして列挙しなければなりません。コード例:これは単なる一例であるとして

// Create the connection 
InitialContext context = new InitialContext(properties); 
QueueConnectionFactory queueConnFactory = (QueueConnectionFactory) context.lookup("ConnectionFactory"); 
QueueConnection conn = queueConnFactory.createQueueConnection(); 
Queue queue = (Queue) context.lookup("/queue/Test"); 
QueueSession session = conn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE); 

// Start the connection 
conn.start() 

// Create a QueueBrowser using the session 
QueueBrowser queueBrowser = session.createBrowser(queue); 
Enumeration e = queueBrowser.getEnumeration(); 

// Iterate through the queue 
while(e.hasMoreElements()) { 
    Message msg = (Message) e.nextElement(); 
    TextMessage txtMsg = (TextMessage) msg; 

    System.out.println(txtMsg.getText()); 
} 

、あなたのニーズに合わせてTextMessage一部を変更することができます。

1

はあなたのユースケースに応じて、私はあなたが質問を誤解だと思う...など/削除/ JBossの/ HornetQの先

+0

ありがとう、これは非常に便利なツールです。間違いなくそれを使用します。しかし、私はプログラムでこれをやりたかったのです。 – syy

関連する問題