如何使用JMX对Mule实现监控

本文介绍了如何通过JMX对Mule应用进行监控。首先,在Mule的XML配置文件中添加JMX服务器和适配器配置,然后创建一个监控工程,包含获取所有MBean、Flow、Endpoint以及服务器信息的方法,以便于查看和管理Mule应用的状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

废话少说,直接上代码,下面我将界面对TestOne(使用Mule的应用程序)工程进行监控的步骤:

1、在TestOne的Mule的Xml配置文件中添加如下配置:

<management:jmx-server>
<management:connector-server
url="service:jmx:rmi:///jndi/rmi://localhost:9999/server" rebind="false" />
<management:credentials>
<spring:entry key="admin" value="admin" />
</management:credentials>
</management:jmx-server>
<management:jmx-mx4j-adaptor jmxAdaptorUrl="http://127.0.0.1:8000" />

2、新建一个监控工程:核心类JMXUtil

public class JMXUtil {

private String serverPath;

private String username;

private String password;

static MBeanServerConnection serverConnection;

public JMXUtil(String serverPath, String username, String password){
this.serverPath = serverPath;
this.username = username;
this.password = password;
}

public MBeanServerConnection getJMXConnection() throws Exception {
if(null == serverConnection){
        Map<String, String[]> map = new HashMap<String, String[]>();
        map.put("jmx.remote.credentials", new String[]{username, password});
        JMXServiceURL serviceURL = new JMXServiceURL(serverPath);
        JMXConnector connector = JMXConnectorFactory.connect(serviceURL,map);
        MBeanServerConnection msc = connector.getMBeanServerConnection();
        return msc;
}else{
return serverConnection;
}
}

/**
* @return
* @throws Exception
*/
public List<ObjectInstance> getAllMBean()throws Exception {
List<ObjectInstance> allMBean = new ArrayList<ObjectInstance>();

   Set<ObjectInstance> allMBeans = this.getJMXConnection().queryMBeans(null, null);
   Iterator<ObjectInstance> mbeanIterator = allMBeans.iterator();
   while(mbeanIterator.hasNext()){
    ObjectInstance oi = mbeanIterator.next();
    allMBean.add(oi);
   }
   return allMBean;
}

public List<ObjectInstance> getAllFlow()throws Exception {
List<ObjectInstance> allMBean = new ArrayList<ObjectInstance>();
AttributeValueExp exp = new AttributeValueExp("Type");
        StringValueExp sexp = new StringValueExp("Flow");
        QueryExp exp1 = Query.match(exp, sexp);
   Set<ObjectInstance> allMBeans = this.getJMXConnection().queryMBeans(null, exp1);
   Iterator<ObjectInstance> mbeanIterator = allMBeans.iterator();
   while(mbeanIterator.hasNext()){
    ObjectInstance oi = mbeanIterator.next();
    allMBean.add(oi);
   }
   return allMBean;
}

/**
* 获取所有端点
* @return 端点信息集合
* @throws Exception
*/
public List<Endpoint> getAllEndpoint()throws Exception {
        List<Endpoint> ret = new ArrayList<Endpoint>();
        
        ObjectName endpointName = new ObjectName("Mule.tmp:type=Endpoint,*");
   Set<ObjectInstance> allMBeans = this.getJMXConnection().queryMBeans(endpointName, null);
   Iterator<ObjectInstance> mbeanIterator = allMBeans.iterator();
   while(mbeanIterator.hasNext()){
    ObjectInstance oi = mbeanIterator.next();
    String name = this.getJMXConnection().getAttribute(oi.getObjectName(), "Name").toString();
    String address = this.getJMXConnection().getAttribute(oi.getObjectName(), "Address").toString();
    String statu = this.getJMXConnection().getAttribute(oi.getObjectName(), "Connected").toString();
    String inbound = this.getJMXConnection().getAttribute(oi.getObjectName(), "Inbound").toString();
    String outbound = this.getJMXConnection().getAttribute(oi.getObjectName(), "Outbound").toString();
    String messageExchangePattern = this.getJMXConnection().getAttribute(oi.getObjectName(), "MessageExchangePattern").toString();
   
    String statuStr = statu.equals("true")?"已连接":"未连接";
   
    String type="";
    if(inbound.equals("true")){
    type="接入渠道";
    }else if(outbound.equals("true")){
    type="接出渠道";
    }else{
    type="未知";
    }
    ret.add(new Endpoint(name, address,statuStr,type,null,messageExchangePattern));
   }
   return ret;
}

public ServerInfo getServerInfo()throws Exception {

ServerInfo ret = new ServerInfo();

ObjectName heapName = new ObjectName("java.lang:type=Memory");
        MemoryUsage heapMemoryUsage = MemoryUsage.from((CompositeDataSupport)this.getJMXConnection().getAttribute(heapName, "HeapMemoryUsage"));
        long committed = heapMemoryUsage.getCommitted();
        long used = heapMemoryUsage.getUsed();
        
        ObjectName os = new ObjectName("java.lang:type=OperatingSystem");
        ret.setOsName(this.getJMXConnection().getAttribute(os, "Name").toString());
        ret.setCommitted(committed);
        ret.setUsed(used);
        
        return ret;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值