【问题标题】:get queuename on activemq server to push message在 activemq 服务器上获取 queuename 以推送消息
【发布时间】:2012-12-18 19:37:37
【问题描述】:

我在 activemq 服务器上有 10 个队列。 我有生产者想在其中一个队列上推送消息(生产者将随机选择队列运行时间以将消息放入队列),如何在 createProducer 方法中传递目标名称。 我知道我需要传递一个 Destination 类型的对象。生产者会知道服务器上的队列名称。是否可以将字符串传递(或转换)为 Destination 对象类型并将其传递给 createproducer 方法。

谢谢

【问题讨论】:

    标签: activemq


    【解决方案1】:

    如果我正确理解您的问题;

    如果你正在运行 Java 并且有一个有效的会话,你可以使用Session.createQueue();

    // Create a Destination using the queue name
    Destination destination = session.createQueue("queue name");
    
    // Create a MessageProducer from the Session to the Queue
    MessageProducer producer = session.createProducer(destination);
    

    Here is a complete example of doing this at the Apache site.

    【讨论】:

    • 感谢您回复 Joachim,我知道这样做的方式,但是如果我在服务器上已经有一个物理队列,我还需要 createQueue 吗? (我已经用其他程序(类说)在服务器上创建了物理队列)。如果我已经在服务器上有队列并且我知道名称,那么我不能说“session.createProducer(>)。有没有办法将说字符串转换为目标,因此我不需要调用再次为服务器上已经存在的同一个队列创建队列。(我知道如果它已经存在,createQueue 不会再次创建队列)
    • @Manglesh createQueue 是一个有点令人困惑的名字,因为它实际上并没有创建队列。来自文档; Creates a queue identity given a Queue name. ... _Note that this method is not for creating the physical queue._ The physical creation of queues is an administrative task and is not to be initiated by the JMS API. 不过话说回来,我可能没有正确理解你的问题...?
    • 我的应用程序有 3 个部分(类),第一个生产者,第二个在服务器上创建物理队列,第三个消费者。我已经在第二部分创建了队列。现在我在服务器上有物理队列,我希望生产者/消费者用来推送和接收消息。在第二部分中,在创建队列时,我通过让生产者发送垃圾消息并被接收者丢弃来物理创建它们。创建队列运行时的原因是因为我会知道在运行时要创建的队列数量。所以我使用这种方法而不是通过在 xml 中定义来预先创建队列
    • 如果您只有字符串形式的队列名称,您必须在所有类中调用 createQueue。您可以将 createQueue 方法视为 Queue 对象的工厂,而不是在 JMS 代理上创建 Queue 的方法。不知道为什么那个方法调用会让你如此心痛。
    猜你喜欢
    • 2021-11-27
    • 2014-10-16
    • 2015-10-30
    • 1970-01-01
    • 2015-08-03
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    相关资源
    最近更新 更多