Packages

  • package root
    Definition Classes
    root
  • package com
    Definition Classes
    root
  • package twitter

    Start with com.twitter.finagle.

    Definition Classes
    com
  • package finagle

    Finagle is an extensible RPC system.

    Finagle is an extensible RPC system.

    Services are represented by class com.twitter.finagle.Service. Clients make use of com.twitter.finagle.Service objects while servers implement them.

    Finagle contains a number of protocol implementations; each of these implement Client and/or com.twitter.finagle.Server. For example, Finagle's HTTP implementation, com.twitter.finagle.Http (in package finagle-http), exposes both.

    Thus a simple HTTP server is built like this:

    import com.twitter.finagle.{Http, Service}
    import com.twitter.finagle.http.{Request, Response}
    import com.twitter.util.{Await, Future}
    
    val service = new Service[Request, Response] {
      def apply(req: Request): Future[Response] =
        Future.value(Response())
    }
    val server = Http.server.serve(":8080", service)
    Await.ready(server)

    We first define a service to which requests are dispatched. In this case, the service returns immediately with a HTTP 200 OK response, and with no content.

    This service is then served via the Http protocol on TCP port 8080. Finally we wait for the server to stop serving.

    We can now query our web server:

    % curl -D - localhost:8080
    HTTP/1.1 200 OK

    Building an HTTP client is also simple. (Note that type annotations are added for illustration.)

    import com.twitter.finagle.{Http, Service}
    import com.twitter.finagle.http.{Request, Response}
    import com.twitter.util.{Future, Return, Throw}
    
    val client: Service[Request, Response] = Http.client.newService("localhost:8080")
    val f: Future[Response] = client(Request()).respond {
      case Return(rep) =>
        printf("Got HTTP response %s\n", rep)
      case Throw(exc) =>
        printf("Got error %s\n", exc)
    }

    Http.client.newService("localhost:8080") constructs a new com.twitter.finagle.Service instance connected to localhost TCP port 8080. We then issue a HTTP/1.1 GET request to URI "/". The service returns a com.twitter.util.Future representing the result of the operation. We listen to this future, printing an appropriate message when the response arrives.

    The Finagle homepage contains useful documentation and resources for using Finagle.

    Definition Classes
    twitter
  • object Thrift extends Client[ThriftClientRequest, Array[Byte]] with Server[Array[Byte], Array[Byte]]

    Client and server for Apache Thrift.

    Client and server for Apache Thrift. Thrift implements Thrift framed transport and binary protocol by default, though custom protocol factories (i.e. wire encoding) may be injected with withProtocolFactory. The client, Client[ThriftClientRequest, Array[Byte]] provides direct access to the thrift transport, but we recommend using code generation through either Scrooge or a fork of the Apache generator. A rich API is provided to support interfaces generated with either of these code generators.

    The client and server uses the standard thrift protocols, with support for both framed and buffered transports. Finagle attempts to upgrade the protocol in order to ship an extra envelope carrying additional request metadata, containing, among other things, request IDs for Finagle's RPC tracing facilities.

    The negotiation is simple: on connection establishment, an improbably-named method is dispatched on the server. If that method isn't found, we are dealing with a legacy thrift server, and the standard protocol is used. If the remote server is also a finagle server (or any other supporting this extension), we reply to the request, and every subsequent request is dispatched with an envelope carrying trace metadata. The envelope itself is also a Thrift struct described here.

    Clients

    Clients can be created directly from an interface generated from a Thrift IDL:

    For example, this IDL:

    service TestService {
      string query(1: string x)
    }

    compiled with Scrooge, generates the interface TestService.FutureIface. This is then passed into Thrift.Client.newIface:

    Thrift.client.newIface[TestService.FutureIface](
      addr, classOf[TestService.FutureIface])

    However note that the Scala compiler can insert the latter Class for us, for which another variant of newIface is provided:

    Thrift.client.newIface[TestService.FutureIface](addr)

    In Java, we need to provide the class object:

    TestService.FutureIface client =
      Thrift.client.newIface(addr, TestService.FutureIface.class);

    The client uses the standard thrift protocols, with support for both framed and buffered transports. Finagle attempts to upgrade the protocol in order to ship an extra envelope carrying trace IDs and client IDs associated with the request. These are used by Finagle's tracing facilities and may be collected via aggregators like Zipkin.

    The negotiation is simple: on connection establishment, an improbably-named method is dispatched on the server. If that method isn't found, we are dealing with a legacy thrift server, and the standard protocol is used. If the remote server is also a finagle server (or any other supporting this extension), we reply to the request, and every subsequent request is dispatched with an envelope carrying trace metadata. The envelope itself is also a Thrift struct described here.

    Servers

    TestService.FutureIface must be implemented and passed into serveIface:

    // An echo service
    ThriftMux.server.serveIface(":*", new TestService.FutureIface {
      def query(x: String): Future[String] = Future.value(x)
    })
    Definition Classes
    finagle
  • Client
  • Server
  • param

object param

Linear Supertypes
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. param
  2. AnyRef
  3. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Type Members

  1. case class AttemptTTwitterUpgrade(upgrade: Boolean) extends Product with Serializable

    A Param to control upgrading the thrift protocol to TTwitter.

    A Param to control upgrading the thrift protocol to TTwitter.

    See also

    The user guide for details on Twitter-upgrade Thrift.

  2. case class ClientId(clientId: Option[thrift.ClientId]) extends Product with Serializable
  3. case class Framed(enabled: Boolean) extends Product with Serializable

    A Param to control whether a framed transport should be used.

    A Param to control whether a framed transport should be used. If this is set to false, a buffered transport is used. Framed transports are enabled by default.

    enabled

    Whether a framed transport should be used.

  4. case class MaxReusableBufferSize(maxReusableBufferSize: Int) extends Product with Serializable

    A Param to set the max size of a reusable buffer for the thrift response.

    A Param to set the max size of a reusable buffer for the thrift response. If the buffer size exceeds the specified value, the buffer is not reused, and a new buffer is used for the next thrift response. The default max size is 16Kb.

    maxReusableBufferSize

    Max buffer size in bytes.

  5. case class ProtocolFactory(protocolFactory: TProtocolFactory) extends Product with Serializable

Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  4. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  5. def clone(): AnyRef
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @native() @throws( ... )
  6. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  7. def equals(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  8. def finalize(): Unit
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  9. final def getClass(): Class[_]
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  10. def hashCode(): Int
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  11. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  12. val maxThriftBufferSize: Int
  13. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  14. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  15. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  16. val protocolFactory: TProtocolFactory

    The vanilla Thrift Transporter and Listener factories deviate from other protocols in the result of the netty pipeline: most other protocols expect to receive a framed Buf while vanilla thrift produces an Array[Byte].

    The vanilla Thrift Transporter and Listener factories deviate from other protocols in the result of the netty pipeline: most other protocols expect to receive a framed Buf while vanilla thrift produces an Array[Byte]. This has two related motivations. First, the end result needed by the thrift implementations is an Array[Byte], which is relatively trivial to deal with and is a JVM native type so it's unnecessary to go through a Buf. By avoiding an indirection through Buf we can avoid an unnecessary copy in the netty4 pipeline that would be required to ensure that the bytes were on the heap before entering the Finagle transport types.

  17. final def synchronized[T0](arg0: ⇒ T0): T0
    Definition Classes
    AnyRef
  18. def toString(): String
    Definition Classes
    AnyRef → Any
  19. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  20. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  21. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @native() @throws( ... )
  22. implicit object AttemptTTwitterUpgrade extends Param[AttemptTTwitterUpgrade] with Serializable
  23. implicit object ClientId extends Param[ClientId] with Serializable
  24. implicit object Framed extends Param[Framed] with Serializable
  25. implicit object MaxReusableBufferSize extends Param[MaxReusableBufferSize] with Serializable
  26. implicit object ProtocolFactory extends Param[ProtocolFactory] with Serializable

Inherited from AnyRef

Inherited from Any

Ungrouped