本篇內(nèi)容介紹了“elasticsearch的jvm插件怎么使用”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)建站是一家朝氣蓬勃的網(wǎng)站建設(shè)公司。公司專注于為企業(yè)提供信息化建設(shè)解決方案。從事網(wǎng)站開發(fā),網(wǎng)站制作,網(wǎng)站設(shè)計(jì),網(wǎng)站模板,微信公眾號(hào)開發(fā),軟件開發(fā),微信平臺(tái)小程序開發(fā),10多年建站對(duì)成都玻璃貼膜等多個(gè)領(lǐng)域,擁有多年的網(wǎng)站運(yùn)維經(jīng)驗(yàn)。
elasticsearch 的 jvm插件要實(shí)現(xiàn)Plugin接口,或者繼承子AbstractPlugin抽象類??梢詫?shí)現(xiàn) Module 和 Services 兩種組件,它們分別有 3個(gè) 生命周期 global , index ,shard 。
整體的項(xiàng)目結(jié)構(gòu)是這樣的。
我們這里繼承子AbstractPlugin ,來(lái)增加我們的 TranslogRestModule 模塊
package org.elasticsearch.plugin.translog; import java.util.Collection; import org.elasticsearch.common.collect.Lists; import org.elasticsearch.common.inject.Module; import org.elasticsearch.plugins.AbstractPlugin; public class TranslogRestPlugin extends AbstractPlugin{ public String name() { return "translog-rest"; } @Override public String description() { return "view translog"; } @Override public Collection<Class<? extends Module>> modules() { Collection<Class<? extends Module>> modules = Lists.newArrayList(); modules.add(TranslogRestModule.class); return modules; } }
TranslogRestModule類 ,實(shí)例化我們的 TranslogRestHandler
package org.elasticsearch.plugin.translog; import org.elasticsearch.common.inject.AbstractModule; public class TranslogRestModule extends AbstractModule { @Override protected void configure() { bind(TranslogRestHandler.class).asEagerSingleton(); } }
TranslogRestHandler是我們最主要的一個(gè)類 , 他負(fù)責(zé)處理 /_translog 這個(gè)REST請(qǐng)求,通過(guò) TranslogStreams.readTranslogOperation 方法讀取 Translog 然后用 XContentBuilder 構(gòu)造 JSON格式 ,返回給客戶端。
package org.elasticsearch.plugin.translog; import java.io.FileInputStream; import java.io.IOException; import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.io.stream.InputStreamStreamInput; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.index.translog.Translog; import org.elasticsearch.index.translog.TranslogStreams; import org.elasticsearch.rest.*; import org.elasticsearch.rest.action.support.RestXContentBuilder; import static org.elasticsearch.rest.RestRequest.Method.GET; import static org.elasticsearch.rest.RestStatus.OK; public class TranslogRestHandler implements RestHandler{ private XContentBuilder builder; @Inject public TranslogRestHandler(RestController restController) { restController.registerHandler(GET, "/_translog", this); } public void buildSave(Translog.Index op){ try { builder.startObject() .field("opType").value("save") .field("id").value(op.id()) .field("type").value(op.type()) .field("version").value(op.version()) .field("routing").value(op.routing()) .field("parent").value(op.parent()) .field("timestamp").value(op.timestamp()) .field("ttl").value(op.ttl()) .field("version").value(op.version()) .field("source").value(op.source().toUtf8()) .endObject(); } catch (IOException e) { e.printStackTrace(); } } public void buildCreate(Translog.Create op){ try { builder.startObject() .field("opType").value("create") .field("id").value(op.id()) .field("type").value(op.type()) .field("version").value(op.version()) .field("routing").value(op.routing()) .field("parent").value(op.parent()) .field("timestamp").value(op.timestamp()) .field("ttl").value(op.ttl()) .field("version").value(op.version()) .field("source").value(op.source().toUtf8()) .endObject(); } catch (IOException e) { e.printStackTrace(); } } public void buildDelete(Translog.Delete op){ try { builder.startObject() .field("opType").value("delete") .field("id").value(op.uid().text()) .field("version").value(op.version()) .endObject(); } catch (IOException e) { e.printStackTrace(); } } public void buildDeleteByQuery(Translog.DeleteByQuery op){ try { builder.startObject() .field("opType").value("deleteByQuery") .field("source").value(op.source().toUtf8()) .endObject(); } catch (IOException e) { e.printStackTrace(); } } public XContentBuilder buildTranslog(String filePath,int size){ FileInputStream fs = null; int count = 0; try { fs = new FileInputStream(filePath); InputStreamStreamInput si = new InputStreamStreamInput(fs); while (true) { if(count>=size){ break; } Translog.Operation operation; try { int opSize = si.readInt(); // System.out.println("opSize = "+opSize); operation = TranslogStreams.readTranslogOperation(si); switch (operation.opType()) { case CREATE: Translog.Create create = (Translog.Create) operation; buildCreate(create); break; case SAVE: Translog.Index index = (Translog.Index) operation; buildSave(index); break; case DELETE: Translog.Delete delete = (Translog.Delete) operation; buildDelete(delete); break; case DELETE_BY_QUERY: Translog.DeleteByQuery dbq = (Translog.DeleteByQuery) operation; buildDeleteByQuery(dbq); break; default: System.out.println("Invaid Operation Type"); break; } count++; }catch(Exception e){ break; } } }catch(Exception e){ e.printStackTrace(); }finally{ if(null!=fs){ try { fs.close(); } catch (IOException e) { e.printStackTrace(); } } } return builder; } @Override public void handleRequest(final RestRequest request, final RestChannel channel) { String file = request.param("file"); String sizeStr = request.param("size"); int size = 10; if(null!=sizeStr){ size = Integer.parseInt(sizeStr); } try { builder = RestXContentBuilder.restContentBuilder(request); if(null!=file){ builder.startArray(); buildTranslog(file,size); builder.endArray(); }else{ builder.startObject() .field("success").value(false) .field("error").value("缺少參數(shù):file") .endObject(); } channel.sendResponse(new XContentRestResponse(request,OK,builder)); } catch (IOException e) { e.printStackTrace(); } } }
最后 es-plugin.properties 這個(gè)配置文件,是我們必須的一個(gè)類,它主要告訴ES, 哪個(gè)類是我們插件的實(shí)現(xiàn)類 ,對(duì)于site插件,提供插件的名稱和描述信息,細(xì)節(jié)可以參考 PluginsService類 和 loadPluginsFromClasspath 方法
plugin=org.elasticsearch.plugin.translog.TranslogRestPlugin
好了,現(xiàn)在可以去安裝我們的插件了。有2個(gè)辦法。
手動(dòng)安裝,導(dǎo)出Jar包,復(fù)制到 /plugins/translogRest/TranslogRest.jar 下面。
命令安裝,plugin --install translogRest --url file:/d:/TranslogRest.jar
瀏覽器里或者curl
http://localhost:9200/_translog?pretty=true
返回
{
success: false,
error: "缺少參數(shù):file"
}
表示我們的插件,已經(jīng)安裝成功。
“elasticsearch的jvm插件怎么使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
當(dāng)前標(biāo)題:elasticsearch的jvm插件怎么使用
URL地址:http://aaarwkj.com/article16/gjcsgg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、App開發(fā)、虛擬主機(jī)、品牌網(wǎng)站制作、企業(yè)網(wǎng)站制作、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)