Package io.grpc.netty

Class NettyChannelBuilder


@ExperimentalApi("https://github.com/grpc/grpc-java/issues/1784") @CheckReturnValue public final class NettyChannelBuilder extends ForwardingChannelBuilder2<NettyChannelBuilder>
A builder to help simplify construction of channels using the Netty transport.
  • Field Details

    • DEFAULT_FLOW_CONTROL_WINDOW

      public static final int DEFAULT_FLOW_CONTROL_WINDOW
      See Also:
    • DEFAULT_AUTO_FLOW_CONTROL

      private static final boolean DEFAULT_AUTO_FLOW_CONTROL
    • AS_LARGE_AS_INFINITE

      private static final long AS_LARGE_AS_INFINITE
    • DEFAULT_CHANNEL_FACTORY

      private static final io.netty.channel.ChannelFactory<? extends io.netty.channel.Channel> DEFAULT_CHANNEL_FACTORY
    • DEFAULT_EVENT_LOOP_GROUP_POOL

      private static final ObjectPool<? extends io.netty.channel.EventLoopGroup> DEFAULT_EVENT_LOOP_GROUP_POOL
    • managedChannelImplBuilder

      private final ManagedChannelImplBuilder managedChannelImplBuilder
    • transportTracerFactory

      private TransportTracer.Factory transportTracerFactory
    • channelOptions

      private final Map<io.netty.channel.ChannelOption<?>,Object> channelOptions
    • channelFactory

      private io.netty.channel.ChannelFactory<? extends io.netty.channel.Channel> channelFactory
    • eventLoopGroupPool

      private ObjectPool<? extends io.netty.channel.EventLoopGroup> eventLoopGroupPool
    • autoFlowControl

      private boolean autoFlowControl
    • flowControlWindow

      private int flowControlWindow
    • maxHeaderListSize

      private int maxHeaderListSize
    • maxInboundMessageSize

      private int maxInboundMessageSize
    • keepAliveTimeNanos

      private long keepAliveTimeNanos
    • keepAliveTimeoutNanos

      private long keepAliveTimeoutNanos
    • keepAliveWithoutCalls

      private boolean keepAliveWithoutCalls
    • protocolNegotiatorFactory

      private ProtocolNegotiator.ClientFactory protocolNegotiatorFactory
    • freezeProtocolNegotiatorFactory

      private final boolean freezeProtocolNegotiatorFactory
    • localSocketPicker

      private NettyChannelBuilder.LocalSocketPicker localSocketPicker
    • useGetForSafeMethods

      private final boolean useGetForSafeMethods
      If true, indicates that the transport may use the GET method for RPCs, and may include the request body in the query params.
      See Also:
    • transportSocketType

      private Class<? extends SocketAddress> transportSocketType
  • Constructor Details

  • Method Details

    • forAddress

      public static NettyChannelBuilder forAddress(SocketAddress serverAddress)
      Creates a new builder with the given server address. This factory method is primarily intended for using Netty Channel types other than SocketChannel. forAddress(String, int) should generally be preferred over this method, since that API permits delaying DNS lookups and noticing changes to DNS. If an unresolved InetSocketAddress is passed in, then it will remain unresolved.
    • forAddress

      public static NettyChannelBuilder forAddress(SocketAddress serverAddress, ChannelCredentials creds)
      Creates a new builder with the given server address. This factory method is primarily intended for using Netty Channel types other than SocketChannel. forAddress(String, int, ChannelCredentials) should generally be preferred over this method, since that API permits delaying DNS lookups and noticing changes to DNS. If an unresolved InetSocketAddress is passed in, then it will remain unresolved.
    • forAddress

      public static NettyChannelBuilder forAddress(String host, int port)
      Creates a new builder with the given host and port.
    • forAddress

      public static NettyChannelBuilder forAddress(String host, int port, ChannelCredentials creds)
      Creates a new builder with the given host and port.
    • forTarget

      public static NettyChannelBuilder forTarget(String target)
      Creates a new builder with the given target string that will be resolved by NameResolver.
    • forTarget

      public static NettyChannelBuilder forTarget(String target, ChannelCredentials creds)
      Creates a new builder with the given target string that will be resolved by NameResolver.
    • delegate

      @Internal protected ManagedChannelBuilder<?> delegate()
      Description copied from class: ForwardingChannelBuilder2
      Returns the delegated ManagedChannelBuilder.
      Specified by:
      delegate in class ForwardingChannelBuilder2<NettyChannelBuilder>
    • getAuthorityFromAddress

      private static String getAuthorityFromAddress(SocketAddress address)
    • channelType

      @CanIgnoreReturnValue public NettyChannelBuilder channelType(Class<? extends io.netty.channel.Channel> channelType)
      Specifies the channel type to use, by default we use EpollSocketChannel if available, otherwise using NioSocketChannel.

      You either use this or channelFactory(io.netty.channel.ChannelFactory) if your Channel implementation has no no-args constructor.

      It's an optional parameter. If the user has not provided an Channel type or ChannelFactory when the channel is built, the builder will use the default one which is static.

      You must also provide corresponding eventLoopGroup(EventLoopGroup). For example, NioSocketChannel must use NioEventLoopGroup, otherwise your application won't start.

    • channelType

      @CanIgnoreReturnValue public NettyChannelBuilder channelType(Class<? extends io.netty.channel.Channel> channelType, @Nullable Class<? extends SocketAddress> transportSocketType)
      Similar to channelType(Class) above but allows the caller to specify the socket-type associated with the channelType.
      Parameters:
      channelType - the type of Channel to use.
      transportSocketType - the associated SocketAddress type. If null, then no compatibility check is performed between channel transport and name-resolver addresses.
    • channelFactory

      @CanIgnoreReturnValue public NettyChannelBuilder channelFactory(io.netty.channel.ChannelFactory<? extends io.netty.channel.Channel> channelFactory)
      Specifies the ChannelFactory to create Channel instances. This method is usually only used if the specific Channel requires complex logic which requires additional information to create the Channel. Otherwise, recommend to use channelType(Class).

      It's an optional parameter. If the user has not provided an Channel type or ChannelFactory when the channel is built, the builder will use the default one which is static.

      You must also provide corresponding eventLoopGroup(EventLoopGroup). For example, NioSocketChannel based ChannelFactory must use NioEventLoopGroup, otherwise your application won't start.

    • channelFactory

      @CanIgnoreReturnValue public NettyChannelBuilder channelFactory(io.netty.channel.ChannelFactory<? extends io.netty.channel.Channel> channelFactory, @Nullable Class<? extends SocketAddress> transportSocketType)
      Similar to channelFactory(ChannelFactory) above but allows the caller to specify the socket-type associated with the channelFactory.
      Parameters:
      channelFactory - the ChannelFactory to use.
      transportSocketType - the associated SocketAddress type. If null, then no compatibility check is performed between channel transport and name-resolver addresses.
    • withOption

      @CanIgnoreReturnValue public <T> NettyChannelBuilder withOption(io.netty.channel.ChannelOption<T> option, T value)
      Specifies a channel option. As the underlying channel as well as network implementation may ignore this value applications should consider it a hint.
    • negotiationType

      @CanIgnoreReturnValue public NettyChannelBuilder negotiationType(NegotiationType type)
      Sets the negotiation type for the HTTP/2 connection.

      Default: TLS

    • eventLoopGroup

      @CanIgnoreReturnValue public NettyChannelBuilder eventLoopGroup(@Nullable io.netty.channel.EventLoopGroup eventLoopGroup)
      Provides an EventGroupLoop to be used by the netty transport.

      It's an optional parameter. If the user has not provided an EventGroupLoop when the channel is built, the builder will use the default one which is static.

      You must also provide corresponding channelType(Class) or channelFactory(ChannelFactory) corresponding to the given EventLoopGroup. For example, NioEventLoopGroup requires NioSocketChannel

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

    • eventLoopGroupPool

      @CanIgnoreReturnValue NettyChannelBuilder eventLoopGroupPool(ObjectPool<? extends io.netty.channel.EventLoopGroup> eventLoopGroupPool)
    • sslContext

      @CanIgnoreReturnValue public NettyChannelBuilder sslContext(io.netty.handler.ssl.SslContext sslContext)
      SSL/TLS context to use instead of the system default. It must have been configured with GrpcSslContexts, but options could have been overridden.
    • initialFlowControlWindow

      @CanIgnoreReturnValue public NettyChannelBuilder initialFlowControlWindow(int initialFlowControlWindow)
      Sets the initial flow control window in bytes. Setting initial flow control window enables auto flow control tuning using bandwidth-delay product algorithm. To disable auto flow control tuning, use flowControlWindow(int). By default, auto flow control is enabled with initial flow control window size of DEFAULT_FLOW_CONTROL_WINDOW.
    • flowControlWindow

      @CanIgnoreReturnValue public NettyChannelBuilder flowControlWindow(int flowControlWindow)
      Sets the flow control window in bytes. Setting flowControlWindow disables auto flow control tuning; use initialFlowControlWindow(int) to enable auto flow control tuning. If not called, the default value is DEFAULT_FLOW_CONTROL_WINDOW) with auto flow control tuning.
    • maxHeaderListSize

      @CanIgnoreReturnValue @Deprecated @InlineMe(replacement="this.maxInboundMetadataSize(maxHeaderListSize)") public NettyChannelBuilder maxHeaderListSize(int maxHeaderListSize)
      Deprecated.
      Sets the maximum size of header list allowed to be received. This is cumulative size of the headers with some overhead, as defined for HTTP/2's SETTINGS_MAX_HEADER_LIST_SIZE. The default is 8 KiB.
    • maxInboundMetadataSize

      @CanIgnoreReturnValue public NettyChannelBuilder maxInboundMetadataSize(int bytes)
      Sets the maximum size of metadata allowed to be received. This is cumulative size of the entries with some overhead, as defined for HTTP/2's SETTINGS_MAX_HEADER_LIST_SIZE. The default is 8 KiB.
      Overrides:
      maxInboundMetadataSize in class ForwardingChannelBuilder2<NettyChannelBuilder>
      Parameters:
      bytes - the maximum size of received metadata
      Returns:
      this
      Throws:
      IllegalArgumentException - if bytes is non-positive
      Since:
      1.17.0
    • usePlaintext

      @CanIgnoreReturnValue public NettyChannelBuilder usePlaintext()
      Equivalent to using negotiationType(NegotiationType) with PLAINTEXT.
      Overrides:
      usePlaintext in class ForwardingChannelBuilder2<NettyChannelBuilder>
      Returns:
      this
    • useTransportSecurity

      @CanIgnoreReturnValue public NettyChannelBuilder useTransportSecurity()
      Equivalent to using negotiationType(NegotiationType) with TLS.
      Overrides:
      useTransportSecurity in class ForwardingChannelBuilder2<NettyChannelBuilder>
      Returns:
      this
    • keepAliveTime

      @CanIgnoreReturnValue public NettyChannelBuilder 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.

      Overrides:
      keepAliveTime in class ForwardingChannelBuilder2<NettyChannelBuilder>
      Since:
      1.3.0
      See Also:
    • keepAliveTimeout

      @CanIgnoreReturnValue public NettyChannelBuilder 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.

      Overrides:
      keepAliveTimeout in class ForwardingChannelBuilder2<NettyChannelBuilder>
      Since:
      1.3.0
      See Also:
    • keepAliveWithoutCalls

      @CanIgnoreReturnValue public NettyChannelBuilder 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.

      Overrides:
      keepAliveWithoutCalls in class ForwardingChannelBuilder2<NettyChannelBuilder>
      Since:
      1.3.0
      See Also:
    • localSocketPicker

      @CanIgnoreReturnValue public NettyChannelBuilder localSocketPicker(@Nullable NettyChannelBuilder.LocalSocketPicker localSocketPicker)
      If non-null, attempts to create connections bound to a local port.
    • maxInboundMessageSize

      @CanIgnoreReturnValue public NettyChannelBuilder maxInboundMessageSize(int max)
      Sets the maximum message size allowed for a single gRPC frame. If an inbound messages larger than this limit is received it will not be processed and the RPC will fail with RESOURCE_EXHAUSTED.
      Overrides:
      maxInboundMessageSize in class ForwardingChannelBuilder2<NettyChannelBuilder>
      Parameters:
      max - the maximum number of bytes a single message can be.
      Returns:
      this
    • buildTransportFactory

      ClientTransportFactory buildTransportFactory()
    • assertEventLoopAndChannelType

      void assertEventLoopAndChannelType()
    • getDefaultPort

      int getDefaultPort()
    • createProtocolNegotiatorByType

      static ProtocolNegotiator createProtocolNegotiatorByType(NegotiationType negotiationType, io.netty.handler.ssl.SslContext sslContext, ObjectPool<? extends Executor> executorPool)
    • disableCheckAuthority

      @CanIgnoreReturnValue NettyChannelBuilder disableCheckAuthority()
    • enableCheckAuthority

      @CanIgnoreReturnValue NettyChannelBuilder enableCheckAuthority()
    • protocolNegotiatorFactory

      void protocolNegotiatorFactory(ProtocolNegotiator.ClientFactory protocolNegotiatorFactory)
    • setTracingEnabled

      void setTracingEnabled(boolean value)
    • setStatsEnabled

      void setStatsEnabled(boolean value)
    • setStatsRecordStartedRpcs

      void setStatsRecordStartedRpcs(boolean value)
    • setStatsRecordFinishedRpcs

      void setStatsRecordFinishedRpcs(boolean value)
    • setStatsRecordRealTimeMetrics

      void setStatsRecordRealTimeMetrics(boolean value)
    • setStatsRecordRetryMetrics

      void setStatsRecordRetryMetrics(boolean value)
    • setTransportTracerFactory

      @CanIgnoreReturnValue NettyChannelBuilder setTransportTracerFactory(TransportTracer.Factory transportTracerFactory)
    • getSupportedSocketAddressTypes

      static Collection<Class<? extends SocketAddress>> getSupportedSocketAddressTypes()