成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

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

ARGUS / 1902人閱讀

摘要:通用配置正如初始化中所解釋的,支持提供和,它們?cè)试S公開(kāi)的任何自定義。這些回調(diào)可以修改客戶(hù)端的某些特定行為,而不會(huì)覆蓋初始化的所有其他默認(rèn)配置,本節(jié)介紹一些需要為低級(jí)別進(jìn)行其他配置的常見(jiàn)方案。

通用配置

正如初始化中所解釋的,RestClientBuilder支持提供RequestConfigCallbackHttpClientConfigCallback,它們?cè)试SApache Async Http Client公開(kāi)的任何自定義。這些回調(diào)可以修改客戶(hù)端的某些特定行為,而不會(huì)覆蓋RestClient初始化的所有其他默認(rèn)配置,本節(jié)介紹一些需要為低級(jí)別Java REST Client進(jìn)行其他配置的常見(jiàn)方案。

超時(shí)

配置請(qǐng)求超時(shí)可以通過(guò)在通過(guò)其構(gòu)建器構(gòu)建RestClient時(shí)提供RequestConfigCallback實(shí)例來(lái)完成,該接口有一個(gè)方法接收org.apache.http.client.config.RequestConfig.Builder的實(shí)例作為參數(shù)并具有相同的返回類(lèi)型,可以修改請(qǐng)求配置構(gòu)建器,然后返回。在以下示例中,我們將增加連接超時(shí)(默認(rèn)為1秒)和socket超時(shí)(默認(rèn)為30秒),我們也相應(yīng)地調(diào)整最大重試超時(shí)(默認(rèn)為30秒)。

RestClientBuilder builder = RestClient.builder(
    new HttpHost("localhost", 9200))
    .setRequestConfigCallback(
        new RestClientBuilder.RequestConfigCallback() {
            @Override
            public RequestConfig.Builder customizeRequestConfig(
                    RequestConfig.Builder requestConfigBuilder) {
                return requestConfigBuilder
                    .setConnectTimeout(5000)
                    .setSocketTimeout(60000);
            }
        })
    .setMaxRetryTimeoutMillis(60000);
線程數(shù)

Apache Http Async Client默認(rèn)啟動(dòng)一個(gè)調(diào)度線程,以及連接管理器使用的許多工作線程,與本地檢測(cè)到的處理器數(shù)量一樣多(取決于Runtime.getRuntime().availableProcessors()的返回),線程數(shù)可以修改如下:

RestClientBuilder builder = RestClient.builder(
    new HttpHost("localhost", 9200))
    .setHttpClientConfigCallback(new HttpClientConfigCallback() {
        @Override
        public HttpAsyncClientBuilder customizeHttpClient(
                HttpAsyncClientBuilder httpClientBuilder) {
            return httpClientBuilder.setDefaultIOReactorConfig(
                IOReactorConfig.custom()
                    .setIoThreadCount(1)
                    .build());
        }
    });
基本認(rèn)證

配置基本身份驗(yàn)證可以通過(guò)在通過(guò)其構(gòu)建器構(gòu)建RestClient時(shí)提供HttpClientConfigCallback來(lái)完成,該接口有一個(gè)方法接收org.apache.http.impl.nio.client.HttpAsyncClientBuilder的實(shí)例作為參數(shù)并具有相同的返回類(lèi)型,可以修改http客戶(hù)端構(gòu)建器,然后返回。在以下示例中,我們?cè)O(shè)置了需要基本身份驗(yàn)證的默認(rèn)憑據(jù)提供程序。

final CredentialsProvider credentialsProvider =
    new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,
    new UsernamePasswordCredentials("user", "password"));

RestClientBuilder builder = RestClient.builder(
    new HttpHost("localhost", 9200))
    .setHttpClientConfigCallback(new HttpClientConfigCallback() {
        @Override
        public HttpAsyncClientBuilder customizeHttpClient(
                HttpAsyncClientBuilder httpClientBuilder) {
            return httpClientBuilder
                .setDefaultCredentialsProvider(credentialsProvider);
        }
    });

可以禁用搶占式身份驗(yàn)證,這意味著每個(gè)請(qǐng)求都將在沒(méi)有授權(quán)標(biāo)頭的情況下發(fā)送,以查看是否接受該請(qǐng)求,并且在接收到HTTP401響應(yīng)后,將重新發(fā)送與基本身份驗(yàn)證標(biāo)頭完全相同的請(qǐng)求,如果你希望這樣做,那么你可以通過(guò)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() {
        @Override
        public HttpAsyncClientBuilder customizeHttpClient(
                HttpAsyncClientBuilder httpClientBuilder) {
            httpClientBuilder.disableAuthCaching(); 
            return httpClientBuilder
                .setDefaultCredentialsProvider(credentialsProvider);
        }
    });

httpClientBuilder.disableAuthCaching(); — 禁用搶占式身份驗(yàn)證。

加密通信

也可以通過(guò)HttpClientConfigCallback配置加密通信,作為參數(shù)接收的org.apache.http.impl.nio.client.HttpAsyncClientBuilder公開(kāi)了多種方法來(lái)配置加密通信:setSSLContext、setSSLSessionStrategysetConnectionManager,按照最不重要的優(yōu)先順序排列,以下是一個(gè)例子:

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() {
        @Override
        public HttpAsyncClientBuilder customizeHttpClient(
                HttpAsyncClientBuilder httpClientBuilder) {
            return httpClientBuilder.setSSLContext(sslContext);
        }
    });

如果未提供顯式配置,則將使用系統(tǒng)默認(rèn)配置。

其他

對(duì)于所需的任何其他必需配置,應(yīng)參考Apache HttpAsyncClient文檔:https://hc.apache.org/httpcomponents-asyncclient-4.1.x/。

如果你的應(yīng)用程序在安全管理器下運(yùn)行,則可能會(huì)受到JVM默認(rèn)策略的限制,即無(wú)限期緩存正主機(jī)名解析和負(fù)主機(jī)名解析10秒,如果你連接客戶(hù)端的主機(jī)的已解析地址隨時(shí)間變化,那么你可能希望修改默認(rèn)的JVM行為,可以通過(guò)將networkaddress.cache.ttl=和networkaddress.cache.negative.ttl=添加到Java安全策略來(lái)修改這些。
節(jié)點(diǎn)選擇器

客戶(hù)端以循環(huán)方式將每個(gè)請(qǐng)求發(fā)送到其中一個(gè)配置的節(jié)點(diǎn),可以選擇通過(guò)初始化客戶(hù)端時(shí)需要提供的節(jié)點(diǎn)選擇器來(lái)過(guò)濾節(jié)點(diǎn),這在啟用嗅探時(shí)很有用,以防只有HTTP請(qǐng)求才能觸發(fā)專(zhuān)用主節(jié)點(diǎn)。對(duì)于每個(gè)請(qǐng)求,客戶(hù)端將運(yùn)行最終配置的節(jié)點(diǎn)選擇器以過(guò)濾候選節(jié)點(diǎn),然后從剩余的節(jié)點(diǎn)中選擇列表中的下一個(gè)節(jié)點(diǎn)。

RestClientBuilder builder = RestClient.builder(
        new HttpHost("localhost", 9200, "http"));
builder.setNodeSelector(new NodeSelector() { 
    @Override
    public void select(Iterable 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 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();
                }
            }
        }
    }
});

設(shè)置分配感知節(jié)點(diǎn)選擇器,允許選擇本地rack中的節(jié)點(diǎn)(如果有),否則轉(zhuǎn)到任何rack中的任何其他節(jié)點(diǎn)。它充當(dāng)偏好而不是嚴(yán)格的要求,如果沒(méi)有任何本地節(jié)點(diǎn)可用,它將進(jìn)入另一個(gè)rack,而不是在這種情況下不返回任何節(jié)點(diǎn),這將使客戶(hù)端在首選rack中沒(méi)有任何節(jié)點(diǎn)可用時(shí)強(qiáng)制恢復(fù)本地節(jié)點(diǎn)。

不一致地選擇相同節(jié)點(diǎn)集的節(jié)點(diǎn)選擇器將使循環(huán)行為變得不可預(yù)測(cè)并且可能不公平,上面的偏好示例很好,因?yàn)樗梢越忉屢呀?jīng)影響輪詢(xún)調(diào)度可預(yù)測(cè)性的節(jié)點(diǎn)的可用性,節(jié)點(diǎn)選擇不應(yīng)該依賴(lài)于其他外部因素,否則輪詢(xún)調(diào)度將無(wú)法正常工作。
上一篇:讀取響應(yīng) 下一篇:嗅探器

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/72349.html

相關(guān)文章

  • Elasticsearch Java REST Client(目錄)

    摘要:用于的官方高級(jí)別客戶(hù)端,基于低級(jí)別客戶(hù)端,它公開(kāi)特定的方法,并負(fù)責(zé)請(qǐng)求編組和響應(yīng)反編組。入門(mén)初始化執(zhí)行請(qǐng)求讀取響應(yīng)日志記錄通用配置嗅探器在中被添加。依賴(lài)于核心項(xiàng)目,它接受與相同的請(qǐng)求參數(shù),并返回相同的響應(yīng)對(duì)象。 Elasticsearch Java REST Client Java REST Client有兩種類(lèi)型: Java Low Level REST Client:用于Elast...

    roland_reed 評(píng)論0 收藏0
  • Elasticsearch Java Low Level REST Client(嗅探器)

    摘要:嗅探器允許從正在運(yùn)行的集群中自動(dòng)發(fā)現(xiàn)節(jié)點(diǎn)并將它們?cè)O(shè)置到現(xiàn)有的實(shí)例的最小的庫(kù),它默認(rèn)使用節(jié)點(diǎn)信息檢索屬于集群的節(jié)點(diǎn),并使用解析獲得的響應(yīng)??梢栽谡业娇蛻?hù)端嗅探器的。 嗅探器 允許從正在運(yùn)行的Elasticsearch集群中自動(dòng)發(fā)現(xiàn)節(jié)點(diǎn)并將它們?cè)O(shè)置到現(xiàn)有的RestClient實(shí)例的最小的庫(kù),它默認(rèn)使用節(jié)點(diǎn)信息api檢索屬于集群的節(jié)點(diǎn),并使用jackson解析獲得的json響應(yīng)。 與Elas...

    hiYoHoo 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

ARGUS

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<