从Java代码获取队列HornetQ列表

时间:2013-12-01 18:38:24

标签: java hornetq

我试图获取当前有效的HornetQ队列列表:

ServerLocator locator = HornetQClient.createServerLocatorWithoutHA(new TransportConfiguration(NettyConnectorFactory.class.getName(), getConfigMap()));
ClientSessionFactory factory = locator.createSessionFactory();

ClientSession session = return factory.createSession(true, true, 0);

ClientSession.BindingQuery result = session.bindingQuery(new SimpleString("localhost"));

System.out.println(result.getQueueNames().size());

但它会返回0。看起来我的表现不对BindingQuery,但我没有在文档中找到任何示例。

2 个答案:

答案 0 :(得分:2)

迟到的回复。希望它可以帮到某人。

ServerLocator locator = HornetQClient.createServerLocatorWithoutHA(new TransportConfiguration(InVMConnectorFactory.class.getName()));
ClientSessionFactory sf = locator.createSessionFactory();
ClientSession session = sf.createSession(false, true, true);
session.start();

ClientRequestor requestor = new ClientRequestor(session, "jms.queue.hornetq.management");
ClientMessage message = session.createMessage(false);
ManagementHelper.putAttribute(message, ResourceNames.CORE_SERVER, "queueNames");
ClientMessage reply = requestor.request(message);
Object queueNames = ManagementHelper.getResult(reply);

的pom.xml:

    <dependency>
        <groupId>org.hornetq</groupId>
        <artifactId>hornetq-core-client</artifactId>
        <version>2.3.0.CR1</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.hornetq</groupId>
        <artifactId>hornetq-jms-client</artifactId>
        <version>2.3.0.CR1</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.hornetq</groupId>
        <artifactId>hornetq-server</artifactId>
        <version>2.3.1.Final</version>
        <scope>provided</scope>
    </dependency>

答案 1 :(得分:0)

此处的地址不是IP地址。

在HornetQ核心队列中我们有队列的概念,并且每个队列(核心队列)将绑定到一个地址。在这种情况下,多个队列将属于一个地址。

示例:

地址:发票 队列1:制造发票 队列2:打印发票 队列3:交货发票

因此,您将消息发送到地址发票,每个队列都将收到消息。

如果要查找您拥有的地址和队列,您必须查看管理操作,而不是通过客户端核心API。您执行的特定API旨在使用此概念在该地址上找到队列的存在。

尝试使用JMX方法列出队列,或者使用ManagementServices :: getResources(Class classType);

您还可以使用AS7管理操作或管理控制台。