2010-01-23 5 views
3

Я чувствую, что это, вероятно, довольно простой вопрос, но это мой первый набег на JMS, так что я немного не уверен.Как я могу получить существующую очередь JMS?

Я пытаюсь писать в существующую очередь JMS (а затем читать из другой очереди), для которой я знаю имя очереди, хост, диспетчер очереди и канал. Как получить ссылку на эту очередь в виде объекта javax.jms.Destination?

Все примеры, которые я нашел, включают вызов javax.jms.Session.createQueue(String), но поскольку эта очередь уже существует, я не хочу создавать другую, не так ли? Или я не понимаю, что происходит?

Если есть значение, я пользуюсь драйвером com.ibm.msg.client.jms.

Спасибо!

ответ

4

Обычно контейнер, в котором выполняется ваше приложение, связывает Queue в своей службе именования. Приложение в контейнере может искать его с помощью JNDI и использовать его.

+0

Спасибо! Можно ли получить доступ к очереди из автономной java-программы? В конце концов, я буду использовать Очередь из приложения Java EE, но сейчас я пытаюсь просто экспериментировать, чтобы узнать больше о JMS. Если это невозможно сделать, я, вероятно, могу пропустить этот шаг, но я хотел бы иметь код, который взаимодействует с Очереди без всякой другой сложности в моем приложении. – pkaeding

+1

Обычно это можно сделать из автономного приложения, но детали зависят от поставщика JMS, который вы используете. Например, многие серверы приложений предоставляют JNDI-провайдер и JMS-драйвер, которые вы можете использовать в приложении вне самого сервера приложений, чтобы установить соединение. – erickson

0

Чтобы добавить ответ Эриксона выше:

Это пример получения и просмотра в очереди JMS:(с использованием javax.jms-апи 2.x)

// Set up the connection to the queue: 
Properties env = new Properties(); 
env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory"); 
env.put(Context.PROVIDER_URL, "http-remoting://<host>:<port>"); 
Context namingContext = new InitialContext(env); 
ConnectionFactory connectionFactory = (ConnectionFactory) namingContext.lookup("jms/RemoteConnectionFactory"); 
JMSContext context = connectionFactory.createContext("jms_user", "pwd"); 

// Get the JMS Queue: 
Queue queue = (Queue) namingContext.lookup("jms/queue/exampleQueue"); 
// Create the JMS Browser: 
QueueBrowser browser = context.createBrowser(queue); 
// Browse the messages: 
Enumeration<Message> e = browser.getEnumeration(); 
while (e.hasMoreElements()) { 
    Message message = (Message) e.nextElement(); 
    log.debug(message.getBody(String.class) + " with priority: " + message.getJMSPriority()); 
} 
... 

Убедитесь вы используете эти зависимости Maven:

<dependency> 
    <groupId>javax.jms</groupId> 
    <artifactId>javax.jms-api</artifactId> 
    <version>2.0.1</version> 
</dependency> 
<dependency> 
    <groupId>org.wildfly</groupId> 
    <artifactId>wildfly-jms-client-bom</artifactId> 
    <version>10.0.0.Final</version> 
    <type>pom</type> 
</dependency> 
Смежные вопросы