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 }