废话少说,直接上代码,下面我将界面对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;
}