ActiveMQ: получить список подключений через JMX?

Как получить список подключений к соединителю OpenWire ActiveMQ? JConsole может перечислить соединения, но я не вижу, какое представление я могу использовать для получения списка:

Пример ObjectName соединения: org.apache.activemq:BrokerName=localhost,Type=Connection,ConnectorName=openwire,Connection=toto

Я попробовал ConnectorViewMBean, но операции с ним не позволяют мне перечислить соединения:

ObjectName name = new ObjectName("org.apache.activemq:BrokerName=localhost,Type=Connection,ConnectorName=openwire"); 
mbsc.getMBeanInfo(name); 
ConnectorViewMBean view = JMX.newMBeanProxy(mbsc, name, ConnectorViewMBean.class);

person AndrewBourgeois    schedule 15.09.2011    source источник


Ответы (3)


Решение заключалось в использовании выражения:

ObjectName connectionNames = 
      new ObjectName("org.apache.activemq:BrokerName=localhost," + 
                     "Type=Connection,ConnectorName=openwire,Connection=*");

Set<ObjectName> names = mbsc.queryNames(connectionNames, null); 
for(ObjectName name : names) { 
   logger.error("Name: "+name.getCanonicalName()); 
} 
person AndrewBourgeois    schedule 15.09.2011
comment
Может ли кто-нибудь сказать мне, как правильно форматировать код ?? SHIFT+ENTER создает новый код блока, ENTER тоже... - person AndrewBourgeois; 15.09.2011
comment
см. stackoverflow.com/editing-help или используйте кнопки панели инструментов в редакторе - person Jeff Atwood; 16.09.2011
comment
Этот ответ верен для ActiveMQ 5.7.0 и ранее. Формат ObjectName изменился в ActiveMQ 5.8.0, как описано в выпуске 5.8.0. примечания. - person Tim; 12.08.2014

Я использую ActiveMQ 5.14.5, который использует другой формат ObjectName для запроса соединений через JMX. Эквивалент ответа Эндрю в этой версии ActiveMQ:

final JMXServiceURL url       = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi");
final JMXConnector  connector = JMXConnectorFactory.connect(url, null);
connector.connect();

final ObjectName connectionName = new ObjectName(
    "org.apache.activemq:type=Broker," +
    "brokerName=localhost,"            +
    "connector=clientConnectors,"      +
    "connectorName=openwire,"          +
    "connectionViewType=clientId,"     +
    "connectionName=*"
);

final MBeanServerConnection mbsc  = connector.getMBeanServerConnection();
final Set<ObjectName>       names = mbsc.queryNames(connectionName, null);
for (final ObjectName name : names) {
    System.out.println(name.getCanonicalName());
}
person sawprogramming    schedule 01.07.2020

В самых последних версиях ActiveMQ (5.1x.x) вы можете использовать ссылку BrokerViewMBean, чтобы получить карту транспортных соединителей:

Map<String, String[]> env = new HashMap<>();
String[] creds = {brokerUsername, brokerPassword};
env.put(JMXConnector.CREDENTIALS, creds);

final String managementURL = "service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi";
try (JMXConnector connector = JMXConnectorFactory.connect(new JMXServiceURL(managementURL, env)) {
   ObjectName on = new ObjectName("org.apache.activemq:type=Broker,brokerName=localhost");
   BrokerViewMBean broker = MBeanServerInvocationHandler.newProxyInstance(connector.getMBeanServerConnection(), on, BrokerViewMBean.class, false);
   Map<String, String> transportConnectors = broker.getTransportConnectors();
   // broker.getTransportConnectorsByType("tcp"); // openwire
   // broker.addConnector(String discoveryAddress);
   // broker.removeConnector(String connectorName);
 } catch (MalformedObjectNameException ex) {
    // log error
 } catch (IOException ex) {
    // log error
 } catch (Exception ex) {
    // log error
 }

Ознакомьтесь также с ConnectorViewMBean.

Однако, несмотря на то, что в BrokerViewMBean есть методы для получения транспортных коннекторов, как показано в приведенном выше коде, нет методов для получения списка сетевых коннекторов (также известных как брокер-брокер).

person J Kost    schedule 18.03.2021