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

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中没有任何节点可用时强制恢复本地节点。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/508824.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

elasticsearch实战篇

文章目录1.新建SpringBoot项目依赖2.实现配置模块 config控制层 controller模型层 model服务层 service工具 util主类单元测试1.新建SpringBoot项目 依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org…

Docker 部署java服务

作业描述&#xff1a; &#xff08;1&#xff09;Hot是应用程序(springboot)&#xff0c;打成jar包&#xff1a;docker-demo-1.0-SNAPSHOT.jar &#xff08;2&#xff09;利用dockerfile将docker-demo-1.0-SNAPSHOT.jar构建成镜像docker-demo Dockerfile-docker-demo&#xf…

单向链表 双向链表 java代码实现

文章目录单向链表代码实现单元测试控制台打印头插法尾插法双向链表代码实现单元测试控制台打印头插法尾插法单向链表 代码实现 package csdn.dreamzuora.list;/*** author: weijie* Date: 2020/10/15 15:28* Description:*/ public class SingleNode {int id;String name…

栈、队列 java代码实现

文章目录普通队列数组实现java代码实现单元测试控制台打印链表实现java代码实现单元测试控制台打印LinkedList队列使用优先队列&#xff1a;PriorityQueue使用栈数组实现java代码实现单元测试控制台打印链表实现java代码实现单元测试控制台打印普通队列 概念&#xff1a;先入先…

递归学习 斐波那契 java代码实现

文章目录java代码单元测试java代码 package csdn.dreamzuora.recursion;/*** Title: 斐波那契额* Description:*斐波那契数列&#xff1a;0、1、1、2、3、5、8、13、21、34、55.....* f[n] f[n-2] f[n-1]* 优点&#xff1a;代码简单* 缺点&#xff1a;占用空间较大、如果递归…

二分查找 java代码实现

文章目录二分查找java代码单元测试二分查找java代码 package csdn.dreamzuora.query;/*** Title: 二分查找* Description:* 时间复杂度&#xff1a;log2N* version 1.0* author: weijie* date: 2020/10/16 13:52*/ public class BinarySearch implements Search {int[] array;…

二叉查找树 java代码实现

文章目录代码实现节点实现类二叉树实现单元测试代码实现 节点实现类 package csdn.dreamzuora.tree;/*** Title:* Description:** version 1.0* author: weijie* date: 2020/10/19 13:30*/ public interface Node { }package csdn.dreamzuora.tree;import java.io.Serializab…

红黑树 java代码实现

文章目录代码实现节点实现类红黑树实现单元测试代码实现 节点实现类 package csdn.dreamzuora.tree;/*** Title:* Description:** version 1.0* author: weijie* date: 2020/10/19 13:30*/ public interface Node { }package csdn.dreamzuora.tree;import java.io.Serializab…

冒泡排序、快速排序 java代码实现

文章目录冒泡排序源码实现单元测试优化快速排序源码实现单元测试冒泡排序 源码实现 package csdn.dreamzuora.sort;import java.util.List;/*** Title: 冒泡排序* Description:* 冒泡排序思想是把相邻的元素进行两两比较&#xff0c;当前面元素大于后面元素则进行交换* versi…

计数排序和桶排序 java代码实现

文章目录计数排序java代码实现单元测试桶排序java代码实现单元测试计数排序 java代码实现 package csdn.dreamzuora.sort;import java.util.List;/*** Title: 抽象出排序类* Description:** version 1.0* author: weijie* date: 2020/10/22 17:59*/ public abstract class So…

堆排序和归并排序 java代码实现

文章目录堆排序java代码实现单元测试归并排序java代码实现单元测试堆排序 java代码实现 package csdn.dreamzuora.sort;import java.util.List;/*** Title: 抽象出排序类* Description:** version 1.0* author: weijie* date: 2020/10/22 17:59*/ public abstract class Sort…

Hbase入门篇

HBase&#xff1a; 数据库&#xff1a;是一种面向列族存储的非关系型数据库用于存储结构化和非结构化数据&#xff1a;适用于单表非关系型数据的存储&#xff0c;不适合做关联查询&#xff0c;类似于JOIN等操作基于HDFS&#xff1a;数据持久化存储的体现形式是HFile&#xff0…

ElasticSearch入门篇

文章目录控制台RESTFULL操作REST风格说明基于REST命令说明&#xff1a;es支持的数据类型核心数据类型ik分词器使用ik_smart最少切分ik_max_word最细粒度索引操作索引库创建创建文档方式指定索引类型(以后这种方式会被弃用)不指定索引类型利用默认的_doc类型更新文档方式一&…

【待完成】并发包下常用到线程工具类汇总

文章目录并发容器BlockingQueueArrayBlockingQueueLinkedBlockingQueuePriorityBlockingDelayQueueSynchronousQueueBlockingDequeCopyOnWriteCopyOnWriteArrayListCopyOnWriteArraySetConcurrentLinkedQueue/DequeConcurrentHashMapConcurrentSkipListMap/Set同步工具类AQS实现…

判断对象属性值是否为空

private boolean checkObjFieldIsNotNull(Object obj){try {for (Field f : obj.getClass().getDeclaredFields()) {f.setAccessible(true);if (f.get(obj) ! null) {return true;}}}catch (IllegalAccessException e){}return false;}

爬虫中如何获取页面编码类型

获取页面的编码格式的三种方式&#xff1a; 根据Response中的header获取编码格式根据页面标签中的meta获取根据页面内容识别自动识别出编码格式&#xff0c;经过测试准确率比较高 三种方式可以结合使用&#xff0c;由于inputStream不能够被复用&#xff0c;但是inputStrem没有…

记录一次异常 java.lang.NoClassDefFoundError: org/apache/lucene/codecs/lucene53/Lucene53NormsFormat

异常信息&#xff1a; java.lang.NoClassDefFoundError: org/apache/lucene/codecs/lucene53/Lucene53NormsFormatat java.lang.Class.getDeclaredConstructors0(Native Method)at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)at java.lang.Class.getCon…

Spark集群部署与架构

在大数据时代&#xff0c;处理海量数据需要分布式计算框架。Apache Spark作为一种强大的大数据处理工具&#xff0c;可以在集群中高效运行&#xff0c;处理数十TB甚至PB级别的数据。本文将介绍如何构建和管理Spark集群&#xff0c;以满足大规模数据处理的需求。 Spark集群架构…

elasticsearch高级查询进阶

文章目录前期准备应用场景1.constant_score查询-不考虑文档频率得分&#xff0c;与搜索关键字命中更多的返回结果2.sort排序-分数相同情况下&#xff0c;按照指定价格域排序3.不考虑文档频率TF/IDF情况下&#xff0c;不同域打分权重不同进行召回4.不考虑文档频率TF/IDF情况下&a…

java核心技术-多线程并发设计原理以及常见面试题

文章目录写在前面多线程回顾Thread和Runnable面试官&#xff1a;为什么我们在项目中推荐使用使用Runnable方法而不用继承Thread&#xff1f;面试官&#xff1a;Callable为什么可以带返回值&#xff0c;你知道底层原理&#xff1f;面试题&#xff1a;线程了解&#xff1f;给我讲…