关于elasticsearch:elasticsearch插件开发插件配置声明

es插件首先能够借助es的setting模块裸露配置项,从而提供给用户参数配置的可能。回顾一下上回的插件类代码片段:

public class NacosPlugin extends Plugin {
    protected final Settings settings;
    public NacosPlugin(final Settings settings) {
        this.settings = settings;
        
    }
    
    @Override
    public List<Setting<?>> getSettings() {
        ...
    }
}

getSettings办法须要返回一个Setting汇合,es依据这个汇合把elasticsearch.yml中的配置项通过构造函数传递给插件。
Setting类是泛型的。例如:Setting<Boolean>示意bool类型的配置项。在nacos-elasticsearch中通过申明NACOS_ENABLED配置作为性能开关:

public static final Setting<Boolean> NACOS_ENABLED = 
Setting.boolSetting("nacos.register.enabled", false, Setting.Property.NodeScope);

nacos.register.enabled即为配置在es中的配置项,咱们能够在配置文件中配置如下:

nacos.register.enabled: true

如果不配置,默认为代码中申明的false。在代码中能够通过get形式获取值:

boolean enabled = NACOS_ENABLED.get(this.settings);

比拟罕用的类型都能够作为Setting类型,说两个非凡的TimeValueList。如果心愿提供用户配置工夫值:

nacos.beat.interval: 20s

能够申明为

public static final Setting<TimeValue> NACOS_BEAT_INTERVAL = 
Setting.timeSetting("nacos.beat.interval", TimeValue.timeValueSeconds(10), Setting.Property.NodeScope);

如果心愿提供列表项:

nacos.server.addrs: ["192.168.1.2:8848","192.168.1.2:8848"]

能够申明为

public static final Setting<List<String>> NACOS_SERVERS = 
Setting.listSetting("nacos.server.addrs", Collections.emptyList(), x -> x, Setting.Property.NodeScope);

值得一提的是,有些配置属于敏感信息,例如明码。es提供keystore来保留敏感配置项。用户通过elasticsearch-keystore工具保留配置项,而在代码外面能够获取到这些敏感配置项。例如nacos-elasticsearch反对用keystore保留明码(nacos.server.password.keystore):

bin/elasticsearch-keystore add nacos.server.password.keystore
Enter value for nacos.server.password.keystore:

在代码中须要申明SecureString类型的Setting

public static final Setting<SecureString> NACOS_SECURE_PASSWORD = 
SecureSetting.secureString("nacos.server.password.keystore", null);

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理