第十四章 管理和监控ActiveMQ【笔记】

概述:什么软件都需要一个管理和监控

JMX(Java Management Extension )API(监控java对象)

当然它自带web 控制界面

14.1、APIs

监控的任务主要有:

  • 获取代理器分析,例如消费者个数
  • 添加新连接或移除已经存在的
  • 修改代理器的配置文件

14.1.1. JMX

管理Bean 称之为MBeans

14.1.1.1、本地VS远程JMX获取

配置打开监控

<broker xmlns="http://activemq.org/config/1.0" useJmx="true"
brokerName="localhost"
dataDirectory="${activemq.base}/data">
...
</broker>

若拒绝useJmx="false"

14.1.1.2、为ActiveMQ暴露JMX MBeans

ActiveMQ JMX 配置

<broker xmlns="http://activemq.org/config/1.0" useJmx="true"
brokerName="localhost"
dataDirectory="${activemq.base}/data">
...
</broker>

14.1.1.3、ActiveMQ使用JMX APIs

public class Stats {
	public static void main( String[] args ) throws Exception
	{
		JMXServiceURL url = new JMXServiceURL(
			"service:jmx:rmi:///jndi/rmi://localhost:2011/jmxrmi" );
		JMXConnector connector = JMXConnectorFactory.connect( url, null );
		connector.connect();
		MBeanServerConnection	connection	= connector.getMBeanServerConnection();
		ObjectName		name		= new ObjectName(
			"my-broker:BrokerName=localhost,Type=Broker" );
		BrokerViewMBean mbean = (BrokerViewMBean) MBeanServerInvocationHandler
					.newProxyInstance( connection, name, BrokerViewMBean.class, true ); ·
		System.out.println( "Statistics for broker " + mbean.getBrokerId()
				    + " - " + mbean.getBrokerName() );


		System.out.println( "\n-----------------\n" );
		System.out.println( "Total message count: " + mbean.getTotalMessageCount() + "\n" );
		System.out.println( "Total number of consumers: " + mbean.getTotalConsumerCount() );
		System.out.println( "Total number of Queues: " + mbean.getQueues().length );
		for ( ObjectName queueName : mbean.getQueues() )
		{
			QueueViewMBean queueMbean = (QueueViewMBean) MBeanServerInvocationHandler
						    .newProxyInstance( connection, queueName,
								       QueueViewMBean.class, true );
			System.out.println( "\n-----------------\n" );
			System.out.println( "Statistics for queue " + queueMbean.getName() );
			System.out.println( "Size: " + queueMbean.getQueueSize() );
			System.out.println( "Number of consumers: " + queueMbean.getConsumerCount() ); ¹
		}
	}
}

14.1.1.4、JMX配置特性

14.1.1.4.1、开启远程JMX获取权限

window下ActiveMQ启动脚本

if "%SUNJMX%" == "" set SUNJMX=-Dcom.sun.management.jmxremote.port=1099 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false
14.1.1.4.2、限制JMX获取特定主机

它通过JavaSE  RMI属性来限制,而不是ActiveMQ自身,java.rmi.server.hostname

在window下

if "%SUNJMX%" == "" set SUNJMX=-Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=localhost
14.1.1.4.3、配置JMX密码授权

在$JAVA_HOME/jre/lib/management/文件下进行设置

14.1.2、提示消息

配置提示信息支持

<broker xmlns="http://activemq.org/config/1.0" useJmx="true" brokerName="localhost" dataDirectory="${activemq.base}/data" advisorySupport="true">
    <destinationPolicy>
        <policyMap>
            <policyEntries>
            <policyEntry topic=">" sendAdvisoryIfNoConsumers="true" />·</policyEntries>
        </policyMap>
    </destinationPolicy>
    <!-- The transport connectors ActiveMQ will listen to -->
    <transportConnectors>
        <transportConnector name="openwire" uri="tcp://localhost:61616" />
    </transportConnectors>
</broker>
提示信息例子

public class Advisory {
	protected static String				brokerURL = "tcp://localhost:61616";
	protected static transient ConnectionFactory	factory;
	protected transient Connection			connection;
	protected transient Session			session;
	public Advisory() throws Exception
	{
		factory		= new ActiveMQConnectionFactory( brokerURL );
		connection	= factory.createConnection();
		connection.start();
		session = connection.createSession( false, Session.AUTO_ACKNOWLEDGE ); 
	}


	public static void main( String[] args ) throws Exception
	{
		Advisory	advisory	= new Advisory();
		Session		session		= advisory.getSession();
		for ( String stock : args )
		{
			ActiveMQDestination destination =
				(ActiveMQDestination) session.createTopic( "STOCKS." + stock );
			Destination consumerTopic =
				AdvisorySupport.getConsumerAdvisoryTopic( destination ); ·
			System.out.println( "Subscribing to advisory " + consumerTopic );


			MessageConsumer consumerAdvisory = session.createConsumer( consumerTopic );
			consumerAdvisory.setMessageListener( new ConsumerAdvisoryListener() );
			Destination noConsumerTopic =
				AdvisorySupport.getNoTopicConsumersAdvisoryTopic( destination ); ¸
			System.out.println( "Subscribing to advisory " + noConsumerTopic );


			MessageConsumer noConsumerAdvisory = session.createConsumer( noConsumerTopic );
			noConsumerAdvisory.setMessageListener( new NoConsumerAdvisoryListener() );
		}
	}


	public Session getSession()
	{
		return(session);
	}
}


14.2、工具

14.2.1、命令行工具

active-admin.bat 文件

完成功能:

  • 启动和停止代理器
  • 列出所有可用的代理器
  • 查询代理器特定状态的信息
  • 浏览代理器目的地

例如启动

$ ./bin/activemq-admin start

14.2.1.2、列出可用代理器

$ ./bin/activemq-admin list

14.2.1.3、查询代理器

$ ./bin/activemq-admin query -QQueue=*
-QQueue=* 打印所有所有队列代理器的状态信息

14.2.1.4、浏览代理器的目的地

${ACTIVEMQ_HOME}/bin/activemq-admin browse --amqurl tcp://localhost:61616 JOBS.delete

14.2.2、命令代理

简单命令行不能到达目的, 配置XMPP协议传输

命令代理配置

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost"
dataDirectory="${activemq.base}/data">
<transportConnectors>
<transportConnector name="openwire" uri="tcp://localhost:61616"/>
<transportConnector name="xmpp" uri="xmpp://localhost:61222"/>
</transportConnectors>
</broker>
<commandAgent xmlns="http://activemq.apache.org/schema/core" brokerUrl="vm://localhost"/>

这里选择支持XMPP协议的adiumx(只支持OS系统)

14.2.3、JConsole

14.2.4、Web Console(web控制台)

http://localhost:8161/admin/

14.3、日志

14.3.1、客户端日志

log4j.rootLogger=INFO, out, stdout
log4j.logger.org.apache.activemq.spring=WARN
log4j.logger.org.springframework=WARN
log4j.logger.org.apache.xbean.spring=WARN
log4j.logger.org.apache.activemq.transport.failover.FailoverTransport=DEBUG
log4j.logger.org.apache.activemq.transport.TransportLogger=DEBUG

14.3.2、日志拦截器

ActiveMQ自带日志拦截器

在activemq.xml配置

<plugins>
<loggingBrokerPlugin/>
</plugins>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值