elasticsearch 플러그 인 개발 강좌
5827 단어 elasticsearch플러그 인 개발
org.elasticsearch.plugins.AbstractPlugin 에서 플러그 인 클래스 계승
package org.elasticsearch.plugin.helloworld;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import org.elasticsearch.common.component.LifecycleComponent;
import org.elasticsearch.common.inject.Module;
import org.elasticsearch.common.logging.ESLogger;
import org.elasticsearch.common.logging.Loggers;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.plugins.AbstractPlugin;
import org.elasticsearch.rest.RestModule;
public class HelloWorldPlugin extends AbstractPlugin {
final ESLogger logger = Loggers.getLogger(getClass());
@Override
public String name() {
//
return "HelloWorld";
}
@Override
public String description() {
//
return "Hello World Plugin";
}
// , Module,
@Override
public void processModule(Module module) {
if(module instanceof RestModule) {
((RestModule)module).addRestAction(HelloWorldHandler.class);
}
if(module instanceof HelloModule) {
logger.info("############## process hello module #####################");
}
}
@Override
public Collection<Module> modules(Settings settings) {
//
// ,
HelloModule helloModule = new HelloModule();
ArrayList<Module> list = new ArrayList<>();
list.add(helloModule);
Collections.unmodifiableList(list);
return list;
}
@SuppressWarnings("rawtypes")
@Override
public Collection<Class<? extends LifecycleComponent>> services() {
// , LifecycleComponent。ES , start
// 。
Collection<Class<?
extends LifecycleComponent>> list = new ArrayList<>();
list.add(HelloService.class);
return list;
}
}
모듈 류 는 사실상 의존 주입 규칙 을 정의 했다.잘 모 르 겠 으 면 Google Guice 문 서 를 볼 수 있 습 니 다.기본적으로 일치 합 니 다.예 를 들 어 Hello Module:
package org.elasticsearch.plugin.helloworld;
import org.elasticsearch.common.inject.AbstractModule;
import org.elasticsearch.common.inject.Scopes;
public class HelloModule extends AbstractModule {
@Override
protected void configure() {
// InjectableService InjectableServiceImpl
// InjectableService , InjectableServiceImpl
bind(InjectableService.class).to(InjectableServiceImpl.class);
// HelloService
bind(HelloService.class).in(Scopes.SINGLETON);
}
}
서로 다른 모듈 은 서로 다른 처리 방식 이 있 습 니 다.예 를 들 어 사례 에서 RestModule 에 Handler 를 추 가 했 습 니 다.
package org.elasticsearch.plugin.helloworld;
import org.elasticsearch.client.Client;
import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.rest.BaseRestHandler;
import org.elasticsearch.rest.BytesRestResponse;
import org.elasticsearch.rest.RestChannel;
import org.elasticsearch.rest.RestController;
import org.elasticsearch.rest.RestRequest;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.rest.RestRequest.Method;
import org.elasticsearch.rest.RestResponse;
public class HelloWorldHandler extends BaseRestHandler {
//
@Inject
protected HelloWorldHandler(Settings settings, RestController controller, Client client) {
super(settings, controller, client);
// Handler L
controller.registerHandler(Method.GET, "/hello/", this);
controller.registerHandler(Method.GET, "/hello/{name}", this);
}
// L
@Override
protected void handleRequest(RestRequest request, RestChannel channel, Client client) throws Exception {
logger.debug("HelloWorldAction.handleRequest called");
final String name = request.hasParam("name") ? request.param("name") : "world";
String content = "{\"success\":true, \"message\":\"hello " +name+ "\"}";
RestResponse response = new BytesRestResponse(RestStatus.OK, BytesRestResponse.TEXT_CONTENT_TYPE, content);
channel.sendResponse(response);
}
}
마지막 으로 클래스 경로 루트 폴 더 에 es-plugin.properties 속성 파일 을 추가 하고 플러그 인 구현 클래스 를 지정 합 니 다.
plugin=org.elasticsearch.plugin.helloworld.HelloWorldPlugin
2.플러그 인 을 jar 패키지 로 만 든 후 설치하면,만약,만약...HOME 대표 Elasticsearch 설치 폴 더.ES 에서HOME/plugins 폴 더 아래 HelloWorld 라 는 폴 더 를 만 듭 니 다.이 폴 더 의 이름 은 플러그 인 이름과 같 아야 합 니 다.(대문자 와 소문 자 구분)그리고 jar 패 키 지 를 HelloWorld 폴 더 로 복사 하고 다시 시작 하면 됩 니 다.실행 할 때:
curl-GET localhost:9200/hello,대응 결 과 를 되 돌려 줍 니 다.
3.플러그 인 을 위 한 페이지 추가
플러그 인 에 L 질문 페이지 를 추가 하고 싶다 고 가정 하 세 요.ESHOME/plugins/HelloWorld 폴 더 아래 에""라 는 이름 을 만 듭 니 다.site"의 폴 더 입 니 다.이 폴 더 의 이름 은 이 어야 합 니 다.site,그리고 대응 하 는 html 페이지 를site 폴 더 를 사용 하면 index.html 파일 이 라 고 가정 하면 통과 할 수 있 습 니 다.
localhost:9200/_plugin/HelloWorld/index.html 에서 L 문 을 진행 합 니 다.
Elasticsearch 가 jsclientAPI 를 제 공 했 기 때문이다.그래서 html 정적 페이지 와 js 를 사용 하면 대응 하 는 기능 을 완성 할 수 있 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
kafka connect e elasticsearch를 관찰할 수 있습니다.No menu lateral do dashboard tem a opção de connectors onde ele mostra todos os clusters do kafka connect conectados atu...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.