elasticsearch RestHighLevelClient Client 配置
/**
-
描述:
-
@author liweigao
-
@create 2018-05-15 上午9:30
*/
@Slf4j
@Configuration
@AutoConfigureAfter(ElasticSearchProperties.class)
public class ElasticSearchConfig extends AbstractFactoryBean {@Autowired
private ElasticSearchProperties elasticSearchProperties;
private RestHighLevelClient client;
static final String COLON = “:”;
static final String COMMA = “,”;@Override
public void destroy() {
try {
log.info(“Closing elasticSearch client”);
if (client != null) {
client.close();
}
} catch (final Exception e) {
log.error("Error closing ElasticSearch client: ", e);
}
}@Override
public Class getObjectType() {
return RestHighLevelClient.class;
}@Override
public boolean isSingleton() {
return true;
}@Override
public RestHighLevelClient createInstance() throws IOReactorException {
return buildClient();
}private RestHighLevelClient buildClient() throws IOReactorException {
Assert.hasText(elasticSearchProperties.getClusterNodes(), "[Assertion failed] clusterNodes settings missing."); String[] nodes = split(elasticSearchProperties.getClusterNodes(), COMMA); HttpHost[] hosts = new HttpHost[nodes.length]; for (int i = 0, j = nodes.length; i < j; i++) { String hostName = substringBeforeLast(nodes[i], COLON); String port = substringAfterLast(nodes[i], COLON); Assert.hasText(hostName, "[Assertion failed] missing host name in 'clusterNodes'"); Assert.hasText(port, "[Assertion failed] missing port in 'clusterNodes'"); log.info("adding transport node : " + nodes[i]); hosts[i] = new HttpHost(hostName, Integer.valueOf(port)); } final IOReactorConfig ioReactorConfig = IOReactorConfig.custom().setIoThreadCount(elasticSearchProperties .getIoReactor() .getIoThreadCount()).setConnectTimeout(10).setRcvBufSize(5).setSoKeepAlive(true).build(); final PoolingNHttpClientConnectionManager connManager = new PoolingNHttpClientConnectionManager(new DefaultConnectingIOReactor(ioReactorConfig)); connManager.setMaxTotal(100); connManager.setDefaultMaxPerRoute(100); final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(elasticSearchProperties.getBasic().getUsername(), elasticSearchProperties.getBasic().getUserpass())); RestClientBuilder builder = RestClient.builder(hosts).setHttpClientConfigCallback(callback -> { callback.disableAuthCaching(); return callback.setKeepAliveStrategy((response, context) -> { Args.notNull(response, "HTTP response"); final HeaderElementIterator it = new BasicHeaderElementIterator( response.headerIterator(HTTP.CONN_KEEP_ALIVE)); while (it.hasNext()) { final HeaderElement he = it.nextElement(); final String param = he.getName(); final String value = he.getValue(); if (value != null && param.equalsIgnoreCase("timeout")) { try { return Long.parseLong(value) * 1000; } catch (final NumberFormatException ignore) { } } } return 10 * 1000; }).setDefaultCredentialsProvider(credentialsProvider).setConnectionManager(connManager); }).setRequestConfigCallback(requestConfigBuilder -> { return requestConfigBuilder.setConnectTimeout(elasticSearchProperties.getRequest().getConnectTimeout()) .setSocketTimeout(elasticSearchProperties.getRequest().getSocketTimeout()) .setConnectionRequestTimeout(elasticSearchProperties.getRequest().getConnectionRequestTimeout()); }).setMaxRetryTimeoutMillis(elasticSearchProperties.getRequest().getMaxRetryTimeoutMillis()); client = new RestHighLevelClient(builder); return client;
}
}