2016-07-08 3 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의 메시징을위한 것입니다.

+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

은 사용 사례에 따라, 당신은 당신이 질문을 오해 생각 등등/삭제/보스/HornetQ 목적지

+0

감사합니다. 이것은 매우 유용한 도구입니다. 그것을 확실히 사용할 것이다. 그러나 프로그래밍 방식으로이 작업을 수행하려고했습니다. – syy