Mockserver: обратный вызов после получения запроса
Я использую Mockserver для тестирования службы HTTP, которая производит побочные эффекты асинхронно. Скажем, например, я тестирую ServiceA
который предоставляет метод HTTP API в /api/status/{id}
, Отдельно от возврата результата статуса вызывающей стороне API, ServiceA
запускает асинхронный анализ, который вызывает ServiceB
если выполнены некоторые условия. Допустим, для завершения этого асинхронного процесса требуется от нескольких миллисекунд до нескольких секунд.
В настоящее время мой код mockserver выглядит примерно так:
Long waitTimeoutSeconds = 5L;
Long start = System.currentTimeMillis();
HttpRequest[] asyncRequestsRetrieved = null;
while (start + (waitTimeoutSeconds * 1000L) < System.currentTimeMillis()) {
asyncRequestsRetrieved = mockServer.retrieveRecordedRequests(HttpRequest.request().withPath("/service/b/path"));
if (asyncRequestsRetrieved != null && asyncRequestsRetrieved.size > 0) {
break;
}
Thread.sleep(50L);
}
assertNotNull(asyncRequestsRetrieved);
assertTrue(asyncRequestsRetrieved!!.size > 0);
Предоставляет ли Mockserver шаблон для выполнения действия (скажем, уведомления слушателя), когда запрос получен в заданной конечной точке, или опрос является единственным вариантом?
1 ответ
Если вы отправляете запрос на ServiceB
в асинхронном режиме вы получите ответ, в этом случае опрос является единственным вариантом. Я полагаю, ваш ServiceB
имеет 2 конечные точки: одну для создания задания и другую для проверки состояния задания, и, если оно готово, получите результат.