package com.github.signed.sandboxes.spring.boot.echo.client; import org.springframework.http.HttpEntity; import org.springframework.http.ResponseEntity; import org.springframework.util.concurrent.ListenableFuture; import org.springframework.web.client.AsyncRestTemplate; import com.github.signed.sandboxes.spring.boot.echo.api.EchoTransferObject; import com.github.signed.sandboxes.spring.boot.echo.server.EmbeddedServletContainer; import rx.Observable; public class DelayEchoServiceClient { public Observable<ResponseEntity<EchoTransferObject>> callWith(Delay delay, Message message) { AsyncRestTemplate rest = new AsyncRestTemplate(); ListenableFuture<ResponseEntity<EchoTransferObject>> first = rest.postForEntity("http://localhost:{port}/", echoTransferObject(delay, message), EchoTransferObject.class, EmbeddedServletContainer.PORT); return Observable.from(first); } private HttpEntity<EchoTransferObject> echoTransferObject(Delay delay, Message message) { EchoTransferObject requestObject = new EchoTransferObject(); requestObject.message = message.text(); requestObject.responseDelayInMilliseconds = delay.milliseconds(); return new HttpEntity<>(requestObject); } }