Used in conjunction with a ServicePerEndpoint
builder to allow for filtering
of a ServicePerEndpoint
.
A typeclass to construct a MethodPerEndpoint by wrapping a ServicePerEndpoint.
A typeclass to construct a MethodPerEndpoint by wrapping a ReqRepServicePerEndpoint.
A typeclass to construct a MethodPerEndpoint by wrapping a ReqRepServicePerEndpoint.
This is a compatibility constructor to replace an existing Future interface with one built from a ReqRepServicePerEndpoint.
Scrooge generates implementations of this builder.
Typeclass ReqRepServicePerEndpointBuilder[T] creates T-typed interfaces from thrift clients.
Typeclass ReqRepServicePerEndpointBuilder[T] creates T-typed interfaces from thrift clients.
Scrooge generates implementations of this builder.
Typeclass ServicePerEndpointBuilder[T] creates T-typed interfaces from thrift clients.
Typeclass ServicePerEndpointBuilder[T] creates T-typed interfaces from thrift clients. Scrooge generates implementations of this builder.
A typeclass to construct a ThriftService by wrapping a ReqRepServicePerEndpoint.
A typeclass to construct a ThriftService by wrapping a ReqRepServicePerEndpoint.
This is a compatibility constructor to replace an existing Future interface with one built from a ReqRepServicePerEndpoint.
Scrooge generates implementations of this builder.
(Since version 2018-01-12) Use MethodPerEndpointBuilder
A typeclass to construct a ThriftService by wrapping a ServicePerEndpoint.
A typeclass to construct a ThriftService by wrapping a ServicePerEndpoint. This is a compatibility constructor to replace an existing Future interface with one built from a ServicePerEndpoint.
Scrooge generates implementations of this builder.
(Since version 2018-01-12) Use MethodPerEndpointBuilder
Construct Service[scrooge.Request[method.Args],scrooge.Response[method.SuccessType]]
interface for a ThriftMethod.
Construct Service[scrooge.Request[method.Args],scrooge.Response[method.SuccessType]]
interface for a ThriftMethod.
There are two ways to use a Scrooge-generated Thrift Service
with Finagle:
1. Using a Service interface, i.e. a collection of Finagle Services
, e.g., ReqRepServicePerEndpoint.
2. Using a method interface, i.e. a collection of methods returning Futures
, e.g, MethodPerEndpoint.
Example: for a Thrift service IDL:
service Logger { string log(1: string message, 2: i32 logLevel); i32 getLogSize(); }
the Service
interface, or ReqRepServicePerEndpoint
, is
trait LoggerServiceIface { val log: com.twitter.finagle.Service[scrooge.Request[Logger.Log.Args], scrooge.Response[Logger.Log.SuccessType]] val getLogSize: com.twitter.finagle.Service[[scrooge.Request[Logger.GetLogSize.Args], scrooge.Response[Logger.GetLogSize.SuccessType]] }
and the method interface, or MethodPerEndpoint
, is
trait Logger[Future] { def log(message: String, logLevel: Int): Future[String] def getLogSize(): Future[Int] }
ReqRepServicePerEndpoints can be modified and composed with Finagle Filters
.
ResponseClassifiers
for use with finagle-thrift
request/responses.
ResponseClassifiers
for use with finagle-thrift
request/responses.
Thrift (and ThriftMux) services are a bit unusual in that
there is only a single Service
from Array[Byte]
to Array[Byte]
for all the methods of an IDL's service.
Thrift classifiers should be written in terms
of the Scrooge generated request $Service.$Method.Args
type and the
method's response type. This is because there is support in Scrooge
and Thrift.newService/newClient
to deserialize the responses into the expected application types
so that classifiers can be written in a normal way.
Given an idl:
exception NotFoundException { 1: string reason } exception RateLimitedException { 1: string reason } service SocialGraph { i32 follow(1: i64 follower, 2: i64 followee) throws ( 1: NotFoundException ex, 2: RateLimitedException ex ) }
One possible custom classifier would be:
val classifier: ResponseClassifier = { case ReqRep(_, Throw(_: RateLimitedException)) => RetryableFailure case ReqRep(_, Throw(_: NotFoundException)) => NonRetryableFailure case ReqRep(_, Return(x: Int)) if x == 0 => NonRetryableFailure case ReqRep(SocialGraph.Follow.Args(a, b), _) if a <= 0 || b <= 0 => NonRetryableFailure }
Often times, a good default classifier is ThriftResponseClassifier.ThriftExceptionsAsFailures which treats any Thrift response that deserializes into an Exception as a non-retryable failure.
A typeclass to construct a MethodPerEndpoint by wrapping a ServicePerEndpoint. This is a compatibility constructor to replace an existing Future interface with one built from a ServicePerEndpoint.
Scrooge generates implementations of this builder.