cxf-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "james strachan (JIRA)" <j...@apache.org>
Subject [jira] [Created] (CXF-6833) support RxJava Observable<T> in return values as a more composeable alternative to Future<T>
Date Wed, 16 Mar 2016 09:14:33 GMT
james strachan created CXF-6833:
-----------------------------------

             Summary: support RxJava Observable<T> in return values as a more composeable
alternative to Future<T>
                 Key: CXF-6833
                 URL: https://issues.apache.org/jira/browse/CXF-6833
             Project: CXF
          Issue Type: Improvement
            Reporter: james strachan


when invoking multiple REST services concurrently in a microservice kinda world it can be
really helpful to use RxJava's Observable<T> so that you can easily compose concurrent
asynchronous requests together.

e.g. see this blog:
http://joluet.github.io/blog/2014/07/07/rxjava-retrofit/

Its basically about using RxJava's Observable<T> as the result type; which is a little
like a Future<T> but can handle streams of values and is composable.

It would be great to do this both on the client and server side; as a server may invoke multiple
asynchronous back ends and return a composition of results etc.
e.g.
{code}
@GET("/session.json")
Observable<LoginResponse> login();

@GET("/user.json")
Observable<UserState> getUserState();
{code}

you can then use the Observable<T> composition methods to join / flatMap  to compose
multiple requests across different microservice invocations together with timeouts etc e.g.
to compose the latest from 2 calls:

{code}
Observable.combineLatest(api.fetchUserProfile(), api.getUserState(),
(user, userStatus) -> new Pair<>(user, userStatus));
{code}

and you're done! There's support for timeouts and other kinds of composition mechanisms too.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message