接上一篇《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. AC日记——整理药名 openjudge 1.7 15

    15:整理药名 总时间限制:  1000ms 内存限制:  65536kB 描述 医生在书写药品名的时候经常不注意大小写,格式比较混乱.现要求你写一个程序将医生书写混乱的药品名整理成统一规范的格式,即 ...

  2. [No000046]为什么跳槽加薪会比内部调薪要高?

    有网友在知乎提问: 最近在思考一个问题,为什么跳槽往往意味着加薪? 如果一个人确有价值,为什么在原来的公司没有在薪水上体现出来?如果没有价值,为什么跳槽以后就会加薪?还是可以单纯的解释为,应聘者和招聘 ...

  3. java.io.IOException: 您的主机中的软件中止了一个已建立的连接解决办法

    问题现象和http://hi.baidu.com/cara_cloud/item/193a3ee327546d395a2d64be描述的一样,就是在eclipse的console栏中一直显示java. ...

  4. http协议(三)几种数据传输方式

    说说http协议的一些特点: 1)无状态 http协议是一种自身不对请求和响应之间的通信状态进行保存的协议,即无状态协议. 这种设置的好处是:更快的处理更多的请求事务,确保协议的可伸缩性 不过随着we ...

  5. Android入门篇1-Hello World

    一.android studio安装. 二.项目结构 三.运行流程 src->main->AndroidMainifest.xml注册HelloWorldActivity(intent-f ...

  6. HashTable, HashMap, LinkedHashMap, ConcurrentHashMap

    HashTable: 不允许null的key或value, 线程安全 HashMap: 允许一个null的key, 无限的null value, 非线程安全 LinkedHashMap: HashMa ...

  7. Inline Workers--Web workers without a separate Javascript file

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> </head&g ...

  8. Gruntjs: grunt-contrib-jst

    预编译Underscore模板到JST文件(Underscore:JS工具库) generate JavaScript template functions Gruntfile的配置实例: modul ...

  9. JAVA CDI 学习(2) - Scope 生命周期

    在上一节中,我们已经知道了如何用@Inject实现基本注入,这一节研究Bean实例注入后的“生命周期”,web application中有几种基本的生命周期(不管哪种编程语言都类似) 1.Applic ...

  10. Nutch搜索引擎系列(目录)

    下面是Nutch搜索系列目录,希望对研究Nutch的同学有所帮助. 目录安排: 1)Nutch搜索引擎(第1期)_ Nutch简介及安装[下载] 2)Nutch搜索引擎(第2期)_ Solr简介及安装 ...