package service
- Alphabetic
- Public
- Protected
Type Members
- trait Filterable[+T] extends service.Filterable[T]
Used in conjunction with a
ServicePerEndpoint
builder to allow for filtering of aServicePerEndpoint
. - trait MethodPerEndpointBuilder[ServicePerEndpoint, MethodPerEndpoint] extends AnyRef
A typeclass to construct a MethodPerEndpoint by wrapping a ServicePerEndpoint.
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.
- trait ReqRepMethodPerEndpointBuilder[ReqRepServicePerEndpoint, MethodPerEndpoint] extends MethodPerEndpointBuilder[ReqRepServicePerEndpoint, MethodPerEndpoint]
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.
- trait ReqRepServicePerEndpointBuilder[ReqRepServicePerEndpoint <: Filterable[ReqRepServicePerEndpoint]] extends ServicePerEndpointBuilder[ReqRepServicePerEndpoint]
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.
- trait ServicePerEndpointBuilder[ServicePerEndpoint <: Filterable[ServicePerEndpoint]] extends AnyRef
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.
Value Members
- object ThriftCodec
- object ThriftReqRepServicePerEndpoint
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, orReqRepServicePerEndpoint
, istrait 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
, istrait Logger.MethodPerEndpoint { def log(message: String, logLevel: Int): Future[String] def getLogSize(): Future[Int] }
ReqRepServicePerEndpoints can be modified and composed with Finagle
Filters
. - object ThriftResponseClassifier
ResponseClassifiers
for use withfinagle-thrift
request/responses.ResponseClassifiers
for use withfinagle-thrift
request/responses.Thrift (and ThriftMux) services are a bit unusual in that there is only a single
Service
fromArray[Byte]
toArray[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 andThrift.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 // avoid this style! }
Often times, a good default classifier is ThriftResponseClassifier.ThriftExceptionsAsFailures which treats any Thrift response that deserializes into an Exception as a non-retryable failure.
- object ThriftServicePerEndpoint
Construct Service interface for a Thrift method.
Construct Service interface for a Thrift method.
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
.2. Using a method interface, i.e. a collection of methods returning
Futures
.Example: for a Thrift service IDL:
service Logger { string log(1: string message, 2: i32 logLevel); i32 getLogSize(); }
the
Service
interface, orServicePerEndpoint
, istrait LoggerServicePerEndpoint { val log: com.twitter.finagle.Service[Logger.Log.Args, Logger.Log.SuccessType] val getLogSize: com.twitter.finagle.Service[Logger.GetLogSize.Args, Logger.GetLogSize.SuccessType] }
and the method interface, or
MethodPerEndpoint
, istrait Logger.MethodPerEndpoint { def log(message: String, logLevel: Int): Future[String] def getLogSize(): Future[Int] }
Service interfaces can be modified and composed with Finagle
Filters
.