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

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

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

 package com.gridsum.es.rest.plugin;

 import org.elasticsearch.plugins.AbstractPlugin;
 import org.elasticsearch.rest.RestModule;

 public class MyRestPlugin extends AbstractPlugin {

     public String description() {
         // TODO Auto-generated method stub
         return "rest plugin 4 elasticsearch-1.x";
     }

     public String name() {
         // TODO Auto-generated method stub
         return "rest plugin 1.x";
     }

     public void onModule(RestModule module){
         module.addRestAction(MyRestHandler.class);
     }
 }

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

 package com.gridsum.es.rest.plugin;

 import org.elasticsearch.rest.*;
 import org.elasticsearch.client.Client;
 import org.elasticsearch.common.inject.Inject;
 import org.elasticsearch.common.settings.Settings;
 import com.gridsum.es.rest.plugin.MyRestFilter;

 //import java.util.Map;
 //import java.util.TreeMap;

 public class MyRestHandler extends BaseRestHandler {

     @Inject
     protected MyRestHandler(Settings settings, RestController controller,
             Client client) {
         super(settings, controller, client);
         GetPluginSettings(settings);
         RestFilter filter = new MyRestFilter(client);
         controller.registerFilter(filter);
     }

     @Override
     protected void handleRequest(RestRequest request, RestChannel channel,
             Client client) throws Exception {
         // TODO Auto-generated method stub

     }    

     private void GetPluginSettings(Settings settings){
         if(null == settings){
             MyLogger.info("Get settings failed: the settings is null.");
             return;
         }

 //        MyLogger.info("Begin to get plugin settings...");
 //        Map<String,String> s = settings.getAsMap();
 //        for(Map.Entry<String, String> m : s.entrySet()){
 //            MyLogger.info("key="+m.getKey()+",value="+m.getValue());
 //        }

         String isPluginEnabled = settings.get("ld.enabled");
         MethodAuthenticator.setEnabledStr(isPluginEnabled);
         if(isPluginEnabled != null && isPluginEnabled.toLowerCase().equals("true")){
             MethodAuthenticator.setIsPluginEnabled(true);
             String[] denyMethods = settings.getAsArray("ld.deny", new String[]{});
             if(denyMethods != null && denyMethods.length > 0){
                 MethodAuthenticator.setDenyMethods(denyMethods);
             } else {
                 MyLogger.warn("The deny method(s) is empty.");
             }
         } else {
             MethodAuthenticator.setIsPluginEnabled(false);
         }
     }
 }

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

Elasticsearch 1.X 版本Java插件开发的更多相关文章

  1. Elasticsearch 2.X 版本Java插件开发简述

    1:elasticsearch插件分类简述 2:Java插件开发要点 3:如何针对不同版本elasticsearch提供多版本的插件 4:插件具有外部依赖时遇到的一些问题(2016-09-07更新) ...

  2. elasticsearch源码分析及插件开发

    ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Apach ...

  3. SpringBoot整合ElasticSearch实现多版本的兼容

    前言 在上一篇学习SpringBoot中,整合了Mybatis.Druid和PageHelper并实现了多数据源的操作.本篇主要是介绍和使用目前最火的搜索引擎ElastiSearch,并和Spring ...

  4. Elasticsearch教程(二)java集成Elasticsearch

    1.添加maven <!--tika抽取文件内容 --> <dependency> <groupId>org.apache.tika</groupId> ...

  5. Elasticsearch 6.x版本全文检索学习之分布式特性介绍

    1.Elasticsearch 6.x版本全文检索学习之分布式特性介绍. 1).Elasticsearch支持集群默认,是一个分布式系统,其好处主要有两个. a.增大系统容量,如内存.磁盘.使得es集 ...

  6. Elasticsearch 6.x版本全文检索学习之Search API

    Elasticsearch 6.x版本全文检索学习之Search API. 1).Search API,实现对es中存储的数据进行查询分析,endpoind为_search,如下所示. 方式一.GET ...

  7. 微信机器人 返现机器人 pc版本 移动版本 java开发 小范省钱

    微信机器人 返现机器人 pc版本 移动版本 java开发 小范省钱 微信搜索微信号 fanli-x 或 扫描下方二维码,可查看效果. 非web版微信,pc/移动版微信 支持新号24小时 不封号! 有任 ...

  8. 下载各个版本java (Java Development Kit)

    本文介绍怎么样下载各个版本java开发工具包. 方法/步骤   打开官方下载网址:http://www.oracle.com/technetwork/java/javase/downloads/ind ...

  9. 关于消息推送的补充,主要介绍服务端的实现,包含object c 版本 c 版本 java 版本 php 版本 (转)

    要实现消息推送功能,我们可以采用第三方(腾讯:信鸽:百度:云推送:极光推送:友盟):当然,因为各种原因,我们不能使用第三方的推送服务,那我们就需要自己编写服务端.在网上寻觅了很久,找到一篇很不错的讲解 ...

随机推荐

  1. 为什么使用Sass

    为什么使用Sass 作为前端(html.javascript.css)的三大马车之一的css,一直以静态语言存在,HTML5火遍大江南北了.javascript由于NODE.JS而成为目前前后端统一开 ...

  2. Java面向对象之接口

    什么是接口:接口是一种规范和标准,他们可以约束类的行为,是一些方法特征的集合 语法: [修饰符] interface 接口名 extends 父接口1,夫接口2....... class 类名 ext ...

  3. IDF实验室WORD隐写术

    上帝也哭泣http://ctf.idf.cn/index.php?g=game&m=article&a=index&id=48 下载下来,发现是一个word文档,看来信息应该就 ...

  4. NOIP1999 旅行家的预算

    题目描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶的距离D2.出发点每升汽油价格P和沿 ...

  5. uva146 ID codes

    Description It is 2084 and the year of Big Brother has finally arrived, albeit a century late. In or ...

  6. AAL template: ROI to brain lobe

    Reference: Altmann A, Schröter M S, Spoormaker V I, et al. Validation of non-REM sleep stage decodin ...

  7. SQL Server 查询性能优化 相关文章

    来自: SQL Server 查询性能优化——堆表.碎片与索引(一) SQL Server 查询性能优化——堆表.碎片与索引(二) SQL Server 查询性能优化——覆盖索引(一) SQL Ser ...

  8. Web服务器父与子 Apache和Tomcat区别

    http://developer.51cto.com/art/201007/210894.htm 熟悉三国的朋友都知道曹操,曹操有二十五个儿子,其中最得曹操宠爱的是曹丕.曹植.曹彰三个,曹丕性格阴冷, ...

  9. Handler 消息传递机制

    1,Handler 的概念Handler 是用来干什么的?1)执行计划任务,可以在预定的时间执行某些任务,可以模拟定时器 2)线程间通信.在Android的应用启动时,会创建一个主线程,主线程会创建一 ...

  10. web学习第一章

    web学习第一章   我是大概9月10日开始走上IT之路的,一开始学习了小段时间的自动化办公软件, 昨天我开始学习客户端网页编程,我了解什么是WEB,一些比较老古董的计算模式和发展历史,印象最让我深刻 ...