Elasticsearch 1.X 版本Java插件开发
接上一篇《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插件开发的更多相关文章
- Elasticsearch 2.X 版本Java插件开发简述
1:elasticsearch插件分类简述 2:Java插件开发要点 3:如何针对不同版本elasticsearch提供多版本的插件 4:插件具有外部依赖时遇到的一些问题(2016-09-07更新) ...
- elasticsearch源码分析及插件开发
ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Apach ...
- SpringBoot整合ElasticSearch实现多版本的兼容
前言 在上一篇学习SpringBoot中,整合了Mybatis.Druid和PageHelper并实现了多数据源的操作.本篇主要是介绍和使用目前最火的搜索引擎ElastiSearch,并和Spring ...
- Elasticsearch教程(二)java集成Elasticsearch
1.添加maven <!--tika抽取文件内容 --> <dependency> <groupId>org.apache.tika</groupId> ...
- Elasticsearch 6.x版本全文检索学习之分布式特性介绍
1.Elasticsearch 6.x版本全文检索学习之分布式特性介绍. 1).Elasticsearch支持集群默认,是一个分布式系统,其好处主要有两个. a.增大系统容量,如内存.磁盘.使得es集 ...
- Elasticsearch 6.x版本全文检索学习之Search API
Elasticsearch 6.x版本全文检索学习之Search API. 1).Search API,实现对es中存储的数据进行查询分析,endpoind为_search,如下所示. 方式一.GET ...
- 微信机器人 返现机器人 pc版本 移动版本 java开发 小范省钱
微信机器人 返现机器人 pc版本 移动版本 java开发 小范省钱 微信搜索微信号 fanli-x 或 扫描下方二维码,可查看效果. 非web版微信,pc/移动版微信 支持新号24小时 不封号! 有任 ...
- 下载各个版本java (Java Development Kit)
本文介绍怎么样下载各个版本java开发工具包. 方法/步骤 打开官方下载网址:http://www.oracle.com/technetwork/java/javase/downloads/ind ...
- 关于消息推送的补充,主要介绍服务端的实现,包含object c 版本 c 版本 java 版本 php 版本 (转)
要实现消息推送功能,我们可以采用第三方(腾讯:信鸽:百度:云推送:极光推送:友盟):当然,因为各种原因,我们不能使用第三方的推送服务,那我们就需要自己编写服务端.在网上寻觅了很久,找到一篇很不错的讲解 ...
随机推荐
- [技巧] 解决Win7下VMware中vmx86.sys报错的问题
电梯直达 1楼 发表于 2012-7-2 15:14:22||倒序浏览|阅读模式 .pcb { margin-right: 0 } 当以普通用户权限运行的时候,VMware便会如此报错"无法 ...
- 开启flask调试
直接将app.debug = True时,程序出错并没有出现调试界面. 按照如下设置,flask+uwsgi情况下,python报错时会在浏览器中提示错误信息.方便调试. from werkzeug. ...
- SpringMVC的Controller中使用线程安全的初始化
因为SpringMVC的Controller默认是单例, 在这种情况下, Controller中使用的私有变量必须也是单例, 例如各种service, 否则会有多线程访问数据互相修改的问题. 对于需要 ...
- 夯实基础之php学习-2提高篇
1,Jpgraph, 详见Php图形化jpgraph 2,文件系统 文件的操作步骤:打开文件->操作文件->关闭文件 打开文件fopen(filename,mode) 关闭文件fclose ...
- 043医疗项目-模块四:采购单模块—采购单明细查询(Dao,Service,Action三层)
前一篇文章我们做的是在医院的角度上添加在采购单里面添加药品.这一篇文章是查看我们添加的采购单信息. 我们先看一下要实现的效果:当: 按下确认添加时,会在这里 显示出刚才添加的数据. 好,我们就来做这个 ...
- ACM水题
ACM小白...非常费劲儿的学习中,我觉得目前我能做出来的都可以划分在水题的范围中...不断做,不断总结,随时更新 POJ: 1004 Financial Management 求平均值 杭电OJ: ...
- JMS + jboss EAP 6.2 示例
.Net中如果需要消息队列功能,可以很方便的使用微软自带的MSMQ,对应到Java中,这个功能就是JMS(Java Message Service). 下面以Jboss EAP 6.2环境,介绍一下基 ...
- C# WebApi Xml序列化问题解决方法:“ObjectContent`1”类型未能序列化内容类型“application/xml;charset=utf-8"的响应正文。...
在调试一个WebApi程序时,出现下面错误: 通过分析怀疑是未添加序列化属性引起的,实体类改为下面结构后,问题依旧: 通过查阅资料和不断尝试,修改实体类的属性注解搞定:
- 详解javascript 存储
javascript用于存储的方式可谓是多种多样,善于应用‘存储’可以大大的提高网站的性能,博主结合日常开发常见需求做一下总结,希望对大家有用- 1.cookie 存储大小: 4kb左右,以20个 ...
- JVM内存管理------GC算法精解(五分钟让你彻底明白标记/清除算法)
相信不少猿友看到标题就认为LZ是标题党了,不过既然您已经被LZ忽悠进来了,那就好好的享受一顿算法大餐吧.不过LZ丑话说前面哦,这篇文章应该能让各位彻底理解标记/清除算法,不过倘若各位猿友不能在五分钟内 ...