我的问题非常简单,但我很难找到解决方案。 我希望能够获得服务器(或会话中的所有队列,也可以)。这可能吗?
我的情况如下: 我是openMQ,Glassfish,activeMQ等的新手。我为activeMQ开发了一个监控系统,在其中我获得了所有现有的队列并向用户显示,因此它可以获得有关消息数量的信息等。 为此,我有这段代码:
ActiveMQConnection.makeConnection("tcp://localhost:61616");
activeMQConnection.start();
//Get queues
DestinationSource destinationSource = activeMQConnection.getDestinationSource();
Set<ActiveMQQueue> queues = destinationSource.getQueues();
这最后一行获取连接的所有队列,这正是我需要的。但这是我的ActiveMQ代码。
现在团队决定改为openMQ,我必须调整我的监控系统才能处理。我想使用LDAP,所以我可以独立于技术。经过大量的研究,我来到了这段代码:
ConnectionFactory connectionFactory = (ConnectionFactory) ctx.lookup("cn=QueueConnectionFactory");
Connection connection = connectionFactory.createConnection(); 会话session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
队列myQueue = session.createQueue(“myQueue”);
这很好,因为它完全是独立的(我想,必须测试它)。但问题是我必须注册队列,这是我不想做的事情。我想在服务器中获取所有现有队列而无需注册,但我找不到任何GetQueues()方法或任何模仿其行为的方法。
我还发现activeMQ中的DestinationSource类继承自MessageListener,但是这个类没有提供任何类似的方法:(
你能帮我吗?
谢谢你, 奥斯卡答案 0 :(得分:1)
我能够使用JMX做到这一点,这是代码:
HashMap environment = new HashMap();
String[] credentials = new String[] { "user", "pass" };
environment.put(JMXConnector.CREDENTIALS, credentials);
JMXServiceURL url = new JMXServiceURL("URL");
// Get JMX connector, supplying user name and password
JMXConnector jmxc1 = JMXConnectorFactory.connect(url, environment);
// Get MBean server connection
MBeanServerConnection mbsc = jmxc1.getMBeanServerConnection();
ObjectName destMgrConfigName = new ObjectName(MQObjectName.DESTINATION_MANAGER_MONITOR_MBEAN_NAME);
// Create operation's parameter and signature arrays
Object opParams[] = {};
String opSig[] = {};
// Invoke operation
ObjectName[] objectNames = (ObjectName[]) mbsc.invoke(destMgrConfigName, DestinationOperations.GET_DESTINATIONS, opParams, opSig);
for (ObjectName objectName : objectNames) {
System.out.println(objectName.getCanonicalName());
System.out.println(objectName.getKeyProperty("name"));
}
此处有更多参考资料:http://forums.oracle.com/forums/thread.jspa?threadID=2129291&tstart=0