Class AbstractHealthCheckedEndpointGroupBuilder
java.lang.Object
com.linecorp.armeria.client.endpoint.AbstractDynamicEndpointGroupBuilder
com.linecorp.armeria.client.endpoint.healthcheck.AbstractHealthCheckedEndpointGroupBuilder
- All Implemented Interfaces:
DynamicEndpointGroupSetters
- Direct Known Subclasses:
HealthCheckedEndpointGroupBuilder
public abstract class AbstractHealthCheckedEndpointGroupBuilder
extends AbstractDynamicEndpointGroupBuilder
A skeletal builder implementation for creating a new
HealthCheckedEndpointGroup
.-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionallowEmptyEndpoints
(boolean allowEmptyEndpoints) Sets whether to allow an emptyEndpoint
list.Sets theAuthToken
header usingHttpHeaderNames.AUTHORIZATION
.build()
Returns a newly createdHealthCheckedEndpointGroup
based on the properties set so far.clientFactory
(ClientFactory clientFactory) Sets theClientFactory
to use when making health check requests.clientOptions
(ClientOptions clientOptions) Sets theClientOptions
of theClient
that sends health check requests.maxEndpointCount
(int maxEndpointCount) Sets the maximum endpoint count of target selected candidates.maxEndpointRatio
(double maxEndpointRatio) Sets the maximum endpoint ratio of target selected candidates.protected abstract Function<? super HealthCheckerContext,
? extends AsyncCloseable> Returns theFunction
that starts to send health check requests to theEndpoint
specified in a givenHealthCheckerContext
when invoked.port
(int port) Sets the port where a health check request will be sent instead of the original port number specified byEndpointGroup
'sEndpoint
s.protocol
(SessionProtocol protocol) Sets theSessionProtocol
to be used when making health check requests.retryBackoff
(Backoff retryBackoff) Sets the backoff between health check requests.retryInterval
(Duration retryInterval) Sets the interval between health check requests.retryIntervalMillis
(long retryIntervalMillis) Sets the interval between health check requests in milliseconds.selectionTimeout
(Duration selectionTimeout) Sets the timeout to wait until a successfulEndpoint
selection.selectionTimeout
(Duration initialSelectionTimeout, Duration selectionTimeout) Sets the timeouts to wait until a successfulEndpoint
selection.selectionTimeoutMillis
(long selectionTimeoutMillis) Sets the timeout to wait until a successfulEndpoint
selection.selectionTimeoutMillis
(long initialSelectionTimeoutMillis, long selectionTimeoutMillis) Sets the timeouts to wait until a successfulEndpoint
selection.withClientOptions
(Function<? super ClientOptionsBuilder, ClientOptionsBuilder> configurator) Methods inherited from class com.linecorp.armeria.client.endpoint.AbstractDynamicEndpointGroupBuilder
selectionTimeoutMillis, shouldAllowEmptyEndpoints
-
Constructor Details
-
AbstractHealthCheckedEndpointGroupBuilder
Creates a newAbstractHealthCheckedEndpointGroupBuilder
.- Parameters:
delegate
- theEndpointGroup
which provides the candidateEndpoint
s
-
-
Method Details
-
clientFactory
Sets theClientFactory
to use when making health check requests. This should generally be the same as theClientFactory
used when creating aClient
stub using theEndpointGroup
. -
protocol
Sets theSessionProtocol
to be used when making health check requests. -
port
Sets the port where a health check request will be sent instead of the original port number specified byEndpointGroup
'sEndpoint
s. This property is useful when your server listens to health check requests on a different port. -
retryInterval
Sets the interval between health check requests. Must be positive. -
retryIntervalMillis
Sets the interval between health check requests in milliseconds. Must be positive. -
retryBackoff
Sets the backoff between health check requests. -
clientOptions
Sets theClientOptions
of theClient
that sends health check requests. This method can be useful if you already have an Armeria client and want to reuse its configuration, such as using the same decorators.WebClient myClient = ...; // Use the same settings and decorators with `myClient` when sending health check requests. builder.clientOptions(myClient.options());
-
withClientOptions
public AbstractHealthCheckedEndpointGroupBuilder withClientOptions(Function<? super ClientOptionsBuilder, ClientOptionsBuilder> configurator) -
maxEndpointRatio
Sets the maximum endpoint ratio of target selected candidates. -
maxEndpointCount
Sets the maximum endpoint count of target selected candidates. -
auth
Sets theAuthToken
header usingHttpHeaderNames.AUTHORIZATION
. -
allowEmptyEndpoints
Description copied from interface:DynamicEndpointGroupSetters
- Specified by:
allowEmptyEndpoints
in interfaceDynamicEndpointGroupSetters
- Overrides:
allowEmptyEndpoints
in classAbstractDynamicEndpointGroupBuilder
-
selectionTimeout
@UnstableApi public AbstractHealthCheckedEndpointGroupBuilder selectionTimeout(Duration selectionTimeout) Sets the timeout to wait until a successfulEndpoint
selection. This method is shortcut forselectionTimeout(selectionTimeout, selectionTimeout)
.Duration.ZERO
disables the timeout. If unspecified,Flags.defaultResponseTimeoutMillis()
is used to wait for the initial endpoints, andFlags.defaultConnectTimeoutMillis()
} is used after the initial endpoints are resolved by default.Note that the specified
selectionTimeout
and the delegate's selectionTimeout are added and set to thisHealthCheckedEndpointGroup
. For example:DnsAddressEndpointGroup delegate = DnsAddressEndpointGroup.builder("armeria.dev") .selectionTimeout(Duration.ofSeconds(3)) ... .build(); HealthCheckedEndpointGroup endpointGroup = HealthCheckedEndpointGroup.builder(delegate, "/health") // Sets the same timeout to both initialSelectionTimeout // and selectionTimeout .selectionTimeout(Duration.ofSeconds(10)) ... .build(); // The selection timeout of `delegate` is added into `endpointGroup`. assert endpointGroup.selectionTimeoutMillis() == 13000; // 10000 (health) + 3000 (dns) endpointGroup.whenReady.join(); // The selection timeout won't be changed even after the endpoint initialization. assert endpointGroup.selectionTimeoutMillis() == 13000; // 10000 (health) + 3000 (dns)
- Specified by:
selectionTimeout
in interfaceDynamicEndpointGroupSetters
- Overrides:
selectionTimeout
in classAbstractDynamicEndpointGroupBuilder
-
selectionTimeout
@UnstableApi public AbstractHealthCheckedEndpointGroupBuilder selectionTimeout(Duration initialSelectionTimeout, Duration selectionTimeout) Sets the timeouts to wait until a successfulEndpoint
selection.Duration.ZERO
disables the timeout.The final timeout is calculated by adding the
HealthCheckedEndpointGroup.selectionTimeoutMillis()
and the selection timeout of the delegate specified when creating this builder. For example:DnsAddressEndpointGroup delegate = DnsAddressEndpointGroup.builder("armeria.dev") .selectionTimeout(Duration.ofSeconds(3)) ... .build(); HealthCheckedEndpointGroup endpointGroup = HealthCheckedEndpointGroup.builder(delegate, "/health") .selectionTimeout(Duration.ofSeconds(10), Duration.ofSeconds(5)) ... .build(); assert endpointGroup.selectionTimeoutMillis() == 13000; // 10000 (health) + 3000 (dns) // Wait for the initial endpoints. endpointGroup.whenReady().join(); assert endpointGroup.selectionTimeoutMillis() == 8000; // 5000 (health) + 3000 (dns)
- Parameters:
initialSelectionTimeout
- the initial selection timeout to wait for the initial endpoints. If unspecified,Flags.defaultResponseTimeoutMillis()
is used by default.selectionTimeout
- the selection timeout to wait for anEndpoint
after the initial endpoints are resolved. If unspecified,Flags.defaultConnectTimeoutMillis()
} is used by default.
-
selectionTimeoutMillis
@UnstableApi public AbstractHealthCheckedEndpointGroupBuilder selectionTimeoutMillis(long selectionTimeoutMillis) Sets the timeout to wait until a successfulEndpoint
selection. This method is shortcut forselectionTimeoutMillis(selectionTimeout, selectionTimeout)
.Duration.ZERO
disables the timeout. If unspecified,Flags.defaultResponseTimeoutMillis()
is used to wait for the initial endpoints, andFlags.defaultConnectTimeoutMillis()
} is used after the initial endpoints are resolved by default.Note that the specified
selectionTimeoutMillis
and the delegate's selectionTimeoutMillis are added and set to thisHealthCheckedEndpointGroup
. For example:DnsAddressEndpointGroup delegate = DnsAddressEndpointGroup.builder("armeria.dev") .selectionTimeoutMillis(3000) ... .build(); HealthCheckedEndpointGroup endpointGroup = HealthCheckedEndpointGroup.builder(delegate, "/health") // Sets the same timeout to both initialSelectionTimeoutMills // and selectionTimeoutMillis .selectionTimeoutMillis(10000) ... .build(); // The selection timeout of `delegate` is added into `endpointGroup`. assert endpointGroup.selectionTimeoutMillis() == 13000; // 10000 (health) + 3000 (dns) endpointGroup.whenReady.join(); // The selection timeout won't be changed even after the endpoint initialization. assert endpointGroup.selectionTimeoutMillis() == 13000; // 10000 (health) + 3000 (dns)
- Specified by:
selectionTimeoutMillis
in interfaceDynamicEndpointGroupSetters
- Overrides:
selectionTimeoutMillis
in classAbstractDynamicEndpointGroupBuilder
-
selectionTimeoutMillis
@UnstableApi public AbstractHealthCheckedEndpointGroupBuilder selectionTimeoutMillis(long initialSelectionTimeoutMillis, long selectionTimeoutMillis) Sets the timeouts to wait until a successfulEndpoint
selection.0
disables the timeout.The final timeout is calculated by adding the
HealthCheckedEndpointGroup.selectionTimeoutMillis()
and the selection timeout of the delegate specified when creating this builder. For example:DnsAddressEndpointGroup delegate = DnsAddressEndpointGroup.builder("armeria.dev") .selectionTimeoutMillis(3000) ... .build(); HealthCheckedEndpointGroup endpointGroup = HealthCheckedEndpointGroup.builder(delegate, "/health") .selectionTimeoutMillis(10000, 5000) ... .build(); assert endpointGroup.selectionTimeoutMillis() == 13000; // 10000 (health) + 3000 (dns) // Wait for the initial endpoints. endpointGroup.whenReady().join(); assert endpointGroup.selectionTimeoutMillis() == 8000; // 5000 (health) + 3000 (dns)
- Parameters:
initialSelectionTimeoutMillis
- the initial selection timeout to wait for the initial endpoints. If unspecified,Flags.defaultResponseTimeoutMillis()
is used by default.selectionTimeoutMillis
- the selection timeout to wait for anEndpoint
after the initial endpoints are resolved. If unspecified,Flags.defaultConnectTimeoutMillis()
} is used by default.
-
build
Returns a newly createdHealthCheckedEndpointGroup
based on the properties set so far. -
newCheckerFactory
protected abstract Function<? super HealthCheckerContext,? extends AsyncCloseable> newCheckerFactory()Returns theFunction
that starts to send health check requests to theEndpoint
specified in a givenHealthCheckerContext
when invoked. TheFunction
must update the health of theEndpoint
with a value between [0, 1] viaHealthCheckerContext.updateHealth(double, ClientRequestContext, ResponseHeaders, Throwable)
.HealthCheckedEndpointGroup
will callAsyncCloseable.closeAsync()
on theAsyncCloseable
returned by theFunction
when it needs to stop sending health check requests.
-