2017-07-04 04:58:57 -04:00
== Common configuration
2016-07-29 05:22:47 -04:00
2017-07-06 04:05:50 -04:00
As explained in <<java-rest-low-usage-initialization>>, the `RestClientBuilder`
supports providing both a `RequestConfigCallback` and an `HttpClientConfigCallback`
which allow for any customization that the Apache Async Http Client exposes.
Those callbacks make it possible to modify some specific behaviour of the client
without overriding every other default configuration that the `RestClient`
is initialized with. This section describes some common scenarios that require
additional configuration for the low-level Java REST Client.
2016-07-29 05:22:47 -04:00
2017-07-04 04:58:57 -04:00
=== Timeouts
2016-07-29 05:22:47 -04:00
Configuring requests timeouts can be done by providing an instance of
`RequestConfigCallback` while building the `RestClient` through its builder.
2017-07-26 06:17:21 -04:00
The interface has one method that receives an instance of `org.elasticsearch.client.http.client.config.RequestConfig.Builder`
(see the https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/client/config/RequestConfig.Builder.html[Apache documentation])
2016-07-29 05:22:47 -04:00
as an argument and has the same return type. The request config builder can
be modified and then returned. In the following example we increase the
2016-12-05 10:54:51 -05:00
connect timeout (defaults to 1 second) and the socket timeout (defaults to 30
seconds). Also we adjust the max retry timeout accordingly (defaults to 30
2016-07-29 05:22:47 -04:00
seconds too).
2017-07-06 04:05:50 -04:00
["source","java",subs="attributes,callouts,macros"]
2016-07-29 05:22:47 -04:00
--------------------------------------------------
2017-07-06 04:05:50 -04:00
include-tagged::{doc-tests}/RestClientDocumentation.java[rest-client-config-timeouts]
2016-07-29 05:22:47 -04:00
--------------------------------------------------
2017-07-04 04:58:57 -04:00
=== Number of threads
2016-07-29 05:22:47 -04:00
The Apache Http Async Client starts by default one dispatcher thread, and a
number of worker threads used by the connection manager, as many as the number
of locally detected processors (depending on what
`Runtime.getRuntime().availableProcessors()` returns). The number of threads
can be modified as follows:
2017-07-06 04:05:50 -04:00
["source","java",subs="attributes,callouts,macros"]
2016-07-29 05:22:47 -04:00
--------------------------------------------------
2017-07-06 04:05:50 -04:00
include-tagged::{doc-tests}/RestClientDocumentation.java[rest-client-config-threads]
2016-07-29 05:22:47 -04:00
--------------------------------------------------
2017-07-04 04:58:57 -04:00
=== Basic authentication
2016-07-29 05:22:47 -04:00
Configuring basic authentication can be done by providing an
`HttpClientConfigCallback` while building the `RestClient` through its builder.
2017-07-26 06:17:21 -04:00
The interface has one method that receives an instance of `org.elasticsearch.client.http.impl.nio.client.HttpAsyncClientBuilder`
(see the https://hc.apache.org/httpcomponents-asyncclient-dev/httpasyncclient/apidocs/org/apache/http/impl/nio/client/HttpAsyncClientBuilder.html[Apache documentation])
2016-07-29 05:22:47 -04:00
as an argument and has the same return type. The http client builder can be
modified and then returned. In the following example we set a default
credentials provider that requires basic authentication.
2017-07-06 04:05:50 -04:00
["source","java",subs="attributes,callouts,macros"]
2016-07-29 05:22:47 -04:00
--------------------------------------------------
2017-07-06 04:05:50 -04:00
include-tagged::{doc-tests}/RestClientDocumentation.java[rest-client-config-basic-auth]
2016-07-29 05:22:47 -04:00
--------------------------------------------------
2017-07-06 04:05:50 -04:00
Preemptive Authentication can be disabled, which means that every request will be sent without
2017-01-24 11:34:05 -05:00
authorization headers to see if it is accepted and, upon receiving a HTTP 401 response, it will
resend the exact same request with the basic authentication header. If you wish to do this, then
you can do so by disabling it via the `HttpAsyncClientBuilder`:
2017-07-06 04:05:50 -04:00
["source","java",subs="attributes,callouts,macros"]
2017-01-24 11:34:05 -05:00
--------------------------------------------------
2017-07-06 04:05:50 -04:00
include-tagged::{doc-tests}/RestClientDocumentation.java[rest-client-config-disable-preemptive-auth]
2017-01-24 11:34:05 -05:00
--------------------------------------------------
2017-07-06 04:05:50 -04:00
<1> Disable preemptive authentication
2017-01-24 11:34:05 -05:00
2017-07-04 04:58:57 -04:00
=== Encrypted communication
2016-07-29 05:22:47 -04:00
Encrypted communication can also be configured through the
2017-07-26 06:17:21 -04:00
`HttpClientConfigCallback`. The `org.elasticsearch.client.http.impl.nio.client.HttpAsyncClientBuilder`
(see the https://hc.apache.org/httpcomponents-asyncclient-dev/httpasyncclient/apidocs/org/apache/http/impl/nio/client/HttpAsyncClientBuilder.html[Apache documentation])
2016-07-29 05:22:47 -04:00
received as an argument exposes multiple methods to configure encrypted
communication: `setSSLContext`, `setSSLSessionStrategy` and
`setConnectionManager`, in order of precedence from the least important.
The following is an example:
2017-07-06 04:05:50 -04:00
["source","java",subs="attributes,callouts,macros"]
2016-07-29 05:22:47 -04:00
--------------------------------------------------
2017-07-06 04:05:50 -04:00
include-tagged::{doc-tests}/RestClientDocumentation.java[rest-client-config-encrypted-communication]
2016-07-29 05:22:47 -04:00
--------------------------------------------------
2017-07-20 09:36:56 -04:00
If no explicit configuration is provided, the http://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/JSSERefGuide.html#CustomizingStores[system default configuration]
will be used.
2017-07-04 04:58:57 -04:00
=== Others
2016-07-29 05:22:47 -04:00
For any other required configuration needed, the Apache HttpAsyncClient docs
2016-12-05 10:54:51 -05:00
should be consulted: https://hc.apache.org/httpcomponents-asyncclient-4.1.x/ .