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     }

  
原文地址:https://www.cnblogs.com/wzj4858/p/8111282.html