欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

elasticsearch的jvm插件怎么使用

本篇內(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)是這樣的。

elasticsearch的jvm插件怎么使用

我們這里繼承子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è)辦法。

  1. 手動(dòng)安裝,導(dǎo)出Jar包,復(fù)制到 /plugins/translogRest/TranslogRest.jar 下面。

  2. 命令安裝,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)

小程序開發(fā)
日韩精品在线观看不卡| 国产亚洲精品精品国产亚洲| 国产日韩精品在线视频| 欧美成人午夜精品一区二区| 欧美日韩视频在线第一页| 日韩欧美中文在线一区二区| 精品亚洲第一区二区免费在线 | 日韩中文字幕免费一区二区| 年轻的少妇一区二区三区| 精品久久久久久久中文字幕| 日本成人大片在线观看| 亚洲天堂男人的天堂狠狠操| 日本韩国亚洲三级在线| 国产婷婷综合一区二区| 亚洲风情亚av在线播放| 91免费版在线观看网址| 免费在线观看av日韩| 亚洲香蕉av一区二区蜜桃| 91麻豆精品国产91久5久久| 99久久热这里只有精品| 国产亚洲av麻豆精品推荐| 中文字幕精品人妻在线| 亚洲一区二区三区日本久久| 欧美日韩国产免费电影| 国产激情久久久久久影院| 日本亚洲精品一区二区三| 中文字幕人妻丝袜二区| 国产精品久久护士96| 亚洲一区二区三区久久精品| 欧美一区日韩二区在线| 亚洲精品尤物福利在线一区| 日本高清精品视频在线| 国产情侣最新地址在线| 草嫩av一区二区三区| 久久热这里只有视频精品| 日韩中文字幕专区在线| 日韩欧美国产麻豆91在线精品| 欧美一区二区在线精品| 亚洲女人淫片在线观看| 四虎国产精品久久久久久网址| 精品一区二区人妻乱交|