1

如何使用 ActiveMQ NMS (.NET) 获取队列和主题列表。在 JAVA 中获取列表很简单。但是.NET 呢?

在java中我使用了这个:

String messageBrokerUrl = "tcp://localhost:61616";
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
            "admin", "admin", messageBrokerUrl);
ActiveMQConnection connection;


connection = (ActiveMQConnection) connectionFactory
        .createConnection();
connection.start();
this.session = connection.createSession(this.transacted, ackMode);

DestinationSource ds = connection.getDestinationSource();
Set<ActiveMQQueue> queues = ds.getQueues();

for (ActiveMQQueue activeMQQueue : queues) {
    System.out.println(activeMQQueue.getQueueName());
}

.NET 有类似的方法吗?

谢谢。

4

1 回答 1

3

选项1:

在 java 中,您会使用 JMX(我猜),但您可以使用jolokia 端点通过 HTTP/JSON 访问 JMX 接口。

例如,如果您通过此 URL(受密码保护)访问经纪人信息:http://<hostname>:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost

您应该能够从 JSON 信息中解析队列。

回复与此类似:

{
    "request": {
        "mbean": "org.apache.activemq:brokerName=localhost,type=Broker",
        "type": "read"
    },
    "status": 200,
    ...
    "value": {
        "BrokerId": ....
        "Queues": [
            {
                "objectName": "org.apache.activemq:brokerName=localhost,destinationName=QUEUE.1,destinationType=Queue,type=Broker"
            },
            {
                "objectName": "org.apache.activemq:brokerName=localhost,destinationName=ANOTHER.QUEUE,destinationType=Queue,type=Broker"
            },
            {
                "objectName": "org.apache.activemq:brokerName=localhost,destinationName=ActiveMQ.DLQ,destinationType=Queue,type=Broker"
            },
            {
                "objectName": "org.apache.activemq:brokerName=localhost,destinationName=FOO.BAR,destinationType=Queue,type=Broker"
            }
        ],
        ...
    }
}

选项 2:

如果您想坚持使用纯 NMS,您可以订阅一个名为ActiveMQ.Advisory.Queue.

当您开始订阅时,您将获得一个包含队列的列表(每个队列一条消息)。添加新队列时,您将收到新消息。这可能很方便。

于 2015-04-28T04:53:33.227 回答