我的问题很简单,但我很难找到解决方案。 我希望能够获取服务器中的所有队列(或 session ,这也可以)。这可能吗?
我的情况是这样的: 我是 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");
连接连接=connectionFactory.createConnection(); session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
队列 myQueue = session.createQueue("myQueue");
这很好,因为它将完全独立(我认为,必须测试它)。但问题是我必须注册队列,这是我不想做的。我想获取服务器中所有现有的队列,而无需注册,但我找不到任何 GetQueues() 方法或任何模仿其行为的方法。
我还发现activeMQ中的DestinationSource类继承自MessageListener,但是这个类没有提供任何类似的方法:(
你能帮我一下吗?
谢谢你, 奥斯卡
最佳答案
我能够使用 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
关于java - Glassfish - 获取 session 中的所有队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4153207/