через некоторое время отправьте другой ответ с URL-адреса конечной точки покоя - PullRequest
0 голосов
/ 04 мая 2018

Есть одно приложение, которое использует для продолжения опроса некоторого URL-адреса конечной точки отдыха, чтобы получить статус после определенного интервала. Остальное API ожидает завершения некоторых действий. До тех пор, пока действие не завершится, и приложение не достигнет конечной точки, этот оставшийся API отправляет статус как статус в ответе как «в процессе». после того, как действие завершится, оставшийся API отправит сообщение в виде статуса в ответ.

У меня есть проблема с имитацией этого API отдыха, так как я не хочу использовать настоящий API отдыха для тестирования.

Есть ли способ отправить другой ответ от mock rest API после интервала, когда приложение будет опрашивать, ударив по конечной точке?

Для этого я использую vertx с Java.

1 Ответ

0 голосов
/ 05 мая 2018

Это не относится конкретно к Vert.x, но все же.

Хитрость здесь не в том, чтобы считать интервал, а в том, сколько раз была достигнута эта фиктивная конечная точка.

Вот код, демонстрирующий, как это должно работать:

private static final Vertx vertx = Vertx.vertx();
private static final HttpClient client = vertx.createHttpClient(
        new HttpClientOptions()
                .setDefaultHost("localhost")
                .setDefaultPort(8443));
public static void main(final String[] args) {
    AtomicInteger hitCounter = new AtomicInteger(0);
    vertx.createHttpServer().requestHandler((c) -> {
        if (hitCounter.incrementAndGet() >= 5) {
            c.response().setStatusCode(200).end();
        }
        else {
            c.response().setStatusCode(202).end();
        }
    }).listen(8443);

    System.out.println("Server started");

    callServerUntilSuccess();
}

public static void callServerUntilSuccess() {
    client.request(HttpMethod.GET, "/", (r) -> {
        if (r.statusCode() == 200) {
            System.out.println("I'm done");
        }
        else {
            System.out.println("I'll try again");
            vertx.setTimer(1000, (l) -> callServerUntilSuccess());
        }
    }).end();
}
...