Class GrpcServerBuilder
- java.lang.Object
-
- io.servicetalk.grpc.api.GrpcServerBuilder
-
public abstract class GrpcServerBuilder extends java.lang.Object
A builder for building a gRPC server.
-
-
Constructor Summary
Constructors Constructor Description GrpcServerBuilder()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods Modifier and Type Method Description abstract GrpcServerBuilder
appendConnectionAcceptorFilter(ConnectionAcceptorFactory factory)
Append the filter to the chain of filters used to decorate theConnectionAcceptor
used by this builder.GrpcServerBuilder
appendHttpServiceFilter(StreamingHttpServiceFilterFactory factory)
Append the filter to the chain of filters used to decorate the service used by this builder.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 providedPredicate
.abstract GrpcServerBuilder
backlog(int backlog)
The maximum queue length for incoming connection indications (a request to connect) is set to the backlog parameter.abstract GrpcServerBuilder
bufferAllocator(BufferAllocator allocator)
Sets theBufferAllocator
to be used by this server.abstract GrpcServerBuilder
disableDrainingRequestPayloadBody()
Disables automatic consumption of requestpayload body
when it is not consumed by the service.protected abstract void
doAppendHttpServiceFilter(StreamingHttpServiceFilterFactory factory)
Append the filter to the chain of filters used to decorate the service used by this builder.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 providedPredicate
.protected abstract Single<ServerContext>
doListen(GrpcServiceFactory<?,?,?> serviceFactory)
Starts this server and returns theServerContext
after the server has been successfully started.abstract GrpcServerBuilder
enableWireLogging(java.lang.String loggerName)
Deprecated.UseenableWireLogging(String, LogLevel, BooleanSupplier)
instead.abstract GrpcServerBuilder
enableWireLogging(java.lang.String loggerName, LogLevel logLevel, java.util.function.BooleanSupplier logUserData)
Enables wire-logging for connections created by this builder.abstract GrpcServerBuilder
executionStrategy(GrpcExecutionStrategy strategy)
Sets theHttpExecutionStrategy
to be used by this server.abstract GrpcServerBuilder
ioExecutor(IoExecutor ioExecutor)
Sets theIoExecutor
to be used by this server.Single<ServerContext>
listen(GrpcServiceFactory<?,?,?>... serviceFactories)
Starts this server and returns theServerContext
after the server has been successfully started.ServerContext
listenAndAwait(GrpcServiceFactory<?,?,?>... serviceFactories)
Starts this server and returns theServerContext
after the server has been successfully started.abstract GrpcServerBuilder
protocols(HttpProtocolConfig... protocols)
Configurations of various underlying protocol versions.abstract GrpcServerSecurityConfigurator
secure()
Initiate security configuration for this server.abstract GrpcServerSecurityConfigurator
secure(java.lang.String... sniHostnames)
Initiate security configuration for this server for the passedsniHostnames
.abstract <T> GrpcServerBuilder
socketOption(java.net.SocketOption<T> option, T value)
Add aSocketOption
that is applied.abstract GrpcServerBuilder
transportObserver(TransportObserver transportObserver)
Sets aTransportObserver
that provides visibility into transport events.
-
-
-
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 anycommit
method on the returnedGrpcServerSecurityConfigurator
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 thecommit
methods after all configuration is done.
-
secure
public abstract GrpcServerSecurityConfigurator secure(java.lang.String... sniHostnames)
Initiate security configuration for this server for the passedsniHostnames
. Calling anycommit
method on the returnedGrpcServerSecurityConfigurator
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 specifiedsniHostnames
.- 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 thecommit
methods after all configuration is done.
-
socketOption
public abstract <T> GrpcServerBuilder socketOption(java.net.SocketOption<T> option, T value)
Add aSocketOption
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
@Deprecated public abstract GrpcServerBuilder enableWireLogging(java.lang.String loggerName)
Deprecated.UseenableWireLogging(String, LogLevel, BooleanSupplier)
instead.Enable wire-logging for this server.- Parameters:
loggerName
- The name of the logger to log wire events.- Returns:
this
.
-
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
.
-
transportObserver
public abstract GrpcServerBuilder transportObserver(TransportObserver transportObserver)
Sets aTransportObserver
that provides visibility into transport events.- Parameters:
transportObserver
- ATransportObserver
that provides visibility into transport events.- Returns:
this
.
-
disableDrainingRequestPayloadBody
public abstract GrpcServerBuilder disableDrainingRequestPayloadBody()
Disables automatic consumption of requestpayload 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 theConnectionAcceptor
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 thisConnectionAcceptorFactory
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 providedPredicate
.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
- thePredicate
to test if the filter must be applied.factory
-StreamingHttpServiceFilterFactory
to append.- Returns:
this
.
-
ioExecutor
public abstract GrpcServerBuilder ioExecutor(IoExecutor ioExecutor)
Sets theIoExecutor
to be used by this server.- Parameters:
ioExecutor
-IoExecutor
to use.- Returns:
this
.
-
bufferAllocator
public abstract GrpcServerBuilder bufferAllocator(BufferAllocator allocator)
Sets theBufferAllocator
to be used by this server.- Parameters:
allocator
-BufferAllocator
to use.- Returns:
this
.
-
executionStrategy
public abstract GrpcServerBuilder executionStrategy(GrpcExecutionStrategy strategy)
Sets theHttpExecutionStrategy
to be used by this server.- Parameters:
strategy
-HttpExecutionStrategy
to use by this server.- Returns:
this
.
-
listen
public final Single<ServerContext> listen(GrpcServiceFactory<?,?,?>... serviceFactories)
Starts this server and returns theServerContext
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 theServerContext
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 anException
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 theServerContext
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 anException
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 providedPredicate
.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
- thePredicate
to test if the filter must be applied.factory
-StreamingHttpServiceFilterFactory
to append.
-
-