cxf-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sergey Beryozkin (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CXF-6833) support RxJava Observable<T> in return values as a more composeable alternative to Future<T>
Date Fri, 29 Apr 2016 11:01:12 GMT

    [ https://issues.apache.org/jira/browse/CXF-6833?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15263899#comment-15263899
] 

Sergey Beryozkin commented on CXF-6833:
---------------------------------------

I suppose you can have a MessageBodyWriter supporting Observable, so if the method returns
Observable then this writer will be selected, and its writeTo method it will get the data
in needs or may be will stream from it and write to OutputStream.

I'm going to do a bit of home-work on it to get a better understanding of the whole technology.


> 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: Sub-task
>          Components: JAX-RS
>            Reporter: james strachan
>             Fix For: 3.2.0
>
>
> 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