Package

com.twitter.finagle

builder

Permalink

package builder

Visibility
  1. Public
  2. All

Type Members

  1. class ClientBuilder[Req, Rep, HasCluster, HasCodec, HasHostConnectionLimit] extends AnyRef

    Permalink

    A builder of Finagle Clients.

    A builder of Finagle Clients.

    Please see the user guide for information on the preferred with-style and MethodBuilder client-construction APIs.

    val client = ClientBuilder()
      .stack(Http.client)
      .hosts("localhost:10000,localhost:10001,localhost:10003")
      .hostConnectionLimit(1)
      .tcpConnectTimeout(1.second)        // max time to spend establishing a TCP connection.
      .retries(2)                         // (1) per-request retries
      .reportTo(DefaultStatsReceiver)     // export host-level load data to the loaded-StatsReceiver
      .build()

    The ClientBuilder requires the definition of cluster, stack, and hostConnectionLimit. 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

    Service<HttpRequest, HttpResponse> service =
     ClientBuilder.safeBuild(
       ClientBuilder.get()
         .stack(Http.client())
         .hosts("localhost:10000,localhost:10001,localhost:10003")
         .hostConnectionLimit(1)
         .tcpConnectTimeout(1.second)
         .retries(2)
         .reportTo(DefaultStatsReceiver)

    Alternatively, using the unsafeBuild method on ClientBuilder 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.Top
    • tcpConnectTimeout: 1 second
    • requestTimeout: Duration.Top
    • timeout: Duration.Top
    • hostConnectionLimit: Int.MaxValue
    • hostConnectionCoresize: 0
    • hostConnectionIdleTime: Duration.Top
    • hostConnectionMaxWaiters: Int.MaxValue
    • failFast: true
    • failureAccrualParams, failureAccrualFactory: numFailures = 5, markDeadFor = 5 seconds

    Advanced 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 of false is used
    • hostConnectionMaxIdleTime: Duration.Top
    • hostConnectionMaxLifeTime: Duration.Top
    See also

    The user guide for information on the preferred with-style and MethodBuilder client-construction APIs.

  2. trait ClientConfigEvidence[HasCluster, HasCodec, HasHostConnectionLimit] extends AnyRef

    Permalink
    Annotations
    @implicitNotFound( ... )
  3. class IncompleteSpecification extends Exception

    Permalink

    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")
  4. trait Server extends ListeningServer

    Permalink

    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.

  5. class ServerBuilder[Req, Rep, HasCodec, HasBindTo, HasName] extends AnyRef

    Permalink

    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.

    Please see the Finagle user guide for information on the preferred with-style client-construction APIs.

    The main class to use is com.twitter.finagle.builder.ServerBuilder, as so

    ServerBuilder()
      .stack(Http.server)
      .hostConnectionMaxLifeTime(5.minutes)
      .readTimeout(2.minutes)
      .name("servicename")
      .bindTo(new InetSocketAddress(serverPort))
      .build(plusOneService)

    The ServerBuilder requires the definition of stack, 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()
      .stack(Http.server())
      .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.

    Defaults

    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

    See also

    The user guide for information on the preferred with-style APIs insead.

  6. trait ServerConfigEvidence[HasCodec, HasBindTo, HasName] extends AnyRef

    Permalink
    Annotations
    @implicitNotFound( ... )
  7. class SourceTrackingMonitor extends Monitor

    Permalink

    A monitor that unrolls the exception causes to report source information if any

Ungrouped