Finagle Lightning Talk JPR 2014
-
Upload
chris-phelps -
Category
Software
-
view
234 -
download
5
Transcript of Finagle Lightning Talk JPR 2014
Reactive SOA with Finagle
Finagle Protocol agnostic RPC framework From Twitter Async and non-blocking built on Netty
and Futures Scala and Java APIs
Services and Filters Servicetrait Service[Req, Rep] extends (Req => Future[Rep])
Filterabstract class Filter[-ReqIn, +RepOut, +ReqOut, -RepIn] extends ((ReqIn, Service[ReqOut, RepIn]) => Future[RepOut])
Compositionval retryWithTimeout = retryFilter andThen timeoutFilter andThen service
Rest + RPC
Combining services Services return Futures Service calls may need prior results Don’t wait for completion Futures have callbacks
onSuccess onFailure
Nested Callbacks
Future Composition
CombinatorsFuture[A] map { A => B } : Future[B]
Future[A] flatMap { A => Future[B] } : Future[B]
Example
User Serviceclass UserServiceImpl extends UserRpc.FutureIface { def getUser() = { val user = User(Some("Chris”),
Some("[email protected]")) Future.value(user) }}
Client (flatMap)val userfuture = userclient.getUser()val contentfuture = tenantclient.getTenant() flatMap { tenant => contentclient.getContent(tenant) } flatMap { content => userfuture flatMap { user => personalizeclient .personalizeContent(content, user) } }
Client (for-comprehension)val newcontentfuture = for { user <- userclient.getUser() tenant <- tenantclient.getTenant() content <- contentclient.getContent(tenant) personalized <- personalizeclient.personalizeContent(content, user)} yield personalized
contentfuture onSuccess { message => println("received content response: " + message.customtext.get) }