在每个请求的VertX中设置单独的超时

时间:2018-02-07 14:04:24

标签: java kotlin vert.x

是否可以在VertX中为每个请求设置单独超时?

这样做,

val vertx = Vertx.vertx(VertxOptions().setMaxWorkerExecuteTime(15000))

设置所有请求的超时。 像巨大的报告这样的某些东西需要比默认的30秒多一点。

这就是我目前正在做的事情(简化):

val vertx = Vertx.vertx()
val router = Router.router(vertx)

router.route(url).handler { rtx ->
    rtx.request().bodyHandler { btx ->
        rtx.vertx().executeBlocking<RestResponse>({ block ->

            val timer = timer(period = 150000) {
                block.fail("timeout")
            }

            ... blocking code here ...

            timer.cancel()
            block.complete(res)

        }, { block ->


        }
    }
}

在VertX中是否有正式的方法,或者上述情况应该没问题?

1 个答案:

答案 0 :(得分:2)

Vert.x网络Route有一个blockingHandler方法,您可以将其与TimeoutHandler结合使用(如果请求在写入响应之前超时,则返回503)。

router.get("/foo").handler(TimeoutHandler.create(150000))
router.get("/foo").blockingHandler({ routingContext ->
  // Blocking code
})

此外,VertxOptions.setMaxWorkerExecuteTime只会告诉Vert.x何时应显示阻止(工作人员)线程警告。该值预计为纳秒