elasticsearch插件開發--插件配置聲明

es插件首先能夠藉助es的setting模塊暴露配置項,從而提供給用戶參數配置的可能。回顧一下上回的插件類代碼片斷:git

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配置做爲功能開關:github

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

nacos.register.enabled即爲配置在es中的配置項,咱們能夠在配置文件中配置以下:elasticsearch

nacos.register.enabled: true

若是不配置,默認爲代碼中聲明的false。在代碼中能夠經過get方式獲取值:ide

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);

若是但願提供列表項:this

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):code

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

在代碼中須要聲明SecureString類型的Settingserver

public static final Setting<SecureString> NACOS_SECURE_PASSWORD = 
SecureSetting.secureString("nacos.server.password.keystore", null);
相關文章
相關標籤/搜索