【问题标题】:How can I get an existing JMS queue?如何获取现有的 JMS 队列?
【发布时间】:2011-01-08 11:00:51
【问题描述】:

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

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

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

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

谢谢!

【问题讨论】:

    标签: java jms jndi ibm-mq


    【解决方案1】:

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

    【讨论】:

    • 谢谢!是否可以从独立的 java 程序访问队列?最终,我将使用 Java EE 应用程序中的队列,但现在我正在尝试尝试更熟悉 JMS。如果无法做到这一点,我可能可以跳过这一步,但我希望有一些与队列交互的代码,而不需要我的应用程序中的所有其他复杂性。
    • 通常可以从独立应用程序中执行此操作,但细节很大程度上取决于您使用的 JMS 提供程序。例如,许多应用服务器提供了一个 JNDI 提供程序和 JMS 驱动程序,您可以在应用服务器本身之外的应用程序中使用它们来建立连接。
    【解决方案2】:

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

    这是获取和浏览 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-16
      • 2015-12-01
      • 1970-01-01
      • 2017-09-03
      • 2017-04-17
      • 2014-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多