播放WSClient流超时

时间:2016-06-08 15:10:40

标签: java playframework akka playframework-2.5

我想在Play 2.5应用中使用Server-Sent Events。 API端点的Content-Type为text/event-stream

我在设置REST调用的超时时遇到了困难。 当我将请求超时设置为-1时 - 请求永远不会超时 - 在120秒后调用whenComplete而没有异常。

    CompletionStage<StreamedResponse> events = ws.url("https://example.com/events")
            .setMethod("GET")
            .setHeader("Accept", "text/event-stream")
            .setRequestTimeout(-1)
            .stream();
    events.thenCompose(res -> {
        Source<ByteString, ?> responseBody = res.getBody();
        return responseBody.via(Framing.delimiter(ByteString.fromString("\n"), Integer.MAX_VALUE, FramingTruncation.ALLOW)).map(ByteString::utf8String).runForeach(data -> logger.info(data), materializer);
    }).whenComplete((done, throwable) -> {
        if (throwable != null) {
            logger.error(throwable.getMessage(), throwable);
        }
        logger.info("Done");
    });

当我将RequestTimeout设置为Integer.MAX_VALUE时,请求在120秒后没有超时。但是,它可能会在约25天后超时请求。

如何将超时设置为无限?

1 个答案:

答案 0 :(得分:0)

假设您正在使用AhcWSClient

val client = AhcWSClient()

然后你可以这样做,

client.url("www.streamingurl.com")
.withMethod("GET")
.withRequestTimeout(Duration.Inf)
.stream()