前言:
公司ES集群由ES5.5升级到了ES7.4,而且加了用户认证,本文记录下涉及的相关的内容
目录
一、相关代码
—— 1.1 application.properties 配置文件
—— 1.2 EsConfig 配置类
—— 1.3 EsService service
——1.4 EsController controller
二、参考
一、相关代码
1.1 application.properties
es.schema=http
es.address=ip:port
es.userName=user
es.password=password
es.connectTimeout=5000
es.socketTimeout=5000
es.connectionRequestTimeout=5000
es.maxConnectNum=100
es.maxConnectPerRoute= 100
1.2 EsConfig
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Arrays;
import java.util.Objects;
@Configuration
@ConfigurationProperties(prefix = "es")
public class EsConfig {
/**
* 协议
*/
private String schema;
/**
* 集群地址、端口号
*/
private String[] address;
/**
* 用户名
*/
private String userName;
/**
* 密码
*/
private String password;
/**
* 连接超时时间
*/
private int connectTimeout;
/**
* Socket 连接超时时间
*/
private int socketTimeout;
/**
* 获取连接的超时时间
*/
private int connectionRequestTimeout;
/**
* 最大连接数
*/
private int maxConnectNum;
/**
* 最大路由连接数
*/
private int maxConnectPerRoute;
public String getSchema() {
return schema;
}
public void setSchema(String schema) {
this.schema = schema;
}
public String[] getAddress() {
return address;
}
public void setAddress(String[] address) {
this.address = address;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getConnectTimeout() {
return connectTimeout;
}
public void setConnectTimeout(int connectTimeout) {
this.connectTimeout = connectTimeout;
}
public int getSocketTimeout() {
return socketTimeout;
}
public void setSocketTimeout(int socketTimeout) {
this.socketTimeout = socketTimeout;
}
public int getConnectionRequestTimeout() {
return connectionRequestTimeout;
}
public void setConnectionRequestTimeout(int connectionRequestTimeout) {
this.connectionRequestTimeout = connectionRequestTimeout;
}
public int getMaxConnectNum() {
return maxConnectNum;
}
public void setMaxConnectNum(int maxConnectNum) {
this.maxConnectNum = maxConnectNum;
}
public int getMaxConnectPerRoute() {
return maxConnectPerRoute;
}
public void setMaxConnectPerRoute(int maxConnectPerRoute) {
this.maxConnectPerRoute = maxConnectPerRoute;
}
/**
* ES Low Level Client
*
* @return
*/
@Bean
public RestClient getEsClient() {
HttpHost[] hosts = Arrays.stream(address)
.map(this::makeHttpHost)
.filter(Objects::nonNull)
.toArray(HttpHost[]::new);
final CredentialsProvider credentialsProvider =
new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,
new UsernamePasswordCredentials(userName, password));
RestClientBuilder builder = RestClient.builder(hosts)
.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
@Override
public HttpAsyncClientBuilder customizeHttpClient(
HttpAsyncClientBuilder httpClientBuilder) {
return httpClientBuilder
.setDefaultCredentialsProvider(credentialsProvider);
}
});
return builder.build();
}
private HttpHost makeHttpHost(String s) {
assert StringUtils.isNotEmpty(s);
String[] address = s.split(":");
if (address.length == 2) {
String ip = address[0];
int port = Integer.parseInt(address[1]);
return new HttpHost(ip, port, schema);
} else {
return null;
}
}
}
1.3 EsService
@Service
public class EsService {
Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private RestClient restClient;
public EsService() {
}
public String getIndex(){
String endpoint = EsConstants.SLASH + EsConstants.INDEXNAME;
Map<String, String> queryParams = new HashMap<>();
queryParams.put(EsConstants.QUERYPARAM_PRETTY, null);
String response = executeRequest(HttpEsEnum.GET.toString(), endpoint,null, queryParams);
logger.debug("==== response: {}", response);
return response;
}
/**
* ES执行Rest请求
*
* @param method
* @param endpoint
* @param requestBody
* @param queryParams
* @return
*/
public String executeRequest(String method, String endpoint, String requestBody, Map<String, String> queryParams) {
if (queryParams == null) {
queryParams = Collections.emptyMap();
}
HttpEntity entity = null;
if (StringUtils.isNotEmpty(requestBody)) {
entity = new NStringEntity(requestBody, ContentType.APPLICATION_JSON);
}
String responseBody = null;
try {
logger.debug("execCmd, method={}, endpoint={}, params={}, entity={}", method, endpoint, queryParams, entity);
Response response = restClient.performRequest(method, endpoint, queryParams, entity);
logger.debug("Response statusCode = {}", response.getStatusLine().getStatusCode());
responseBody = EntityUtils.toString(response.getEntity());
} catch (Exception e) {
logger.error("Exec es cmd error. ", e);
}
return responseBody;
}
}
1.4 EsController
@RestController
@RequestMapping("/api/v1/es")
public class EsController {
@Autowired
private EsService esService;
@ResponseBody
@RequestMapping(value = "/getIndex", method = RequestMethod.GET)
public String getIndex() {
return esService.getIndex();
}
}
二、参考
【1】使用RestHighLevelClient 连接带有用户名密码ES机器
【2】ElasticSearch-Java-low-level-rest-client官方文档翻译
【3】【es笔记三】Java Low Level REST Client
网友评论