JMS 큐에있는 메시지를 검색하려면 어떻게합니까? 나는이 해결책을 찾고 있었다 : Jboss Messaging JMS,하지만 그냥 바로 보내고받을 수 있습니다. 서버가 다시 시작된 경우 Java 코드로 메시지를 검색하려면 어떻게해야합니까?JBoss JMS 큐에서 메시지 가져 오기
온라인에서 아무 것도 발견하지 못했습니다. 물론 JMS 큐가 작동하는 방식을 완전히 오해하지 않는 한.
JMS 큐에있는 메시지를 검색하려면 어떻게합니까? 나는이 해결책을 찾고 있었다 : Jboss Messaging JMS,하지만 그냥 바로 보내고받을 수 있습니다. 서버가 다시 시작된 경우 Java 코드로 메시지를 검색하려면 어떻게해야합니까?JBoss JMS 큐에서 메시지 가져 오기
온라인에서 아무 것도 발견하지 못했습니다. 물론 JMS 큐가 작동하는 방식을 완전히 오해하지 않는 한.
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의 메시징을위한 것입니다.
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
부분을 변경할 수 있습니다.
은 사용 사례에 따라, 당신은 당신이 질문을 오해 생각 등등/삭제/보스/HornetQ 목적지
감사합니다. 이것은 매우 유용한 도구입니다. 그것을 확실히 사용할 것이다. 그러나 프로그래밍 방식으로이 작업을 수행하려고했습니다. – syy
의 콘텐츠를 게시를 찾아 JMSToolBox 같은 도구를 사용할 수 있습니다. 필자는 콘솔에서 모든 메시지를 표시하는 Java 코드를 원했습니다. 나는 그것을 알아 냈고 곧 답변을 게시 할 것입니다. 답장을 보내 주셔서 감사합니다! – syy