A builder of Finagle Clients.
Used by builder to throw exceptions if the specification is incomplete.
Used by builder to throw exceptions if the specification is incomplete.
if (!_codec.isDefined) throw new IncompleteSpecification("No codec was specified")
A listening server.
A listening server. This is for compatibility with older code that is using builder.Server. New code should use the ListeningServer trait.
A handy Builder for constructing Servers (i.e., binding Services to a port).
A handy Builder for constructing Servers (i.e., binding Services to a port). This class is subclassable. Override copy() and build() to do your own dirty work.
The main class to use is com.twitter.finagle.builder.ServerBuilder, as so
ServerBuilder() .codec(Http) .hostConnectionMaxLifeTime(5.minutes) .readTimeout(2.minutes) .name("servicename") .bindTo(new InetSocketAddress(serverPort)) .build(plusOneService)
The ServerBuilder
requires the definition of codec
, bindTo
and name
. In Scala, these are statically type
checked, and in Java the lack of any of the above causes a runtime
error.
The build
method uses an implicit argument to statically
typecheck the builder (to ensure completeness, see above). The Java
compiler cannot provide such implicit, so we provide a separate
function in Java to accomplish this. Thus, the Java code for the
above is
ServerBuilder.safeBuild( plusOneService, ServerBuilder.get() .codec(Http) .hostConnectionMaxLifeTime(5.minutes) .readTimeout(2.minutes) .name("servicename") .bindTo(new InetSocketAddress(serverPort)));
Alternatively, using the unsafeBuild
method on ServerBuilder
verifies the builder dynamically, resulting in a runtime error
instead of a compiler error.
The following defaults are applied to servers constructed via ServerBuilder, unless overridden with the corresponding method. These defaults were chosen carefully so as to work well for most use cases. Before changing any of them, make sure that you know exactly how they will affect your application -- these options are typically only changed by expert users.
- openConnectionsThresholds
: None
- maxConcurrentRequests
: Int.MaxValue
- backlog
: OS-defined default value
A monitor that unrolls the exception causes to report source information if any
Cluster is a collection of servers.
Cluster is a collection of servers. The intention of this interface to express membership in a cluster of servers that provide a specific service.
Note that a Cluster can be elastic: members can join or leave at any time.
(Since version 2014-11-21) Use com.twitter.finagle.Name
to represent clusters instead
A Cluster implementation that guarantees a minimum set while allowing you to specify a Cluster to supplement the initial static set.
A Cluster implementation that guarantees a minimum set while allowing you to specify a Cluster to supplement the initial static set. All operations that would remove entries in the minimum set are censored and counted.
(Since version 2014-11-21) Use com.twitter.finagle.Name
to represent clusters instead
Dynamic clusters, such as serversets, can be volatile and untrustworthy.
Dynamic clusters, such as serversets, can be volatile and untrustworthy. Finagle has mechanisms for handling failed nodes that haven't been removed from the cluster. However there are cases where a server's entry me be falsely removed from the cluster thus causing clients to exert unnecessary pressure on remaining nodes. This filter reduces that impact by delaying node removals. We do so by disallowing the cluster to shrink. Add events are always propagated but Rem events require a corresponding Add.
(Since version 2014-11-21) Use com.twitter.finagle.Name
to represent clusters instead
A simple static cluster implementation.
A simple static cluster implementation.
(Since version 2014-11-21) Use com.twitter.finagle.Name
to represent clusters instead
Factory for com.twitter.finagle.builder.ClientBuilder instances
Factory for com.twitter.finagle.builder.ServerBuilder instances
A builder of Finagle Clients.
Please see the Finagle user guide for information on a newer set of client-construction APIs introduced in Finagle v6.
The
ClientBuilder
requires the definition ofcluster
,codec
, andhostConnectionLimit
. In Scala, these are statically type checked, and in Java the lack of any of the above causes a runtime error.The
build
method uses an implicit argument to statically typecheck the builder (to ensure completeness, see above). The Java compiler cannot provide such implicit, so we provide a separate function in Java to accomplish this. Thus, the Java code for the above isAlternatively, using the
unsafeBuild
method onClientBuilder
verifies the builder dynamically, resulting in a runtime error instead of a compiler error.Defaults
The following defaults are applied to clients constructed via ClientBuilder, unless overridden with the corresponding method. These defaults were chosen carefully so as to work well for most use cases.
Commonly-configured options:
connectTimeout
: Duration.ToptcpConnectTimeout
: 1 secondrequestTimeout
: Duration.Toptimeout
: Duration.TophostConnectionLimit
:Int.MaxValue
hostConnectionCoresize
: 0hostConnectionIdleTime
: Duration.TophostConnectionMaxWaiters
:Int.MaxValue
failFast
: truefailureAccrualParams
,failureAccrualFactory
:numFailures
= 5,markDeadFor
= 5 secondsAdvanced options:
Before changing any of these, make sure that you know exactly how they will affect your application -- these options are typically only changed by expert users.
keepAlive
: Unspecified, in which case the Java default offalse
is usedreaderIdleTimeout
: Duration.TopwriterIdleTimeout
: Duration.TophostConnectionMaxIdleTime
: Duration.TophostConnectionMaxLifeTime
: Duration.TopsendBufferSize
,recvBufferSize
: OS-defined default value