Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取现有JMS队列?_Java_Jms_Jndi_Ibm Mq - Fatal编程技术网

Java 如何获取现有JMS队列?

Java 如何获取现有JMS队列?,java,jms,jndi,ibm-mq,Java,Jms,Jndi,Ibm Mq,我觉得这可能是一个非常简单的问题,但这是我第一次涉足JMS,所以我有点不确定 我试图写入一个现有的JMS队列(然后从另一个队列读取),我知道该队列的名称、主机、队列管理器和通道。如何以javax.jms.Destination对象的形式获取对此队列的引用 我发现的所有示例都涉及调用javax.jms.Session.createQueue(String),但是由于这个队列已经存在,我不想再创建一个,对吗?还是我误解了正在发生的事情 如果有必要,我将使用com.ibm.msg.client.jms

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

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

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

如果有必要,我将使用com.ibm.msg.client.jms驱动程序


谢谢

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

要在上面添加erickson的答案:

这是获取和浏览JMS队列的示例:(使用javax.JMS-api 2.x)

//设置与队列的连接:
Properties env=新属性();
put(Context.INITIAL\u Context\u工厂,“org.jboss.naming.remote.client.InitialContextFactory”);
env.put(Context.PROVIDER_URL,“http远程处理:/:”;
Context namingContext=新的初始上下文(env);
ConnectionFactory ConnectionFactory=(ConnectionFactory)namingContext.lookup(“jms/RemoteConnectionFactory”);
JMSContext context=connectionFactory.createContext(“jms_用户”、“pwd”);
//获取JMS队列:
Queue Queue=(Queue)namingContext.lookup(“jms/Queue/exampleQueue”);
//创建JMS浏览器:
QueueBrowser browser=context.createBrowser(队列);
//浏览以下信息:
枚举e=browser.getEnumeration();
而(e.hasMoreElements()){
消息消息=(消息)e.nextElement();
log.debug(message.getBody(String.class)+优先级为:“+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>

javax.jms
javax.jms-api
2.0.1
野生蝇
wildfly jms客户端bom
10.0.0.1决赛
聚甲醛

谢谢!是否可以从独立java程序访问队列?最终,我将使用JavaEE应用程序中的队列,但现在我只是尝试更熟悉JMS。如果不可能做到这一点,我可能会跳过这一步,但我希望有一些代码可以与队列交互,而不需要我的应用程序中的所有其他复杂性。通常可以从独立的应用程序中做到这一点,但细节在很大程度上取决于您使用的JMS提供程序。例如,许多应用程序服务器提供JNDI提供程序和JMS驱动程序,您可以在应用程序服务器本身之外的应用程序中使用它们来建立连接。
<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>