知识点
- RestHighLevelClient使用
- 异步HttpClient创建
- HTTP连接池
- ES 游标使用
一、引入pom
<!-- httpclient -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.10</version>
</dependency>
<!--为了使用@ConfigurationProperties,还需要这个依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
<version>2.3.7.RELEASE</version>
</dependency>
<!-- ES Java Api -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>${elasticsearch.version}</version>
<exclusions>
<exclusion>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.6.0</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>6.6.0</version>
</dependency>
<!-- commons-pool2 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.6.0</version>
</dependency>
二、配置文件 application-local.yml
es:
index: vehaior-2021
outPath: D:\\usr\\esData.txt
spring:
http-client:
pool:
maxTotalConnect: 500
maxConnectPerRoute: 400
connectTimeout: 3000
readTimeout: 5000
connectionRequestTimout: 200
retryTimes: 3
charset: UTF-8
keepAliveTime: 15
config:
elasticsearch:
address: 1xx.xxx.xxx.xxx:9012
connectTimeout: 10000
socketTimeout: 30000
connectionRequestTimeout: 15000
三、config包
1、ElasticSearchProperty
@Data
@Configuration
@ConfigurationProperties(prefix = "config.elasticsearch")
public class ElasticSearchProperty {
private String address;
private String userName;
private String password;
private int connectTimeout = 10000;
private int socketTimeout = 10000;
private int connectionRequestTimeout = 10000;
}
2、ElasticSearchConfig
@Configuration
@Slf4j
public class ElasticSearchConfig {
@Resource
private ElasticSearchProperty elasticSearchProperty;
@Resource
private HttpClientPoolConfig httpClientPoolConfig;
@Bean
public RestClientBuilder restClientBuilder() {
Assert.notNull(elasticSearchProperty, "elasticSearchProperty cannot null ");
Assert.notNull(elasticSearchProperty.getAddress(), "address hosts cannot null ");
HttpHost[] httpHosts = this.getElasticSearchHttpHosts();
return RestClient.builder(httpHosts).setRequestConfigCallback(requestConfigBuilder -> {
requestConfigBuilder.setConnectTimeout(elasticSearchProperty.getConnectTimeout());
requestConfigBuilder.setSocketTimeout(elasticSearchProperty.getSocketTimeout());
requestConfigBuilder.setConnectionRequestTimeout(elasticSearchProperty.getConnectionRequestTimeout());
return requestConfigBuilder;
}).setFailureListener(new RestClient.FailureListener() {
@Override
public void onFailure(Node node) {
log.error("[ ElasticSearchClient ] >> node :{}, host:{}, fail !", node.getName(),
node.getHost());
}
}).setHttpClientConfigCallback(httpSyncClientBuilder -> {
try {
SSLContext sslContext = SSLContexts.createDefault();
Registry<SchemeIOSessionStrategy> sessionStrategyRegistry = RegistryBuilder
.<SchemeIOSessionStrategy>create()
.register("http", NoopIOSessionStrategy.INSTANCE)
.register("https", new SSLIOSessionStrategy(sslContext))
.build();
IOReactorConfig ioReactorConfig = IOReactorConfig.custom()
.setIoThreadCount(Runtime.getRuntime().availableProcessors())
.build();
ConnectingIOReactor ioReactor = new DefaultConnectingIOReactor(ioReactorConfig);
Assert.