пожалуйста, подскажите, как использовать обработчик тайм-аута 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, как и ожидалось.

Вы можете попробовать это .

  1. setConnectTimeout(интервал connectTimeout)
  2. setHttp2KeepAliveTimeout(интервал keepAliveTimeout)
  3. setIdleTimeout(интервал idleTimeout)

Попробуйте изменить для них значения. #1 должен работать для ваших требований.

Другие вопросы по тегам