Class GrpcServerBuilder


  • public abstract class GrpcServerBuilder
    extends java.lang.Object
    A builder for building a gRPC server.
    • Constructor Detail

      • GrpcServerBuilder

        public GrpcServerBuilder()
    • Method Detail

      • protocols

        public abstract GrpcServerBuilder protocols​(HttpProtocolConfig... protocols)
        Configurations of various underlying protocol versions.

        Note: the order of specified protocols will reflect on priorities for ALPN in case the connections are secured.

        Parameters:
        protocols - HttpProtocolConfig for each protocol that should be supported.
        Returns:
        this.
      • backlog

        public abstract GrpcServerBuilder backlog​(int backlog)
        The maximum queue length for incoming connection indications (a request to connect) is set to the backlog parameter. If a connection indication arrives when the queue is full, the connection may time out.
        Parameters:
        backlog - the backlog to use when accepting connections.
        Returns:
        this.
      • secure

        public abstract GrpcServerSecurityConfigurator secure()
        Initiate security configuration for this server. Calling any commit method on the returned GrpcServerSecurityConfigurator will commit the configuration.

        Additionally use secure(String...) to define configurations for specific SNI hostnames. If such configuration is additionally defined then configuration using this method is used as default if the hostname does not match any of the specified hostnames.

        Returns:
        GrpcServerSecurityConfigurator to configure security for this server. It is mandatory to call any one of the commit methods after all configuration is done.
      • secure

        public abstract GrpcServerSecurityConfigurator secure​(java.lang.String... sniHostnames)
        Initiate security configuration for this server for the passed sniHostnames. Calling any commit method on the returned GrpcServerSecurityConfigurator will commit the configuration.

        When using this method, it is mandatory to also define the default configuration using secure() which is used when the hostname does not match any of the specified sniHostnames.

        Parameters:
        sniHostnames - SNI hostnames for which this config is being defined.
        Returns:
        GrpcServerSecurityConfigurator to configure security for this server. It is mandatory to call any one of the commit methods after all configuration is done.
      • socketOption

        public abstract <T> GrpcServerBuilder socketOption​(java.net.SocketOption<T> option,
                                                           T value)
        Add a SocketOption that is applied.
        Type Parameters:
        T - the type of the value.
        Parameters:
        option - the option to apply.
        value - the value.
        Returns:
        this.
        See Also:
        StandardSocketOptions, ServiceTalkSocketOptions
      • enableWireLogging

        public abstract GrpcServerBuilder enableWireLogging​(java.lang.String loggerName,
                                                            LogLevel logLevel,
                                                            java.util.function.BooleanSupplier logUserData)
        Enables wire-logging for connections created by this builder.
        Parameters:
        loggerName - The name of the logger to log wire events.
        logLevel - The level to log at.
        logUserData - true to include user data (e.g. data, headers, etc.). false to exclude user data and log only network events.
        Returns:
        this.
      • disableDrainingRequestPayloadBody

        public abstract GrpcServerBuilder disableDrainingRequestPayloadBody()
        Disables automatic consumption of request payload body when it is not consumed by the service.

        For persistent HTTP connections it is required to eventually consume the entire request payload to enable reading of the next request. This is required because requests are pipelined for HTTP/1.1, so if the previous request is not completely read, next request can not be read from the socket. For cases when there is a possibility that user may forget to consume request payload, ServiceTalk automatically consumes request payload body. This automatic consumption behavior may create some overhead and can be disabled using this method when it is guaranteed that all request paths consumes all request payloads eventually. An example of guaranteed consumption are non-streaming APIs.

        Returns:
        this.
      • appendConnectionAcceptorFilter

        public abstract GrpcServerBuilder appendConnectionAcceptorFilter​(ConnectionAcceptorFactory factory)
        Append the filter to the chain of filters used to decorate the ConnectionAcceptor used by this builder.

        The order of execution of these filters are in order of append. If 3 filters are added as follows:

             builder.appendConnectionAcceptorFilter(filter1).appendConnectionAcceptorFilter(filter2).
             appendConnectionAcceptorFilter(filter3)
         
        accepting a connection by a filter wrapped by this filter chain, the order of invocation of these filters will be:
             filter1 => filter2 => filter3
         
        Parameters:
        factory - ConnectionAcceptorFactory to append. Lifetime of this ConnectionAcceptorFactory is managed by this builder and the server started thereof.
        Returns:
        this.
      • appendHttpServiceFilter

        public final GrpcServerBuilder appendHttpServiceFilter​(StreamingHttpServiceFilterFactory factory)
        Append the filter to the chain of filters used to decorate the service used by this builder.

        The order of execution of these filters are in order of append. If 3 filters are added as follows:

             builder.append(filter1).append(filter2).append(filter3)
         
        accepting a request by a service wrapped by this filter chain, the order of invocation of these filters will be:
             filter1 => filter2 => filter3 => service
         
        Parameters:
        factory - StreamingHttpServiceFilterFactory to append.
        Returns:
        this.
      • appendHttpServiceFilter

        public final GrpcServerBuilder appendHttpServiceFilter​(java.util.function.Predicate<StreamingHttpRequest> predicate,
                                                               StreamingHttpServiceFilterFactory factory)
        Append the filter to the chain of filters used to decorate the service used by this builder, for every request that passes the provided Predicate.

        The order of execution of these filters are in order of append. If 3 filters are added as follows:

             builder.append(filter1).append(filter2).append(filter3)
         
        accepting a request by a service wrapped by this filter chain, the order of invocation of these filters will be:
             filter1 => filter2 => filter3 => service
         
        Parameters:
        predicate - the Predicate to test if the filter must be applied.
        factory - StreamingHttpServiceFilterFactory to append.
        Returns:
        this.
      • listen

        public final Single<ServerContext> listen​(GrpcServiceFactory<?,​?,​?>... serviceFactories)
        Starts this server and returns the ServerContext after the server has been successfully started.

        If the underlying protocol (eg. TCP) supports it this will result in a socket bind/listen on address.

        Parameters:
        serviceFactories - GrpcServiceFactory(s) to create a gRPC service.
        Returns:
        A Single that completes when the server is successfully started or terminates with an error if the server could not be started.
      • listenAndAwait

        public final ServerContext listenAndAwait​(GrpcServiceFactory<?,​?,​?>... serviceFactories)
                                           throws java.lang.Exception
        Starts this server and returns the ServerContext after the server has been successfully started.

        If the underlying protocol (eg. TCP) supports it this will result in a socket bind/listen on address.

        Parameters:
        serviceFactories - GrpcServiceFactory(s) to create a gRPC service.
        Returns:
        A ServerContext by blocking the calling thread until the server is successfully started or throws an Exception if the server could not be started.
        Throws:
        java.lang.Exception - if the server could not be started.
      • doListen

        protected abstract Single<ServerContext> doListen​(GrpcServiceFactory<?,​?,​?> serviceFactory)
        Starts this server and returns the ServerContext after the server has been successfully started.

        If the underlying protocol (eg. TCP) supports it this will result in a socket bind/listen on address.

        Parameters:
        serviceFactory - GrpcServiceFactory to create a gRPC service.
        Returns:
        A ServerContext by blocking the calling thread until the server is successfully started or throws an Exception if the server could not be started.
      • doAppendHttpServiceFilter

        protected abstract void doAppendHttpServiceFilter​(StreamingHttpServiceFilterFactory factory)
        Append the filter to the chain of filters used to decorate the service used by this builder.

        The order of execution of these filters are in order of append. If 3 filters are added as follows:

             builder.append(filter1).append(filter2).append(filter3)
         
        accepting a request by a service wrapped by this filter chain, the order of invocation of these filters will be:
             filter1 => filter2 => filter3 => service
         
        Parameters:
        factory - StreamingHttpServiceFilterFactory to append.
      • doAppendHttpServiceFilter

        protected abstract void doAppendHttpServiceFilter​(java.util.function.Predicate<StreamingHttpRequest> predicate,
                                                          StreamingHttpServiceFilterFactory factory)
        Append the filter to the chain of filters used to decorate the service used by this builder, for every request that passes the provided Predicate.

        The order of execution of these filters are in order of append. If 3 filters are added as follows:

             builder.append(filter1).append(filter2).append(filter3)
         
        accepting a request by a service wrapped by this filter chain, the order of invocation of these filters will be:
             filter1 => filter2 => filter3 => service
         
        Parameters:
        predicate - the Predicate to test if the filter must be applied.
        factory - StreamingHttpServiceFilterFactory to append.