elasticsearch插件开发

1.ES插件,继承自Plugin抽象类,其内部方法比较简单,我们看一下方法。

 

主要方法功能如下:

additionalSettings方法可以为节点添加额外的setting设置,但如果节点的配置文件有相同设置,则以配置文件为准。

description和name方法是在PluginsService加载并初始化Plugin对象时候被调用,用来描述本插件的信息。

Collection<Module> indexModules(Settings indexSettings)方法:自定义索引级别的Module,创建索引时调用,根据传入的setting返回自定义的module集合

Collection<Class<? extends Closeable>> indexServices()方法:在removeIndex时候自动调用,进行一些资源释放工作

Collection<Module> nodeModules()方法:节点级别的module,在构造Node或TransportClient对象的时候调用

Collection<Class<? extends LifecycleComponent>> nodeServices()方法:自定义的节点级服务,在节点生命周期变化时候调用响应的start stop close方法。

Collection<Module> shardModules(Settings indexSettings)方法:自定义分片级别的Module,创建shard时调用,根据传入的setting返回自定义的module集合

public Collection<Module> indexModules(Settings indexSettings)方法:在closeShard时自动调用,进行一些资源释放工作

此外,还能添加多个重载的onModule(Module module)方法,用于调整节点自带的module。

 

2.开发自定义插件

下面编写我们的第一个插件class AuthorityServerPlugin extends Plugin 

其内部结构如下:

 

 

1.1 描述了插件基本信息,

1.2通过重载多个onModule方法来操作指定的model。节点启动的时候会调用onModule方法

依次调用各插件的OnModule方法,根据OnModule参数指定的models类型来依次操作对应的Model,最后再初始化每个model。比如我们这里修改了3个modes
为RestModule添加一个过滤器
public void onModule(RestModule module) { module.addRestAction(AuthorityRestFilter.class); }
为actionModels添加自定义过滤器AuthorityActionFilter
public void onModule(final ActionModule module) {
    module.registerFilter(AuthorityActionFilter.class);
}
使用自定义AuthorityTransportService来代替默认的TransportService
public void onModule(final TransportModule module) {
    module.setTransportService(AuthorityTransportService.class, name());
}
1.3 添加自定义service.
LifecycleComponent接口随着Node生命周期的变化,依次调用其实现类的doStart 、doStop 和 doClose方法。
1     public Collection<Class<? extends LifecycleComponent>> nodeServices() {
2         final Collection<Class<? extends LifecycleComponent>> services = new ArrayList<Class<? extends LifecycleComponent>>();
3         services.add(ConfigurationService.class);
4         return services;
5     }

 


  

 

posted @   daniel456  阅读(996)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示