Как проверить, увеличивают ли запросы показатели, не получая ответа в Vert.x?

Работа моего сервера Vert.x, когда он получает недопустимые запросы, состоит в том, чтобы НЕ отправлять ответ, а только увеличивать связанную метрику. Как я могу проверить это?

Следующий код не работает, потому что, поскольку мы никогда не получаем ответ, код обработчика никогда не выполняется — я только что опубликовал его, чтобы показать вам, что я хочу в своем тесте.

@Test
void invalidUrlTest(Vertx vertx, VertxTestContext testContext) {
    HttpRequest<String> request = WebClient
            .create(vertx, this.webClientOptions)
            .get(8080, "localhost", "/someinvalidaddress/")
            .as(BodyCodec.string());
    request.send(s -> {assertThat(meterRegistry.counter("invalid.request.counter")).isEqualTo(1.0);
            });
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
103
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Не уверен, почему ваш дескриптор не вызывается (может быть, ваш тест проваливается из-за отсутствия ctx.async()?) Но в любом случае вы можете попытаться использовать httpClient для своего вызова и установить обработчик исключений, когда вы делаете свое утверждение:

@Test
void invalidUrlTest(Vertx vertx, VertxTestContext ctx) {
    Async async = ctx.async();
    HttpClient client = vertx.createHttpClient();
    client.get(8080,"localhost","/someinvalidaddress/")
      .exceptionHandler(ex -> {
        assertThat(meterRegistry.counter("invalid.request.counter")).isEqualTo(1.0);
        async.complete();
      }).end();
}

Логика моего сервера такова: если он получает правильные запросы, он отправляет какой-то ответ. Если он получает неверный запрос, он не отправляет обратно никакого запроса. Как я понимаю, обработчик вызывается только после получения какого-то ответа. Но в моем случае, если запрос недействителен, ответ никогда не приходит, поэтому обработчик никогда не вызывается - это ответ на ваш вопрос, по крайней мере, я считаю, что так оно и работает :-)

Rolf 09.04.2019 10:34

в этом случае проще всего установить тайм-аут для запроса. Таким образом, по истечении тайм-аута вы попадаете в обработчик исключений. клиент.получить(...).setTimeout()

taygetos 09.04.2019 11:38

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