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的多版本处理方式是一致的。

 

posted @ 2016-08-09 15:51  CeraSumat  阅读(409)  评论(0编辑  收藏  举报