Как сделать вызов REST асинхронным в Java

avatar
Kartik Kodag
8 августа 2021 в 17:09
204
2
-1

У меня есть вызовы REST между двумя микросервисами, один из которых занимает более 15 минут. У нас есть собственная реализация частного облака компании, которая разрывает любое открытое соединение, удерживаемое более 15 минут.

Мы ищем какую-нибудь реализацию асинхронного остаточного вызова, в которой служба A инициирует остаточный вызов к службе B и забывает, а служба B уведомляет, когда ответ готов для обслуживания. Есть ли какой-либо широко используемый метод/API для такого сценария? Мне не удалось найти ничего конкретного на этом фронте.

Источник
Vaibs
9 августа 2021 в 10:05
0

используйте любую систему обмена сообщениями здесь kafka, sqs, RabbitMq

Ответы (2)

avatar
jithin
8 августа 2021 в 17:47
0

Вы можете использовать опрос. Что-то вроде этого:

Служба A инициирует вызов Rest для службы B, который возвращает ответ OK. Затем каждую 1 минуту служба A делает еще один запрос API к другой конечной точке в службе B, которая будет возвращать статус предыдущего запроса до тех пор, пока процесс не будет завершен или может быть определенный момент времени. Теперь, когда второй запрос отправляет статус успеха, вы можете пометить процесс как завершенный.

avatar
Marcin H.
8 августа 2021 в 17:13
0

Вместо создания реальных ресурсов создайте временный. Вместо того, чтобы возвращать HTTP-ответ 201 (Создано), вы можете выдать код ответа 202 (Принято). Это информирует клиента о том, что запрос принят и понят сервером, но ресурс (еще) не создан. Отправьте временный ресурс внутри заголовка Location.

Запрос:

POST /blogs HTTP/1.1
<xml>
    blogdata
</xml>

Ответ:

HTTP/1.1 202 Accepted
Location: /queue/12345

В этом месте может храниться информация о статусе фактического ресурса: ETA о том, когда он будет создан, что в настоящее время делается или обрабатывается.

Когда фактический ресурс создан, временные ресурсы могут возвращать ответ 303 (см. другое). Заголовок местоположения возвращает URI окончательному ресурсу. Клиент может либо УДАЛИТЬ временный ресурс, либо сервер может истечь сроком действия этого ресурса и позже вернуть 410 (Gone).

Источник: https://restcookbook.com/Resources/asynchroneous-operations/