ActiveMQ笔记(5):JMX监控

系统上线运行后,及时监控报警是很必要的手段,对于ActiveMQ而言,主要监控的指标有:MQ本身的健康状况、每个队列的生产者数量、消费者数量、队列的当前消息数等。

ActiveMQ支持JMX监控,使用步骤如下:

一、修改conf/activemq.xml

<broker … useJmx="true”>
    <managementContext>
        <managementContext createConnector="true" connectorPort=“jmx端口号” connectorHost=“本机ip地址" />         
    </managementContext>
</broker>

二、设置jmx.access、jmx.password的文件权限

?
1
chmod 400 conf /jmx .*

(即:将jmx.password, jmx.access这二个文件设置成只读权限,activemq出于安全考虑,要求这二个文件只读)

三、修改bin\activemq 启动shell脚本

找到invoke_start(){ 这段,然后在前面插入:

?
1
2
3
4
5
ACTIVEMQ_CONF=“jmx.password所在位置的物理路目录"
ACTIVEMQ_SUNJMX_START= "-Dcom.sun.management.jmxremote.port=端口号 "
ACTIVEMQ_SUNJMX_START= "$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.password.file=${ACTIVEMQ_CONF}/jmx.password"
ACTIVEMQ_SUNJMX_START= "$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.access.file=${ACTIVEMQ_CONF}/jmx.access"
ACTIVEMQ_SUNJMX_START= "$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.ssl=false"

然后重启activemq即可。

然后在jconsole中,可以输入 ip地址:jmx端口号

 

其中username,password即jmx.password中定义的用户名和密码。

四、 spring中使用JMX

复制代码
    <bean class="org.springframework.jmx.support.MBeanServerConnectionFactoryBean" id="mbeanServerConnection1">
        <property name="serviceUrl" value="${mq_jmx_url1}"/>
        <property name="connectOnStartup" value="false"/>
        <property name="environment">
            <props>
                <prop key="java.naming.security.principal">
                    ${mq_jmx_user1}
                </prop>
                <prop key="java.naming.security.credentials">
                    ${mq_jmx_passwor1}
                </prop>
            </props>
        </property>
    </bean>
复制代码

其中serviceUrl的值类似:service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi

参考示例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
private List<ActiveMQData> getMonitorDataList(MBeanServerConnection conn, String objectName) {
         List<ActiveMQData> datas = new ArrayList<>();
         try {
             ObjectName objRootName = new ObjectName(objectName);
 
             String brokerName = (String) conn.getAttribute(objRootName, "BrokerName" );
             String brokerId = (String) conn.getAttribute(objRootName, "BrokerId" );
             String openWireUrl = (String) conn.getAttribute(objRootName, "OpenWireURL" );
 
             // 健康状态
             ObjectName healthObjName = new ObjectName(objectName + ",service=Health" );
             String healthStatus = (String) conn.getAttribute(healthObjName, "CurrentStatus" );
 
             // 遍历队列
             ObjectName[] objectNames = (ObjectName[]) conn.getAttribute(objRootName, "Queues" );
             Arrays. sort (objectNames);
 
             List<String> blackList = monitorConfig.getQueueBlackList();
             for (ObjectName queueName : objectNames) {
                 ...
                 Long queueSize = (Long) conn.getAttribute(queueName, "QueueSize" ); // 队列消息数量
                 Long producerCount = (Long) conn.getAttribute(queueName, "ProducerCount" ); // 生产者数量
                 Long consumerCount = (Long) conn.getAttribute(queueName, "ConsumerCount" ); // 消费者数量
                 Long enqueueCount = (Long) conn.getAttribute(queueName, "EnqueueCount" ); // 入队消息总数
                 Long dequeueCount = (Long) conn.getAttribute(queueName, "DequeueCount" ); // 出队消息总数
                 ...
             }
         } catch (Exception e) {
            ...
         }
 
         return datas;
     }

其中objectName值,可以在jconsole中查到 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值