JMX的查詢機制

2021-04-14 15:04:18 字數 1849 閱讀 8654

之前查資料做的記錄,放上來,興許某天用的著

jmx發現和查詢服務

乙個jmx agent

通常包括了乙個

mbean server

和若干個協議聯結器和介面卡,也稱作連線伺服器,因為這些東西負責為遠端客戶端提供獲取和操作

mbean server

中的mbean

的介面。但是,如果乙個

mbeanserver

的mbean

數量非常多的話,查詢起來也是非常麻煩的。因此,

jmx mbeanserver

提供了一系列的介面和類,用於描述你的查詢語句(有點類似

sql),簡化你的查詢過程

主要的方法有兩個:

querymbeans(objectname, queryexp)

和querynames(objectname, queryexp)

。乙個用於查詢特定的

mbean

,另乙個則是查詢符合要求的

mbean

的objectname

集合。兩者用法一樣,主要解釋一下引數的含義。

objectname

:定義查詢的範圍,相當於「預查詢」。

構造此objectname

引數時所用的字串可以是簡單的正規表示式,也就是類似

new objectname(「helloagent:type=a,*」)

,意思是「以

helloagent

為字首,且至少包含乙個值為

a的屬性

type

」。「*

」即表示「零個或多個字元」,除了「

*」外,還能用「

?」表示「單個字元」,用法和我們平常的正規表示式一樣。本引數的目的就是縮小查詢範圍。

queryexp

:查詢表示式。

在剛才的

objectname

限定了範圍後,就可以進一步用這個

queryexp

來細化查詢了。為了能表達更加豐富的查詢語義,

jmx總共提供了四個類用於構造查詢表示式,它們是:

■queryexp ■

valueexp ■

attributevalueexp ■

stringvalueexp

具體含義先不解釋,看了後面的例項就能明白了。

jmx還有乙個專門的工具類

query

,它包含了很多靜態方法,用於產生上面這四個類。先看看下面這行**。

queryexp exp = query.gt( query.attr( "count" ), query.value( 10 ) );「gt

」指「大於」,這行**的意思是:「查詢擁有屬性值

count

並且大於10的

mbean

」。換個複雜的例子:

queryexp exp1 = query.equals( query.attr( "inklevel" ),query.value( "low" ) );

queryexp exp2 = query.equals( query.attr( "*****count" ),query.value( "low" ) );

queryexp finalexp = query.or( exp1, exp2 );

mbeanserver.querymbeans( new objectname( "hardware:*" ), finalexp );

前兩句意思差不多,第三句表示「

exp1

或exp2

成立」,最後是執行查詢。從這些例子可以看出,

mbean

的查詢語句和編譯原理、

sqljmx

手冊

JMX讀書筆記) JMX的架構

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

JMX的使用步驟

jmx的運用場景 客戶端呼叫伺服器端的方法。服務端做服務。從這一點來講 jmx可用於分布式專案。將服務分布在不同的伺服器上,形成分布式專案。先從小demo入手,理解jmx是怎麼玩的。1.準備好材料 1.需要乙個mbean介面,並且實現這個介面。2.乙個服務端,用來將介面註冊進去。3.乙個客戶端,用來...

JMX使用中碰到的問題

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