Top Description Constructors Methods
io.grpc

public abstract Class ManagedChannelBuilder<T extends io.grpc.ManagedChannelBuilder<T>>

extends Object
Class Inheritance
Known Direct Subclasses
io.grpc.ForwardingChannelBuilder2
Type Parameters
<T>
The concrete type of this builder.
Imports
com.google.common.base.Preconditions, java.util.List, .Map, java.util.concurrent.Executor, .TimeUnit, javax.annotation.Nullable

A builder for ManagedChannel instances.

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
public abstract ManagedChannel
build()

Builds a channel using the given parameters.

public abstract T

Returns:

this
compressorRegistry
(CompressorRegistry registry)

Set the compression registry for use in the channel.

public abstract T

Returns:

this
decompressorRegistry
(DecompressorRegistry registry)

Set the decompression registry for use in the channel.

public T

Returns:

this
defaultLoadBalancingPolicy
(String policy)

Sets the default load-balancing policy that will be used if the service config doesn't specify one.

public T

Returns:

this
defaultServiceConfig
(Map<String, ?> serviceConfig)

Provides a service config to the channel.

public abstract T

Returns:

this
directExecutor
()

Execute application code directly in the transport thread.

public T

Returns:

this
disableRetry
()

Disables the retry and hedging subsystem provided by the gRPC library.

public T

Returns:

this
disableServiceConfigLookUp
()

Disables service config look-up from the naming system, which is enabled by default.

public T
enableFullStreamDecompression()

Enables full-stream decompression of inbound streams.

public T

Returns:

this
enableRetry
()

Enables the retry and hedging subsystem which will use per-method configuration.

public abstract T

Returns:

this
executor
(Executor executor)

Provides a custom executor.

public static ManagedChannelBuilder<?>
forAddress(String name, int port)

Creates a channel with the target's address and port number.

public static ManagedChannelBuilder<?>
forTarget(String target)

Creates a channel with a target string, which can be either a valid NameResolver-compliant URI, or an authority string.

public abstract T

Returns:

this
idleTimeout
(long value, TimeUnit unit)

Set the duration without ongoing RPCs before going to idle mode.

public abstract T

Returns:

this
intercept
(List<ClientInterceptor> interceptors)

Adds interceptors that will be called before the channel performs its real work.

public abstract T

Returns:

this
intercept
(ClientInterceptor... interceptors)

Adds interceptors that will be called before the channel performs its real work.

public T
keepAliveTime(long keepAliveTime, TimeUnit timeUnit)

Sets the time without read activity before sending a keepalive ping.

public T
keepAliveTimeout(long keepAliveTimeout, TimeUnit timeUnit)

Sets the time waiting for read activity after sending a keepalive ping.

public T
keepAliveWithoutCalls(boolean enable)

Sets whether keepalive will be performed when there are no outstanding RPC on a connection.

public T

Returns:

this
maxHedgedAttempts
(int maxHedgedAttempts)

Sets the maximum number of hedged attempts that may be configured by the service config.

public T

Returns:

this
maxInboundMessageSize
(int
the maximum number of bytes a single message can be.
bytes
)

Sets the maximum message size allowed to be received on the channel.

public T

Returns:

this
maxInboundMetadataSize
(int
the maximum size of received metadata
bytes
)

Sets the maximum size of metadata allowed to be received.

public T

Returns:

this
maxRetryAttempts
(int maxRetryAttempts)

Sets the maximum number of retry attempts that may be configured by the service config.

public T

Returns:

this
maxTraceEvents
(int maxTraceEvents)

Sets the maximum number of channel trace events to keep in the tracer for each channel or subchannel.

public abstract T

Returns:

this
nameResolverFactory
(NameResolver.Factory resolverFactory)

Deprecated Most usages should use a globally-registered NameResolverProvider instead, with either the SPI mechanism or NameResolverRegistry#register.
Provides a custom NameResolver.Factory for the channel.
public T

Returns:

this
offloadExecutor
(Executor executor)

Provides a custom executor that will be used for operations that block or are expensive, to avoid blocking asynchronous code paths.

public abstract T

Returns:

this
overrideAuthority
(String authority)

Overrides the authority used with TLS and HTTP virtual hosting.

public T

Returns:

this
perRpcBufferLimit
(long bytes)

Sets the per RPC buffer limit in bytes used for retry.

public T

Returns:

this
proxyDetector
(ProxyDetector proxyDetector)

Sets the proxy detector to be used in addresses name resolution.

public T

Returns:

this
retryBufferSize
(long bytes)

Sets the retry buffer size in bytes.

public T

Returns:

this
setBinaryLog
(BinaryLog
the object to provide logging.
binaryLog
)

Sets the BinaryLog object that this channel should log to.

private T
thisT()

Returns the correctly typed version of the builder.

public T

Returns:

this
usePlaintext
()

Use of a plaintext connection to the server.

public abstract T

Returns:

this
userAgent
(String userAgent)

Provides a custom User-Agent for the application.

public T

Returns:

this
useTransportSecurity
()

Makes the client use TLS.

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Constructor Detail

ManagedChannelBuilderback to summary
public ManagedChannelBuilder()

Method Detail

buildback to summary
public abstract ManagedChannel build()

Builds a channel using the given parameters.

Since
1.0.0
compressorRegistryback to summary
public abstract T compressorRegistry(CompressorRegistry registry)

Set the compression registry for use in the channel. This is an advanced API call and shouldn't be used unless you are using custom message encoding. The default supported compressors are in CompressorRegistry#getDefaultInstance.

Returns:T

this

Annotations
@ExperimentalApi:https://github.com/grpc/grpc-java/issues/1704
Since
1.0.0
decompressorRegistryback to summary
public abstract T decompressorRegistry(DecompressorRegistry registry)

Set the decompression registry for use in the channel. This is an advanced API call and shouldn't be used unless you are using custom message encoding. The default supported decompressors are in DecompressorRegistry#getDefaultInstance.

Returns:T

this

Annotations
@ExperimentalApi:https://github.com/grpc/grpc-java/issues/1704
Since
1.0.0
defaultLoadBalancingPolicyback to summary
public T defaultLoadBalancingPolicy(String policy)

Sets the default load-balancing policy that will be used if the service config doesn't specify one. If not set, the default will be the "pick_first" policy.

Policy implementations are looked up in the default LoadBalancerRegistry.

This method is implemented by all stock channel builders that are shipped with gRPC, but may not be implemented by custom channel builders, in which case this method will throw.

Returns:T

this

Annotations
@ExperimentalApi:https://github.com/grpc/grpc-java/issues/1771
Since
1.18.0
defaultServiceConfigback to summary
public T defaultServiceConfig(Map<String, ?> serviceConfig)

Provides a service config to the channel. The channel will use the default service config when the name resolver provides no service config or if the channel disables lookup service config from name resolver (see disableServiceConfigLookUp()). The argument serviceConfig is a nested map representing a Json object in the most natural way:

Json entryJava Type
objectMap
arrayList
stringString
numberDouble
booleanBoolean
nullnull

If null is passed, then there will be no default service config.

Your preferred JSON parser may not produce results in the format expected. For such cases, you can convert its output. For example, if your parser produces Integers and other Numbers in addition to Double:

@SuppressWarnings("unchecked")
private static Object convertNumbers(Object o) {
  if (o instanceof Map) {
    ((Map) o).replaceAll((k,v) -> convertNumbers(v));
  } else if (o instanceof List) {
    ((List) o).replaceAll(YourClass::convertNumbers);
  } else if (o instanceof Number && !(o instanceof Double)) {
    o = ((Number) o).doubleValue();
  }
  return o;
}
Returns:T

this

Annotations
@ExperimentalApi:https://github.com/grpc/grpc-java/issues/5189
Exceptions
IllegalArgumentException:
When the given serviceConfig is invalid or the current version of grpc library can not parse it gracefully. The state of the builder is unchanged if an exception is thrown.
Since
1.20.0
directExecutorback to summary
public abstract T directExecutor()

Execute application code directly in the transport thread.

Depending on the underlying transport, using a direct executor may lead to substantial performance improvements. However, it also requires the application to not block under any circumstances.

Calling this method is semantically equivalent to calling executor(Executor) and passing in a direct executor. However, this is the preferred way as it may allow the transport to perform special optimizations.

Returns:T

this

Since
1.0.0
disableRetryback to summary
public T disableRetry()

Disables the retry and hedging subsystem provided by the gRPC library. This is designed for the case when users have their own retry implementation and want to avoid their own retry taking place simultaneously with the gRPC library layer retry.

Returns:T

this

Since
1.11.0
disableServiceConfigLookUpback to summary
public T disableServiceConfigLookUp()

Disables service config look-up from the naming system, which is enabled by default.

Returns:T

this

Annotations
@ExperimentalApi:https://github.com/grpc/grpc-java/issues/5189
Since
1.20.0
enableFullStreamDecompressionback to summary
public T enableFullStreamDecompression()

Enables full-stream decompression of inbound streams. This will cause the channel's outbound headers to advertise support for GZIP compressed streams, and gRPC servers which support the feature may respond with a GZIP compressed stream.

EXPERIMENTAL: This method is here to enable an experimental feature, and may be changed or removed once the feature is stable.

Annotations
@ExperimentalApi:https://github.com/grpc/grpc-java/issues/3399
Exceptions
UnsupportedOperationException:
if unsupported
Since
1.7.0
enableRetryback to summary
public T enableRetry()

Enables the retry and hedging subsystem which will use per-method configuration. If a method is unconfigured, it will be limited to transparent retries, which are safe for non-idempotent RPCs. Service config is ideally provided by the name resolver, but may also be specified via defaultServiceConfig.

Returns:T

this

Since
1.11.0
executorback to summary
public abstract T executor(Executor executor)

Provides a custom executor.

It's an optional parameter. If the user has not provided an executor when the channel is built, the builder will use a static cached thread pool.

The channel won't take ownership of the given executor. It's caller's responsibility to shut down the executor when it's desired.

Returns:T

this

Since
1.0.0
forAddressback to summary
public static ManagedChannelBuilder<?> forAddress(String name, int port)

Creates a channel with the target's address and port number.

Note that there is an open JDK bug on java.net.URI class parsing an ipv6 scope ID: bugs.openjdk.org/browse/JDK-8199396. This method is exposed to this bug. If you experience an issue, a work-around is to convert the scope ID to its numeric form (e.g. by using Inet6Address.getScopeId()) before calling this method.

Since
1.0.0
See Also
forTarget(String)
forTargetback to summary
public static ManagedChannelBuilder<?> forTarget(String target)

Creates a channel with a target string, which can be either a valid NameResolver-compliant URI, or an authority string.

A NameResolver-compliant URI is an absolute hierarchical URI as defined by java.net.URI. Example URIs:

  • "dns:///foo.googleapis.com:8080"
  • "dns:///foo.googleapis.com"
  • "dns:///%5B2001:db8:85a3:8d3:1319:8a2e:370:7348%5D:443"
  • "dns://8.8.8.8/foo.googleapis.com:8080"
  • "dns://8.8.8.8/foo.googleapis.com"
  • "zookeeper://zk.example.com:9900/example_service"

An authority string will be converted to a NameResolver-compliant URI, which has the scheme from the name resolver with the highest priority (e.g. "dns"), no authority, and the original authority string as its path after properly escaped. We recommend libraries to specify the schema explicitly if it is known, since libraries cannot know which NameResolver will be default during runtime. Example authority strings:

  • "localhost"
  • "127.0.0.1"
  • "localhost:8080"
  • "foo.googleapis.com:8080"
  • "127.0.0.1:8080"
  • "[2001:db8:85a3:8d3:1319:8a2e:370:7348]"
  • "[2001:db8:85a3:8d3:1319:8a2e:370:7348]:443"

Note that there is an open JDK bug on java.net.URI class parsing an ipv6 scope ID: bugs.openjdk.org/browse/JDK-8199396. This method is exposed to this bug. If you experience an issue, a work-around is to convert the scope ID to its numeric form (e.g. by using Inet6Address.getScopeId()) before calling this method.

Since
1.0.0
idleTimeoutback to summary
public abstract T idleTimeout(long value, TimeUnit unit)

Set the duration without ongoing RPCs before going to idle mode.

In idle mode the channel shuts down all connections, the NameResolver and the LoadBalancer. A new RPC would take the channel out of idle mode. A channel starts in idle mode. Defaults to 30 minutes.

This is an advisory option. Do not rely on any specific behavior related to this option.

Returns:T

this

Annotations
@ExperimentalApi:https://github.com/grpc/grpc-java/issues/2022
Since
1.0.0
interceptback to summary
public abstract T intercept(List<ClientInterceptor> interceptors)

Adds interceptors that will be called before the channel performs its real work. This is functionally equivalent to using ClientInterceptors#intercept(Channel, List), but while still having access to the original ManagedChannel. Interceptors run in the reverse order in which they are added, just as with consecutive calls to ClientInterceptors.intercept().

Returns:T

this

Since
1.0.0
interceptback to summary
public abstract T intercept(ClientInterceptor... interceptors)

Adds interceptors that will be called before the channel performs its real work. This is functionally equivalent to using ClientInterceptors#intercept(Channel, ClientInterceptor...), but while still having access to the original ManagedChannel. Interceptors run in the reverse order in which they are added, just as with consecutive calls to ClientInterceptors.intercept().

Returns:T

this

Since
1.0.0
keepAliveTimeback to summary
public T keepAliveTime(long keepAliveTime, TimeUnit timeUnit)

Sets the time without read activity before sending a keepalive ping. An unreasonably small value might be increased, and Long.MAX_VALUE nano seconds or an unreasonably large value will disable keepalive. Defaults to infinite.

Clients must receive permission from the service owner before enabling this option. Keepalives can increase the load on services and are commonly "invisible" making it hard to notice when they are causing excessive load. Clients are strongly encouraged to use only as small of a value as necessary.

Exceptions
UnsupportedOperationException:
if unsupported
Since
1.7.0
See Also
gRFC A8 Client-side Keepalive
keepAliveTimeoutback to summary
public T keepAliveTimeout(long keepAliveTimeout, TimeUnit timeUnit)

Sets the time waiting for read activity after sending a keepalive ping. If the time expires without any read activity on the connection, the connection is considered dead. An unreasonably small value might be increased. Defaults to 20 seconds.

This value should be at least multiple times the RTT to allow for lost packets.

Exceptions
UnsupportedOperationException:
if unsupported
Since
1.7.0
See Also
gRFC A8 Client-side Keepalive
keepAliveWithoutCallsback to summary
public T keepAliveWithoutCalls(boolean enable)

Sets whether keepalive will be performed when there are no outstanding RPC on a connection. Defaults to false.

Clients must receive permission from the service owner before enabling this option. Keepalives on unused connections can easilly accidentally consume a considerable amount of bandwidth and CPU. idleTimeout() should generally be used instead of this option.

Exceptions
UnsupportedOperationException:
if unsupported
Since
1.7.0
See Also
keepAliveTime(long, TimeUnit), gRFC A8 Client-side Keepalive
maxHedgedAttemptsback to summary
public T maxHedgedAttempts(int maxHedgedAttempts)

Sets the maximum number of hedged attempts that may be configured by the service config. If the service config specifies a larger value it will be reduced to this value.

This method may not work as expected for the current release because retry is not fully implemented yet.

Returns:T

this

Annotations
@ExperimentalApi:https://github.com/grpc/grpc-java/issues/3982
Since
1.11.0
maxInboundMessageSizeback to summary
public T maxInboundMessageSize(int bytes)

Sets the maximum message size allowed to be received on the channel. If not called, defaults to 4 MiB. The default provides protection to clients who haven't considered the possibility of receiving large messages while trying to be large enough to not be hit in normal usage.

This method is advisory, and implementations may decide to not enforce this. Currently, the only known transport to not enforce this is InProcessTransport.

Parameters
bytes:int

the maximum number of bytes a single message can be.

Returns:T

this

Exceptions
IllegalArgumentException:
if bytes is negative.
Since
1.1.0
maxInboundMetadataSizeback to summary
public T maxInboundMetadataSize(int bytes)

Sets the maximum size of metadata allowed to be received. Integer.MAX_VALUE disables the enforcement. The default is implementation-dependent, but is not generally less than 8 KiB and may be unlimited.

This is cumulative size of the metadata. The precise calculation is implementation-dependent, but implementations are encouraged to follow the calculation used for HTTP/2's SETTINGS_MAX_HEADER_LIST_SIZE. It sums the bytes from each entry's key and value, plus 32 bytes of overhead per entry.

Parameters
bytes:int

the maximum size of received metadata

Returns:T

this

Exceptions
IllegalArgumentException:
if bytes is non-positive
Since
1.17.0
maxRetryAttemptsback to summary
public T maxRetryAttempts(int maxRetryAttempts)

Sets the maximum number of retry attempts that may be configured by the service config. If the service config specifies a larger value it will be reduced to this value. Setting this number to zero is not effectively the same as disableRetry() because the former does not disable transparent retry.

This method may not work as expected for the current release because retry is not fully implemented yet.

Returns:T

this

Annotations
@ExperimentalApi:https://github.com/grpc/grpc-java/issues/3982
Since
1.11.0
maxTraceEventsback to summary
public T maxTraceEvents(int maxTraceEvents)

Sets the maximum number of channel trace events to keep in the tracer for each channel or subchannel. If set to 0, channel tracing is effectively disabled.

Returns:T

this

Annotations
@ExperimentalApi:https://github.com/grpc/grpc-java/issues/4471
Since
1.13.0
nameResolverFactoryback to summary
public abstract T nameResolverFactory(NameResolver.Factory resolverFactory)

Deprecated

Most usages should use a globally-registered NameResolverProvider instead, with either the SPI mechanism or NameResolverRegistry#register. Replacements for all use-cases are not necessarily available yet. See #7133.

Provides a custom NameResolver.Factory for the channel. If this method is not called, the builder will try the providers registered in the default NameResolverRegistry for the given target.

This method should rarely be used, as name resolvers should provide a NameResolverProvider and users rely on service loading to find implementations in the class path. That allows application's configuration to easily choose the name resolver via the 'target' string passed to ManagedChannelBuilder#forTarget(String).

Returns:T

this

Annotations
@Deprecated
@ExperimentalApi:https://github.com/grpc/grpc-java/issues/1770
Since
1.0.0
offloadExecutorback to summary
public T offloadExecutor(Executor executor)

Provides a custom executor that will be used for operations that block or are expensive, to avoid blocking asynchronous code paths. For example, DNS queries and OAuth token fetching over HTTP could use this executor.

It's an optional parameter. If the user has not provided an executor when the channel is built, the builder will use a static cached thread pool.

The channel won't take ownership of the given executor. It's caller's responsibility to shut down the executor when it's desired.

Returns:T

this

Exceptions
UnsupportedOperationException:
if unsupported
Since
1.25.0
overrideAuthorityback to summary
public abstract T overrideAuthority(String authority)

Overrides the authority used with TLS and HTTP virtual hosting. It does not change what host is actually connected to. Is commonly in the form host:port.

If the channel builder overrides authority, any authority override from name resolution result (via EquivalentAddressGroup#ATTR_AUTHORITY_OVERRIDE) will be discarded.

This method is intended for testing, but may safely be used outside of tests as an alternative to DNS overrides.

Returns:T

this

Since
1.0.0
perRpcBufferLimitback to summary
public T perRpcBufferLimit(long bytes)

Sets the per RPC buffer limit in bytes used for retry. The RPC is not retriable if its buffer limit is exceeded. The implementation may only estimate the buffer size being used rather than count the exact physical memory allocated. It does not have any effect if retry is disabled by the client.

This method may not work as expected for the current release because retry is not fully implemented yet.

Returns:T

this

Annotations
@ExperimentalApi:https://github.com/grpc/grpc-java/issues/3982
Since
1.10.0
proxyDetectorback to summary
public T proxyDetector(ProxyDetector proxyDetector)

Sets the proxy detector to be used in addresses name resolution. If null is passed the default proxy detector will be used. For how proxies work in gRPC, please refer to the documentation on ProxyDetector.

Returns:T

this

Since
1.19.0
retryBufferSizeback to summary
public T retryBufferSize(long bytes)

Sets the retry buffer size in bytes. If the buffer limit is exceeded, no RPC could retry at the moment, and in hedging case all hedges but one of the same RPC will cancel. The implementation may only estimate the buffer size being used rather than count the exact physical memory allocated. The method does not have any effect if retry is disabled by the client.

This method may not work as expected for the current release because retry is not fully implemented yet.

Returns:T

this

Annotations
@ExperimentalApi:https://github.com/grpc/grpc-java/issues/3982
Since
1.10.0
setBinaryLogback to summary
public T setBinaryLog(BinaryLog binaryLog)

Sets the BinaryLog object that this channel should log to. The channel does not take ownership of the object, and users are responsible for calling BinaryLog#close().

Parameters
binaryLog:BinaryLog

the object to provide logging.

Returns:T

this

Annotations
@ExperimentalApi:https://github.com/grpc/grpc-java/issues/4017
Since
1.13.0
thisTback to summary
private T thisT()

Returns the correctly typed version of the builder.

usePlaintextback to summary
public T usePlaintext()

Use of a plaintext connection to the server. By default a secure connection mechanism such as TLS will be used.

Should only be used for testing or for APIs where the use of such API or the data exchanged is not sensitive.

This assumes prior knowledge that the target of this channel is using plaintext. It will not perform HTTP/1.1 upgrades.

Returns:T

this

Exceptions
IllegalStateException:
if ChannelCredentials were provided when constructing the builder
UnsupportedOperationException:
if plaintext mode is not supported.
Since
1.11.0
userAgentback to summary
public abstract T userAgent(String userAgent)

Provides a custom User-Agent for the application.

It's an optional parameter. The library will provide a user agent independent of this option. If provided, the given agent will prepend the library's user agent information.

Returns:T

this

Since
1.0.0
useTransportSecurityback to summary
public T useTransportSecurity()

Makes the client use TLS.

Note

this is enabled by default.

It is recommended to use the ChannelCredentials API instead of this method.

Returns:T

this

Exceptions
IllegalStateException:
if ChannelCredentials were provided when constructing the builder
UnsupportedOperationException:
if transport security is not supported.
Since
1.9.0