zoukankan      html  css  js  c++  java
  • Elasticsearch 1.X 版本Java插件开发

    接上一篇《Elasticsearch 2.X 版本Java插件开发简述

    开发1.X版本elasticsearch java插件与2.X版本有一些不同,同时在安装部署上也有些不同,主要区别如下:

    1:插件入口plugin区别与2.X版本,改为继承org.elasticsearch.plugins.AbstractPlugin,而Plugin作为一个接口被AbstractPlugin实现,具体代码如下:

     1 package com.gridsum.es.rest.plugin;
     2 
     3 import org.elasticsearch.plugins.AbstractPlugin; 
     4 import org.elasticsearch.rest.RestModule;
     5 
     6 public class MyRestPlugin extends AbstractPlugin {
     7 
     8     public String description() {
     9         // TODO Auto-generated method stub
    10         return "rest plugin 4 elasticsearch-1.x";
    11     }
    12 
    13     public String name() {
    14         // TODO Auto-generated method stub
    15         return "rest plugin 1.x";
    16     }
    17     
    18     public void onModule(RestModule module){
    19         module.addRestAction(MyRestHandler.class);
    20     }
    21 }
    View Code

    2:elasticsearch配置文件的读取从plugin子类中读取改为在handler中读取,具体代码如下:

     1 package com.gridsum.es.rest.plugin;
     2 
     3 import org.elasticsearch.rest.*;
     4 import org.elasticsearch.client.Client;
     5 import org.elasticsearch.common.inject.Inject;
     6 import org.elasticsearch.common.settings.Settings;
     7 import com.gridsum.es.rest.plugin.MyRestFilter;
     8 
     9 //import java.util.Map;
    10 //import java.util.TreeMap;
    11 
    12 public class MyRestHandler extends BaseRestHandler {
    13 
    14     @Inject
    15     protected MyRestHandler(Settings settings, RestController controller,
    16             Client client) {
    17         super(settings, controller, client);
    18         GetPluginSettings(settings);
    19         RestFilter filter = new MyRestFilter(client);
    20         controller.registerFilter(filter);
    21     }
    22 
    23     @Override
    24     protected void handleRequest(RestRequest request, RestChannel channel,
    25             Client client) throws Exception {
    26         // TODO Auto-generated method stub
    27         
    28     }    
    29     
    30     private void GetPluginSettings(Settings settings){
    31         if(null == settings){
    32             MyLogger.info("Get settings failed: the settings is null.");
    33             return;
    34         }
    35         
    36 //        MyLogger.info("Begin to get plugin settings...");
    37 //        Map<String,String> s = settings.getAsMap();
    38 //        for(Map.Entry<String, String> m : s.entrySet()){
    39 //            MyLogger.info("key="+m.getKey()+",value="+m.getValue());
    40 //        }
    41             
    42         String isPluginEnabled = settings.get("ld.enabled");
    43         MethodAuthenticator.setEnabledStr(isPluginEnabled);
    44         if(isPluginEnabled != null && isPluginEnabled.toLowerCase().equals("true")){
    45             MethodAuthenticator.setIsPluginEnabled(true);
    46             String[] denyMethods = settings.getAsArray("ld.deny", new String[]{});
    47             if(denyMethods != null && denyMethods.length > 0){
    48                 MethodAuthenticator.setDenyMethods(denyMethods);
    49             } else {
    50                 MyLogger.warn("The deny method(s) is empty.");
    51             }
    52         } else {
    53             MethodAuthenticator.setIsPluginEnabled(false);
    54         }
    55     }
    56 }
    View Code

    3:Filter的实现跟2.X版本是一致的,均继承自org.elasticsearch.rest.RestFilter抽象类;

    4:配置文件与2.X不同,在src/main/resources下不是使用的plugin-descriptor.properties配置文件,而是一个简单的es-plugin.properties文件,该文件只是简单地指明了AbstractPlugin实现类的命名,如下所示:

    plugin=com.gridsum.es.rest.plugin.MyRestPlugin

    注意这个值包含package+类名,用于反射该类。


    5:同样使用maven打包后,zip文件内包含一个jar文件及第4步定义的properties文件即可;

    6:部署插件的方式与2.X版本有所不同,具体部署指令如下所示:

    /usr/share/elasticsearch/bin/plugin --url file:///opt/myrest.zip --install rest.plugin1x

    与2.X版本部署不同的是,1.X版本中,插件ZIP包的路径由--url获取,而--install后参数为该插件的命名(pom.xml中的project.name值或build.finalName值)。

    7:部署后仍然以同样的方法在默认路径/etc/elasticsearch/elasticsearch.yml的配置文件中加入配置信息,重新启动elasticsearch即可。

    8:关于1.X版本的多版本支持,比2.X方便的是1.X版本插件可以直接支持多版本,在我测试的1.5.0/1.5.2/1.7.3三个版本中,都是同一个插件包,均可正常使用,由此可见,至少在Request处理这个环节上,1.X的多版本处理方式是一致的。

  • 相关阅读:
    C++中substr函数的用法
    最小生成树-克鲁斯卡尔模板
    最小生成树-prim算法模板
    1064. 朋友数(20)
    1076. Wifi密码 (15)【模拟】
    二分搜索与二分答案
    HDU 1969 Pie【二分】
    1047. 编程团体赛(20)
    1057. 数零壹(20)
    L2-3. 悄悄关注【STL+结构体排序】
  • 原文地址:https://www.cnblogs.com/you-you-111/p/5753505.html
Copyright © 2011-2022 走看看