пожалуйста, подскажите, как использовать обработчик тайм-аута vertx для vertx 3.7.1
Я пробую это
router.put(/api).handler(TimeoutHandler.create(100,404)); router.put(/api).blockingHandler(this::handlebusinesslogic);
handlebusinesslogic{
Thread.sleep(1000);
reponse.setstatuscode(200);
reponse.end();}
тем не менее, я вижу ответ 200 ok вместо ответа 404. Что-то не хватает в коде. есть ли альтернативный способ сделать это.
есть ли способ установить общий тайм-аут для всех HTTP-запросов?
2 ответа
Это потому, что вы не должны использовать Thread.sleep()
при тестировании чего-либо в Vert.x
В вашем случае это также заблокирует обработчик тайм-аута, предотвращая тайм-аут.
Вот как вы должны это проверить:
Vertx vertx = Vertx.vertx();
Router router = Router.router(vertx);
router.route().handler(TimeoutHandler.create(100, 404));
router.route().handler(event -> {
// Instead of blocking the thread, set a long timer
// that simulates your long ASYNCHRONOUS request
vertx.setTimer(1000, (l) -> {
event.response().end("OK!");
});
});
vertx.createHttpServer().requestHandler(router).listen(8080);
Этот пример вернет 404, как и ожидалось.
Вы можете попробовать это .
- setConnectTimeout(интервал connectTimeout)
- setHttp2KeepAliveTimeout(интервал keepAliveTimeout)
- setIdleTimeout(интервал idleTimeout)
Попробуйте изменить для них значения. #1 должен работать для ваших требований.