您好,登錄后才能下訂單哦!
開發(fā)中需要用到ES的插件, 開發(fā)ES插件需要了解ES的內(nèi)部結(jié)構(gòu), 于是再次開始學(xué)習(xí)ES的源碼。一方面了解插件開發(fā)的套路,一方面了解get接口的實(shí)現(xiàn)細(xì)節(jié)。
了解ES的原理,源碼是文檔最好的補(bǔ)充。源碼甚至比文檔更有助于了解ES的內(nèi)部核心。
首先從git上clone下源碼:
git clone https://github.com/elastic/elasticsearch.git
cd elasticsearch
git tag -l
git checkout v2.4.5
sh run.sh
如果使用run.sh沒有成功,再試一次, 有可能是maven的jar包沒有下載到。
這里使用v2.4.5是由于在編譯es的過程中會(huì)用到相關(guān)的jar包,而https://oss.sonatype.org/content/repositories/snapshots/org/elasticsearch/rest-api-spec/
并不是所有版本的jar包都有, 所以從中選取了v2.4.5, 這跟手機(jī)選號(hào)一樣,純屬個(gè)人主觀。
這里JDK要換成1.8, 1.7的jdk maven會(huì)報(bào)protocol_verson
錯(cuò)誤。
編譯成功后,就會(huì)生成elasticsearch的zip包, 需要解壓,因?yàn)樵创a中會(huì)用到conf文件。
cd /home/shgy/es_workspace/elasticsearch/distribution/zip/target/releases/
unzip elasticsearch-2.4.5-SNAPSHOT.zip
mv elasticsearch-2.4.5-SNAPSHOT /opt/
編譯完成后, 將源碼import到intellij中, intellij的啟動(dòng)參數(shù)
vm options :
-Des.path.home=/opt/elasticsearch-2.4.5-SNAPSHOT
Program arguments:
start
啟動(dòng)成功后使用
curl http://localhost:9200
即可看到經(jīng)典的
{
"name" : "Ruckus",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "ZIl7g86YRiGv8Dqz4DCoAQ",
"version" : {
"number" : "2.4.5",
"build_hash" : "c849dd13904f53e63e88efc33b2ceeda0b6a1276",
"build_timestamp" : "2018-08-12T01:30:55Z",
"build_snapshot" : true,
"lucene_version" : "5.5.4"
},
"tagline" : "You Know, for Search"
}
從源碼啟動(dòng)成功后, 可以做的事情就多了。 比如看看You Know, for Search
是怎么來(lái)的;看看ES內(nèi)部的index/get/search等接口內(nèi)部是如何運(yùn)行的。
更重要的是, 可以將相關(guān)接口的邏輯套用, 依樣畫葫蘆開發(fā)plugin實(shí)現(xiàn)自己的業(yè)務(wù)邏輯。
以debug的方式啟動(dòng)es后, 第一個(gè)斷點(diǎn)可以打在org.elasticsearch.http.netty.HttpRequestHandler.messageReceived()
,這是netty的編程模式。
比如You Know, for Search
, 通過debug, 可以了解到其調(diào)用鏈為:HttpRequestHandler.messageReceived() --- RestMainAction.handleRequest()
Rest_xxx_Action是es所有http接口通用的套路。比如:
RestSearchAction _search
RestGetAction /{index}/{type}/{id}
RestIndexAction /{index}/{type}/{id}
......
可以說, Rest_xxx_Action是es的外殼, 整個(gè)ES的結(jié)構(gòu)大致如下圖所示:
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。