playframework - Play Framework handle request timeout -


how can handle timeout exception in play ws client? when specify requesttimeout , process stream, completionstage finishes though there exception.

see below example.

code (taken here):

// make request, should timeout         completionstage<streamedresponse> futureresponse = ws.url("https://download.docker.com/mac/stable/docker.dmg")                 .setmethod("get").setrequesttimeout(1000)                 .stream();          completionstage<long> bytesreturned = futureresponse.thencompose(res -> {             source<bytestring, ?> responsebody = res.getbody();              // count number of bytes returned             sink<bytestring, completionstage<long>> bytessum = sink.fold(0l, (total, bytes) ->              {                  long len = bytes.toarray().length;                 return total + len;             });              return responsebody.runwith(bytessum, materializer);         }).handle((res, err) -> {             logger.info("res = {}, err = {}", res, err);             return 200l;         }).exceptionally(ex -> {             logger.error("see exception");             return 100l;         });         try {             bytesreturned.tocompletablefuture().get();             logger.info("got response");         } catch (interruptedexception e) {             // todo auto-generated catch block             e.printstacktrace();         } catch (executionexception e) {             // todo auto-generated catch block             e.printstacktrace();         }         logger.error("step completed"); 

i see in logs java.util.concurrent.timeoutexception , o.a.netty.timeout.timeouttimertask thrown, futureresponse completes successfully. there way catch error?

my problem trying return response user though controller , hangs because not data transmitted.

[debug] i.n.u.i.javassisttypeparametermatchergenerator - generated: io.netty.util.internal.__matchers__.org.asynchttpclient.httpresponsebodypartmatcher [debug] o.a.netty.channel.defaultchannelpool - closed 0 connections out of 0 in 0 ms [debug] o.a.netty.timeout.timeouttimertask - request timeout download.docker.com/52.84.239.124:443 after 1000 ms nettyresponsefuture{currentretry=0,     isdone=0,     iscancelled=0,     asynchandler=play.api.libs.ws.ahc.streamed$defaultstreamedasynchandler@376665d1,     nettyrequest=org.asynchttpclient.netty.request.nettyrequest@39a19d4d,     future=java.util.concurrent.completablefuture@3d9e0ea1[not completed],     uri=https://download.docker.com/mac/stable/docker.dmg,     keepalive=true,     redirectcount=0,     timeoutsholder=org.asynchttpclient.netty.timeout.timeoutsholder@789c9776,     inauth=0,     statusreceived=1,     touch=1491606083196} after 1075 ms [debug] o.a.netty.channel.channelmanager - closing channel [id: 0x66ec6bbd, l:/10.155.124.116:52337 - r:download.docker.com/52.84.239.124:443]  [debug] o.a.netty.request.nettyrequestsender - aborting future nettyresponsefuture{currentretry=0,     isdone=0,     iscancelled=0,     asynchandler=play.api.libs.ws.ahc.streamed$defaultstreamedasynchandler@376665d1,     nettyrequest=org.asynchttpclient.netty.request.nettyrequest@39a19d4d,     future=java.util.concurrent.completablefuture@3d9e0ea1[not completed],     uri=https://download.docker.com/mac/stable/docker.dmg,     keepalive=true,     redirectcount=0,     timeoutsholder=org.asynchttpclient.netty.timeout.timeoutsholder@789c9776,     inauth=0,     statusreceived=1,     touch=1491606083196}  [debug] o.a.netty.request.nettyrequestsender - request timeout download.docker.com/52.84.239.124:443 after 1000 ms java.util.concurrent.timeoutexception: request timeout download.docker.com/52.84.239.124:443 after 1000 ms     @ org.asynchttpclient.netty.timeout.timeouttimertask.expire(timeouttimertask.java:43)     @ org.asynchttpclient.netty.timeout.requesttimeouttimertask.run(requesttimeouttimertask.java:48)     @ io.netty.util.hashedwheeltimer$hashedwheeltimeout.expire(hashedwheeltimer.java:588)     @ io.netty.util.hashedwheeltimer$hashedwheelbucket.expiretimeouts(hashedwheeltimer.java:662)     @ io.netty.util.hashedwheeltimer$worker.run(hashedwheeltimer.java:385)     @ java.lang.thread.run(thread.java:745) [debug] o.a.netty.handler.httphandler - channel closed: [id: 0x66ec6bbd, l:/10.155.124.116:52337 ! r:download.docker.com/52.84.239.124:443] attribute instance [info] controllers.redirectcontroller - res = 2556824, err = null [info] controllers.redirectcontroller - got response [error] controllers.redirectcontroller - step completed 

even facing timeout exception in play 1.2 api taking long time send response. able manually set timeout solved issue.

wsrequest request = ws.url(your_url).timeout("600s"); 

Comments

Popular posts from this blog

How to understand 2 main() functions after using uftrace to profile the C++ program? -

c# - Update a combobox from a presenter (MVP) -

How to put a lock and transaction on table using spring 4 or above using jdbcTemplate and annotations like @Transactional? -