Cannot register setting [http.netty.max_composite_buffer_components] twice

问题描述:
项目采用spring boot 2.1版本,elasticsearch 5.*版本,启动之后报错

java.lang.IllegalArgumentException: Cannot register setting [http.netty.max_composite_buffer_components] twice
    at org.elasticsearch.common.settings.SettingsModule.registerSetting(SettingsModule.java:168)
    at org.elasticsearch.common.settings.SettingsModule.(SettingsModule.java:74)
    at org.elasticsearch.client.transport.TransportClient.buildTemplate(TransportClient.java:140)
    at org.elasticsearch.client.transport.TransportClient.(TransportClient.java:268)
    at org.elasticsearch.transport.client.PreBuiltTransportClient.(PreBuiltTransportClient.java:127)
    at org.elasticsearch.transport.client.PreBuiltTransportClient.(PreBuiltTransportClient.java:113)
    at org.elasticsearch.transport.client.PreBuiltTransportClient.(PreBuiltTransportClient.java:103)
    at com.datayes.falcon.biz.config.TransportClientAutoConfig.getElasticsearchClient(TransportClientAutoConfig.java:73)

定位到出错的代码:

 Setting existingSetting = nodeSettings.get(setting.getKey());
                if (existingSetting != null && (setting.isShared() == false || existingSetting.isShared() == false)) {
                    throw new IllegalArgumentException("Cannot register setting [" + setting.getKey() + "] twice");
                }
                nodeSettings.put(setting.getKey(), setting);

debug 定位发现是netty3和netty4的插件参数http.netty.max_composite_buffer_components不一致导致

{
  "key" : "http.netty.max_composite_buffer_components",
  "properties" : [
    "Shared",
    "NodeScope"
  ],
  "is_group_setting" : false,
  "default" : "-1"
}

# 此处少了属性Shared
{
  "key" : "http.netty.max_composite_buffer_components",
  "properties" : [
    "NodeScope"
  ],
  "is_group_setting" : false,
  "default" : "69905"
}

但是之前采用spring boot 1.5.6版本是一直正常,怀疑是架包的版本出现问题,查看项目依赖,发现果然如此:


image.png

修改为5.4.3版本即可(当然将netty3切换成6.4.3版本应该可以)

对比不同版本,主要是Netty4Plugin的默认参数变化,如下图


image.png
image.png

你可能感兴趣的:(Cannot register setting [http.netty.max_composite_buffer_components] twice)