JMX的使用步驟

2021-07-31 14:02:53 字數 3214 閱讀 5185

jmx的運用場景:客戶端呼叫伺服器端的方法。服務端做服務。從這一點來講:jmx可用於分布式專案。將服務分布在不同的伺服器上,形成分布式專案。

先從小demo入手,理解jmx是怎麼玩的。

1.準備好材料:

1.需要乙個mbean介面,並且實現這個介面。

2.乙個服務端,用來將介面註冊進去。

3.乙個客戶端,用來呼叫介面中的方法。

從上面我們可以分析出:

1.mbean介面和實現,與服務端放在一起。

2.客戶端需要mbean介面。而不需要實現。

理解了這兩點:我們可以建立兩個專案。乙個jmxserver,乙個jmxclient.

jmxserver專案:

乙個mbean介面

public inte***ce hellombean
實現這個介面:

public class hello implements hellombean

public void setname(string name)

public void print()

}

然後是服務,首先是開個埠,然後需要將介面註冊進去:

public class jmxserver );

inetaddress ipinte***ce = inetaddress.getbyname("192.168.10.38");

rmisocketfactory rmifactory = rmisocketfactory.getdefaultsocketfactory();

//new anchorsocketfactory(ipinte***ce,"false");

locateregistry.createregistry(1234, null, rmifactory);

// 這個是必須的,否則報 no such object in table之類是異常!!!! 花了相當長時間才發現這點

jmxenvironment.put(

rmiconnectorserver.rmi_server_socket_factory_attribute,

rmifactory);

// 需要認證則這麼寫:

// jmxauthenticator auth = createjmxauthenticator();

// jmxenvironment.put(jmxconnectorserver.authenticator, auth);

jmxconnectorserver connector = jmxconnectorserve***ctory

.newjmxconnectorserver(address, jmxenvironment,

managementfactory.getplatformmbeanserver());

hellombean mbean = new hello();

objectname testmbeanname = new objectname(

"hellombean:name=hellombean");

testmbeanname = new objectname("hellombeandomain", "type",

"hellombean");

mbs.registermbean(mbean, testmbeanname);

connector.start();

} catch (exception e)

}private jmxauthenticator createjmxauthenticator()

string username = scredentials[0];

string pvalue = scredentials[1];

if ("saf".equals(username) && "asswrd".equals(pvalue))

throw new securityexception("authentication failed!");}};

}}

服務端搞定。

接下來是客戶端:

客戶端需要mbean介面,這個介面是跟服務端一致的。

public inte***ce hellombean

然後是連線上ip和埠,拿到註冊的bean,然後呼叫其中的方法。然後服務端就會服務了。

public class jmxclient );

jmxconnector connector = jmxconnecto***ctory.connect(address,

jmxenvironment);

system.out.println("jmxremote.main()2");

mbeanserverconnection mbs = connector.getmbeanserverconnection();

system.out.println("jmxremote.main()3");

threadmxbean threadbean = managementfactory.newplatformmxbeanproxy(

mbs, managementfactory.thread_mxbean_name,

threadmxbean.class);

system.out

.println(" getthreadcount " + threadbean.getthreadcount());

mbeanserverconnection connection = connector

.getmbeanserverconnection();

hellombean hellombean = jmx.newmxbeanproxy(connection, hello_name,

hellombean.class);

system.out.println("aaaaaaaa " + hellombean);

hellombean.setname("lkkkkkkk ddd basdf");

hellombean.print();

connector.close();

} catch (exception e)

}}

jmx的簡單例子就是這樣了。完畢!!!!!!

JMX讀書筆記) JMX的架構

jmx採用的是3層的架構模型 分配層 distributed layer 這一層主要包含了能jmxagent和外部世界進行通訊的元件。有兩種型別的互動,一種稱為adaptor,一種稱為connector.層 agent layer 這一層主要包含了agent和mbeanserver,前者為了方便管理...

JMX使用中碰到的問題

1.mbean中方法的名字切勿用作setxx或者getxx,按照jmx標準這是屬性的存在是根據 mbean 介面中是否存 在getname isname或setname方法 符合 standard mbean 的約定 來推斷的,於是這些方法會被當做 屬性的讀寫許可權,也就是attributes。而方...

JMX的查詢機制

之前查資料做的記錄,放上來,興許某天用的著 jmx發現和查詢服務 乙個jmx agent 通常包括了乙個 mbean server 和若干個協議聯結器和介面卡,也稱作連線伺服器,因為這些東西負責為遠端客戶端提供獲取和操作 mbean server 中的mbean 的介面。但是,如果乙個 mbeans...