• JMX操作ActiveMQ(1)


    我们知道ActiveMQ broker的管理接口是通过JMX方式提供的。

    一个简单的访问方式就是通过jconsole,输入

    service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi

    需要注意的是:

    1、默认JMX功能是没有打开的,需要在activemq.xml的broker配置上添加useJmx="true"

    2、需要在managementContext里,修改为createConnector="true",(同时这里也可以修改jmx的端口和domain)

    (参见http://activemq.apache.org/jmx.html




    通过jconsole来操作还是不太方便。特别是某些时候我们需要把对broker和queue的管理集成到我们的管理系统中去。

    这时候我们就需要通过JMX的编程接口来与broker进行交互了。

    可以先写一个小程序,看看broker的jmx中都提供了什么东西。

    package kk;
    
    import java.util.Iterator;
    import java.util.Set;
    
    import javax.management.MBeanAttributeInfo;
    import javax.management.MBeanInfo;
    import javax.management.MBeanOperationInfo;
    import javax.management.MBeanServerConnection;
    import javax.management.ObjectInstance;
    import javax.management.ObjectName;
    import javax.management.remote.JMXConnector;
    import javax.management.remote.JMXConnectorFactory;
    import javax.management.remote.JMXServiceURL;
    
    public class TestJMX {
    
    	public static void main(String[] args) throws Exception {
    
    		String surl = "service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi";
    
    		JMXServiceURL url = new JMXServiceURL(surl);
    		JMXConnector jmxc = JMXConnectorFactory.connect(url, null);
    		MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();
    		
    		System.out.println("Domains:---------------");
    		String domains[] = mbsc.getDomains();
    		for (int i = 0; i < domains.length; i++) {
    			System.out.println("	Domain[" + i + "] = " + domains[i]);
    		}
    		
    		System.out.println("all ObjectName:---------------");
    		Set<ObjectInstance> set = mbsc.queryMBeans(null, null);
    		for (Iterator<ObjectInstance> it = set.iterator(); it.hasNext();) {
    			ObjectInstance oi = (ObjectInstance) it.next();
    			System.out.println("	" + oi.getObjectName());
    		}
    		
    		System.out.println("org.apache.activemq:BrokerName=localhost,Type=Broker:---------------");
    		ObjectName mbeanName = new ObjectName("org.apache.activemq:BrokerName=localhost,Type=Broker");
    		MBeanInfo info = mbsc.getMBeanInfo(mbeanName);
    		System.out.println("Class: " + info.getClassName());
    		if (info.getAttributes().length > 0){
    			for(MBeanAttributeInfo m : info.getAttributes())
    				System.out.println("	 ==> Attriber:" + m.getName());
    		}
    		if (info.getOperations().length > 0){
    			for(MBeanOperationInfo m : info.getOperations())
    				System.out.println("	 ==> Operation:" + m.getName());
    		}
    		
    		jmxc.close();
    
    	}
    
    }
    


    输出结果:

    Domains:---------------
    	Domain[0] = JMImplementation
    	Domain[1] = com.sun.management
    	Domain[2] = java.lang
    	Domain[3] = org.apache.activemq
    	Domain[4] = java.util.logging
    all ObjectName:---------------
    	java.lang:type=OperatingSystem
    	java.lang:type=MemoryPool,name=Perm Gen
    	java.lang:type=Memory
    	JMImplementation:type=MBeanServerDelegate
    	org.apache.activemq:BrokerName=localhost,Type=Producer,destinationType=Queue,destinationName=kk.qq,clientId=ID_bsb3-1381-1372146822218-0_1,producerId=ID_bsb3-1381-1372146822218-1_1_1_1
    	org.apache.activemq:BrokerName=localhost,Type=Connection,ConnectorName=openwire,Connection=ID_bsb3-1381-1372146822218-0_1
    	org.apache.activemq:BrokerName=localhost,Type=Subscription,persistentMode=Non-Durable,destinationType=Queue,destinationName=kk.qq,clientId=ID_bsb3-1381-1372146822218-0_1,consumerId=ID_bsb3-1381-1372146822218-1_1_1_1
    	org.apache.activemq:BrokerName=localhost,Type=Connection,ConnectorName=openwire,ViewType=address,Name=tcp_//127.0.0.1_1347
    	java.lang:type=GarbageCollector,name=MarkSweepCompact
    	org.apache.activemq:BrokerName=localhost,Type=Broker
    	org.apache.activemq:BrokerName=localhost,Type=Topic,Destination=ActiveMQ.Advisory.Producer.Topic.kk.dp
    	org.apache.activemq:BrokerName=localhost,Type=Topic,Destination=ActiveMQ.Advisory.Topic
    	java.lang:type=MemoryManager,name=CodeCacheManager
    	org.apache.activemq:BrokerName=localhost,Type=Topic,Destination=ActiveMQ.Advisory.Connection
    	org.apache.activemq:BrokerName=localhost,Type=Topic,Destination=ActiveMQ.Advisory.Queue
    	org.apache.activemq:BrokerName=localhost,Type=Topic,Destination=ActiveMQ.Advisory.Consumer.Topic.kk.dp
    	org.apache.activemq:BrokerName=localhost,Type=Connection,ConnectorName=openwire,Connection=ID_bsb3-1346-1372146798953-0_1
    	java.lang:type=Compilation
    	org.apache.activemq:BrokerName=localhost,Type=Connection,ConnectorName=openwire,ViewType=address,Name=tcp_//127.0.0.1_1382
    	java.util.logging:type=Logging
    	java.lang:type=MemoryPool,name=Tenured Gen
    	org.apache.activemq:BrokerName=localhost,Type=Subscription,persistentMode=Non-Durable,destinationType=Topic,destinationName=ActiveMQ.Advisory.TempQueue_ActiveMQ.Advisory.TempTopic,clientId=ID_bsb3-1346-1372146798953-0_1,consumerId=ID_bsb3-1346-1372146798953-1_1_-1_1
    	java.lang:type=MemoryPool,name=Survivor Space
    	java.lang:type=Runtime
    	org.apache.activemq:BrokerName=localhost,Type=Topic,Destination=ActiveMQ.Advisory.Producer.Queue.kk.qq
    	java.lang:type=GarbageCollector,name=Copy
    	org.apache.activemq:BrokerName=localhost,Type=Queue,Destination=kk.qq
    	org.apache.activemq:BrokerName=localhost,Type=Subscription,persistentMode=Durable,subscriptionID=kk-dp-dc,destinationType=Topic,destinationName=kk.dp,clientId=kk-dp
    	java.lang:type=MemoryPool,name=Eden Space
    	org.apache.activemq:BrokerName=localhost,Type=Topic,Destination=ActiveMQ.Advisory.Consumer.Queue.kk.qq
    	java.lang:type=Threading
    	org.apache.activemq:BrokerName=localhost,Type=Topic,Destination=kk.dp
    	com.sun.management:type=HotSpotDiagnostic
    	java.lang:type=ClassLoading
    	org.apache.activemq:BrokerName=localhost,Type=Subscription,persistentMode=Non-Durable,destinationType=Topic,destinationName=ActiveMQ.Advisory.TempQueue_ActiveMQ.Advisory.TempTopic,clientId=ID_bsb3-1381-1372146822218-0_1,consumerId=ID_bsb3-1381-1372146822218-1_1_-1_1
    	java.lang:type=MemoryPool,name=Code Cache
    	org.apache.activemq:BrokerName=localhost,Type=Connector,ConnectorName=openwire
    org.apache.activemq:BrokerName=localhost,Type=Broker:---------------
    Class: org.apache.activemq.broker.jmx.BrokerView
    	 ==> Attriber:Uptime
    	 ==> Attriber:BrokerVersion
    	 ==> Attriber:Slave
    	 ==> Attriber:BrokerName
    	 ==> Attriber:Persistent
    	 ==> Attriber:TransportConnectors
    	 ==> Attriber:BrokerId
    	 ==> Attriber:Topics
    	 ==> Attriber:Queues
    	 ==> Attriber:TemporaryTopics
    	 ==> Attriber:TemporaryQueues
    	 ==> Attriber:TopicSubscribers
    	 ==> Attriber:DurableTopicSubscribers
    	 ==> Attriber:QueueSubscribers
    	 ==> Attriber:TemporaryTopicSubscribers
    	 ==> Attriber:TemporaryQueueSubscribers
    	 ==> Attriber:InactiveDurableTopicSubscribers
    	 ==> Attriber:TopicProducers
    	 ==> Attriber:QueueProducers
    	 ==> Attriber:TemporaryTopicProducers
    	 ==> Attriber:TemporaryQueueProducers
    	 ==> Attriber:DynamicDestinationProducers
    	 ==> Attriber:TotalEnqueueCount
    	 ==> Attriber:TotalDequeueCount
    	 ==> Attriber:TotalConsumerCount
    	 ==> Attriber:TotalProducerCount
    	 ==> Attriber:TotalMessageCount
    	 ==> Attriber:MemoryPercentUsage
    	 ==> Attriber:MemoryLimit
    	 ==> Attriber:StoreLimit
    	 ==> Attriber:StorePercentUsage
    	 ==> Attriber:TempLimit
    	 ==> Attriber:TempPercentUsage
    	 ==> Attriber:StatisticsEnabled
    	 ==> Attriber:OpenWireURL
    	 ==> Attriber:StompURL
    	 ==> Attriber:SslURL
    	 ==> Attriber:StompSslURL
    	 ==> Attriber:VMURL
    	 ==> Attriber:DataDirectory
    	 ==> Attriber:JMSJobScheduler
    	 ==> Operation:gc
    	 ==> Operation:stop
    	 ==> Operation:enableStatistics
    	 ==> Operation:addConnector
    	 ==> Operation:removeConnector
    	 ==> Operation:addNetworkConnector
    	 ==> Operation:removeNetworkConnector
    	 ==> Operation:stopGracefully
    	 ==> Operation:resetStatistics
    	 ==> Operation:disableStatistics
    	 ==> Operation:terminateJVM
    	 ==> Operation:addTopic
    	 ==> Operation:addQueue
    	 ==> Operation:removeTopic
    	 ==> Operation:removeQueue
    	 ==> Operation:createDurableSubscriber
    	 ==> Operation:destroyDurableSubscriber
    	 ==> Operation:reloadLog4jProperties
    	 ==> Operation:getTransportConnectorByType
    	 ==> Operation:start
    

    上面只是拿到了broker的属性和操作,同理也可以拿到其它对象的属性和操作列表。
    根据这些,我们就可以拿到broker,connector,producer,consumer,queue,topic,Subscription等等的Object对象,进一步的操作他们。

    待续。

  • 相关阅读:
    【信号 10】kill函数、raise函数
    【信号 10】信号
    git remote
    分片上传 multipart
    【线程同步】屏障
    【进程间通信】信号量
    【信号 | 10】alarm函数、setitimer 函数
    【rpm】rpm设置
    va_start和va_end使用详解
    idea为什么提示:Duplicated code fragment (**lines long)
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3155373.html
Copyright © 2020-2023  润新知