Elasticsearch Java Low Level REST Client(通用配置)

通用配置

正如初始化中所解释的,RestClientBuilder支持提供RequestConfigCallbackHttpClientConfigCallback,它们允许Apache Async Http Client公开的任何自定义。这些回调可以修改客户端的某些特定行为,而不会覆盖RestClient初始化的所有其他默认配置,本节介绍一些需要为低级别Java REST Client进行其他配置的常见方案。

超时

配置请求超时可以通过在通过其构建器构建RestClient时提供RequestConfigCallback实例来完成,该接口有一个方法接收org.apache.http.client.config.RequestConfig.Builder的实例作为参数并具有相同的返回类型,可以修改请求配置构建器,然后返回。在以下示例中,我们将增加连接超时(默认为1秒)和socket超时(默认为30秒),我们也相应地调整最大重试超时(默认为30秒)。

RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200)).setRequestConfigCallback(new RestClientBuilder.RequestConfigCallback() {@Overridepublic RequestConfig.Builder customizeRequestConfig(RequestConfig.Builder requestConfigBuilder) {return requestConfigBuilder.setConnectTimeout(5000).setSocketTimeout(60000);}}).setMaxRetryTimeoutMillis(60000);

线程数

Apache Http Async Client默认启动一个调度线程,以及连接管理器使用的许多工作线程,与本地检测到的处理器数量一样多(取决于Runtime.getRuntime().availableProcessors()的返回),线程数可以修改如下:

RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200)).setHttpClientConfigCallback(new HttpClientConfigCallback() {@Overridepublic HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {return httpClientBuilder.setDefaultIOReactorConfig(IOReactorConfig.custom().setIoThreadCount(1).build());}});

基本认证

配置基本身份验证可以通过在通过其构建器构建RestClient时提供HttpClientConfigCallback来完成,该接口有一个方法接收org.apache.http.impl.nio.client.HttpAsyncClientBuilder的实例作为参数并具有相同的返回类型,可以修改http客户端构建器,然后返回。在以下示例中,我们设置了需要基本身份验证的默认凭据提供程序。

final CredentialsProvider credentialsProvider =new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,new UsernamePasswordCredentials("user", "password"));RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200)).setHttpClientConfigCallback(new HttpClientConfigCallback() {@Overridepublic HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);}});

可以禁用抢占式身份验证,这意味着每个请求都将在没有授权标头的情况下发送,以查看是否接受该请求,并且在接收到HTTP401响应后,将重新发送与基本身份验证标头完全相同的请求,如果你希望这样做,那么你可以通过HttpAsyncClientBuilder禁用它:

final CredentialsProvider credentialsProvider =new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,new UsernamePasswordCredentials("user", "password"));RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200)).setHttpClientConfigCallback(new HttpClientConfigCallback() {@Overridepublic HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {httpClientBuilder.disableAuthCaching(); return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);}});

httpClientBuilder.disableAuthCaching(); — 禁用抢占式身份验证。

加密通信

也可以通过HttpClientConfigCallback配置加密通信,作为参数接收的org.apache.http.impl.nio.client.HttpAsyncClientBuilder公开了多种方法来配置加密通信:setSSLContextsetSSLSessionStrategysetConnectionManager,按照最不重要的优先顺序排列,以下是一个例子:

KeyStore truststore = KeyStore.getInstance("jks");
try (InputStream is = Files.newInputStream(keyStorePath)) {truststore.load(is, keyStorePass.toCharArray());
}
SSLContextBuilder sslBuilder = SSLContexts.custom().loadTrustMaterial(truststore, null);
final SSLContext sslContext = sslBuilder.build();
RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200, "https")).setHttpClientConfigCallback(new HttpClientConfigCallback() {@Overridepublic HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {return httpClientBuilder.setSSLContext(sslContext);}});

如果未提供显式配置,则将使用系统默认配置。

其他

对于所需的任何其他必需配置,应参考Apache HttpAsyncClient文档:https://hc.apache.org/httpcomponents-asyncclient-4.1.x/。

如果你的应用程序在安全管理器下运行,则可能会受到JVM默认策略的限制,即无限期缓存正主机名解析和负主机名解析10秒,如果你连接客户端的主机的已解析地址随时间变化,那么你可能希望修改默认的JVM行为,可以通过将networkaddress.cache.ttl=<timeout>和networkaddress.cache.negative.ttl=<timeout>添加到Java安全策略来修改这些。

节点选择器

客户端以循环方式将每个请求发送到其中一个配置的节点,可以选择通过初始化客户端时需要提供的节点选择器来过滤节点,这在启用嗅探时很有用,以防只有HTTP请求才能触发专用主节点。对于每个请求,客户端将运行最终配置的节点选择器以过滤候选节点,然后从剩余的节点中选择列表中的下一个节点。

RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200, "http"));
builder.setNodeSelector(new NodeSelector() { @Overridepublic void select(Iterable<Node> nodes) {/** Prefer any node that belongs to rack_one. If none is around* we will go to another rack till it's time to try and revive* some of the nodes that belong to rack_one.*/boolean foundOne = false;for (Node node : nodes) {String rackId = node.getAttributes().get("rack_id").get(0);if ("rack_one".equals(rackId)) {foundOne = true;break;}}if (foundOne) {Iterator<Node> nodesIt = nodes.iterator();while (nodesIt.hasNext()) {Node node = nodesIt.next();String rackId = node.getAttributes().get("rack_id").get(0);if ("rack_one".equals(rackId) == false) {nodesIt.remove();}}}}
});

设置分配感知节点选择器,允许选择本地rack中的节点(如果有),否则转到任何rack中的任何其他节点。它充当偏好而不是严格的要求,如果没有任何本地节点可用,它将进入另一个rack,而不是在这种情况下不返回任何节点,这将使客户端在首选rack中没有任何节点可用时强制恢复本地节点。

不一致地选择相同节点集的节点选择器将使循环行为变得不可预测并且可能不公平,上面的偏好示例很好,因为它可以解释已经影响轮询调度可预测性的节点的可用性,节点选择不应该依赖于其他外部因素,否则轮询调度将无法正常工作。

Elasticsearch Java Low Level REST Client(通用配置)相关推荐

  1. Elasticsearch Java Low Level REST Client(读取响应)

    读取响应 Response对象由同步performRequest方法返回或作为ResponseListener#onSuccess(Response)中的参数接收,它包装http客户端返回的响应对象并 ...

  2. Elasticsearch java api操作(一)(Java Low Level Rest Client)

    一.说明: 一.Elasticsearch提供了两个JAVA REST Client版本: 1.java low level rest client: 低级别的rest客户端,通过http与集群交互, ...

  3. ElasticSearch Java High level Rest Client 官方文档中文翻译(一)

    ElasticSearch Java High level Rest Client 官方文档中文翻译 一 纯粹记录自己在看官网的es rest high level api 时的翻译笔记,可以对照着官 ...

  4. 6、使用Java Low Level REST Client操作elasticsearch.docx

    阅读文本大概需要3分钟. 1.        查看Index 创建Index时method使用PUT,查看Index时method使用GET /*** 查看api信息** @throws Except ...

  5. Elasticsearch -- Java High Level REST Client (RestHighLevelClient) 使用说明文档

    官方API:https://www.elastic.co/guide/en/elasticsearch/client/index.html 选择自己使用的版本进行查阅

  6. java bulk_Elasticsearch Java High Level REST Client(Bulk API)

    Bulk API Java High Level REST Client提供了Bulk处理器来帮助处理批量请求. Bulk请求 BulkRequest可以使用一个请求执行多个索引.更新和/或删除操作. ...

  7. Java High Level REST Client 中文API(仅供参考)

    1.初始化 兼容性 Java High Level REST Client需要Java 1.8,并依赖于Elasticsearch核心项目,客户端版本与客户端开发的Elasticsearch版本相同, ...

  8. ElasticSearch 使用 High Level REST Client 实现搜索等功能实战

    点击关注公众号,实用技术文章及时了解 ES 全称 Elasticsearch 是一款分布式的全文搜索引擎,在互联网公司中,这款搜索引擎一直被程序员们所推崇.常见的使用场景如ELK日志分析,电商APP的 ...

  9. java抛出异常齁_解決 Elasticsearch 使用 Java High Level REST Client 時出現 NoClassDefFoundError 錯誤...

    因為工作關係需要用到 Elasticsearch,評估過後決定使用 high-level REST client 來進行開發,但在環境建置上卻出現了一些問題 錯誤訊息如下: org.springfra ...

最新文章

  1. hdu 1548 A strange lift
  2. 开源的javascript实现页面打印功能,兼容所有的浏览器(情况属实)
  3. 无引脚表贴元器件焊接
  4. 利用smarty生成静态页的关键代码
  5. 聚焦可信AI与产业应用,百度联合发起千言计划实现情感分析2.0升级
  6. [C/C++面试题]-错题笔记与解析
  7. vue源码分析:渲染篇
  8. anaconda下载太慢怎么办_BBTIME我爱上了 Anaconda
  9. 清华毕业生做保姆,那又如何呢
  10. WordPress架构简单剖析
  11. 整数的素因子分解:Pollard rho method
  12. SQL中DB2数据库修改某字段长度或类型
  13. 3位格雷码的顺序编码_格雷码编码规则_格雷码有什么规律
  14. Fabric-02Peer、Orderer以及CA
  15. iOS监听模式系列之本地通知Notification
  16. SQL基本语句——查询
  17. root后启动不了黑域,root激活黑域
  18. Altium Designer 生成 BOM(Bill of Material)
  19. 肺功能曲线图怎么看_肺功能检查报告怎么看
  20. odoo16 生成二维码

热门文章

  1. [数据库]---mysql数据库 使用binlog+canal或binlake进行数据库的复制
  2. 对象引用 String引用 基本类型引用 差别
  3. CoreAnimation编程指南(四)图层树结构
  4. linux7端口聚合,centos7配置链路聚合
  5. python 3d绘图库_python – 用于科学3d绘图的Mayavi的替代品
  6. android 代码 shape,Android Shape控件美化实现代码
  7. 如何把meshlab中的圆环去掉_如何设计一座太空城?
  8. ecshop 模板 php代码,ecshop不能在模板文件.dwt和.lbi中直接添加php代码的解决方法...
  9. 做到年薪50W是如何学习Java架构技术的?
  10. signature=8405d26e250ad07c44560263cb1d4fc0,Systems for analyzing microtissue arrays