3

我觉得这可能是一个非常简单的问题,但这是我第一次涉足 JMS,所以我有点不确定。

我正在尝试写入现有 JMS 队列(然后从另一个队列读取),我知道队列名称、主机、队列管理器和通道。如何以javax.jms.Destination对象的形式获取对此队列的引用?

我发现的所有示例都涉及调用javax.jms.Session.createQueue(String),但由于该队列已经存在,我不想再创建一个,对吗?还是我误解了发生了什么?

如果重要的话,我正在使用 com.ibm.msg.client.jms 驱动程序。

谢谢!

4

2 回答 2

4

通常,运行应用程序的容器将Queue在其命名服务中绑定。容器中的应用程序可以通过 JNDI 查找并使用它。

于 2010-01-23T02:27:21.330 回答
0

要在上面添加埃里克森的答案:

这是获取和浏览 JMS 队列的示例:( 使用 javax.jms-api 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>
于 2017-05-03T06:47:06.823 回答