ElasticSearch學習總結(八):外掛的開發
阿新 • • 發佈:2018-12-31
本文主要總結Elasticsearch 自定義 REST 介面的外掛開發流程。
1. 外掛介紹
本外掛邏輯比較簡單,主要用來返回包含指定字首的節點列表。
2. 程式碼說明
外掛主要包括兩部分的內容,一部分用來對外掛的註冊,另一部分負責對業務邏輯的處理
外掛註冊部分:
public class CustomerRestActionPlugin extends Plugin implements ActionPlugin {
public CustomerRestActionPlugin(){
super();
System.out.println("Plugin for node name search" );
}
@Override
public List<Class<? extends RestHandler>> getRestHandlers() {
return Collections.singletonList(CustomerRestAction.class);
}
}
業務邏輯處理部分:
@Override
protected RestChannelConsumer prepareRequest(RestRequest restRequest, NodeClient nodeClient) throws IOException {
final String nodePrefix = restRequest.param ("prefix", "");
return (channel) -> {
nodeClient.admin().cluster().prepareNodesInfo().all().execute(new RestBuilderListener<NodesInfoResponse>(channel) {
@Override
public RestResponse buildResponse(NodesInfoResponse nodesInfoResponse, XContentBuilder xContentBuilder) throws Exception {
List<String> nodes = new ArrayList<String>();
for (NodeInfo nodeInfo : nodesInfoResponse.getNodes()) {
if (nodePrefix.isEmpty()) {
nodes.add(nodeInfo.getNode().getName());
} else if (nodeInfo.getNode().getName().startsWith(nodePrefix)) {
nodes.add(nodeInfo.getNode().getName());
}
}
xContentBuilder.startObject().field("nodes", nodes).endObject();
return new BytesRestResponse(RestStatus.OK, xContentBuilder);
}
});
};
}
3. 打包部署
3.1 打包與部署
通過以下命令生成壓縮包,壓縮包中主要包括jar檔案,配置檔案等。
mvn clean package
通過執行該命令,在target/release目錄下會生成名稱為elasticsearch-esext-5.1.1.zip的壓縮包
3.2 部署
- 在elasticsearch/plugins目錄下,建立CustomerRestActionPlugin子目錄
- 將該壓縮包解壓縮到CustomerRestActionPlugin目錄下
- 重啟ES
3.3 驗證
執行已下命令,檢視返回結果
curl -XGET 'localhost:9200/_masting/nodes?prefix=test'
4. Git程式碼
完整程式碼,可從 https://github.com/Eric-aihua/esext.git 獲取