Slide 336
Slide 336 text
@BriceDutheil @dwursteisen
#DevoxxFR #Rx
@GET public void wait(@Suspended final AsyncResponse response) {
Observable.fromCallable(() -> makeValue())
.flatMap(lastNumber -> {
Observable aObs = Observable.fromCallable(() -> wsServiceA(lastNumber))
.subscribeOn(Schedulers.io())
.flatMap(r -> {
if (r.getStatus() != 200) {
return Observable.error(new ServiceUnavailable("service A"));
}
return Observable.just(r.readEntity(String.class));
})
.retry(2);
Observable bObs = Observable.fromCallable(() -> wsServiceB(lastNumber))
.subscribeOn(Schedulers.io())
.map(r -> r.readEntity(String.class))
.timeout(500, MILLISECONDS,
error(new ServiceTimeout("service B")));
return Observable.zip(aObs, bObs, (a, b) -> format("=> Result : %s, %s", a, b);
})
.subscribe(response::resume,
(error) -> {
response.resume(Response.status(((HttpServiceException) error).proposedHttpStatus)
.entity(error.getMessage())
.build());
});
}
Défini un délai acceptable