Request-Response
Один запрос связан с одним ответом
В паттерне Request-Response участник отправляет запрос и ожидает ответ, который относится именно к этому запросу. Это базовая модель многих HTTP и RPC-вызовов.
request(id=123) ---->
<---- response(for=123)
Связь кажется очевидной при одном синхронном соединении: ответ приходит в тот же вызов. Но сама идея шире конкретного протокола и может использоваться даже поверх messaging.
В асинхронной среде нужен correlation id
Если запрос и ответ идут отдельными сообщениями, их нужно связать явно. Для этого запрос получает идентификатор корреляции, а ответ возвращает тот же идентификатор.
{
"type": "PRICE_REQUEST",
"correlationId": "req-123",
"productId": 42
}
Получатель ответа по correlationId понимает, какую ожидающую операцию можно завершить.
Без такого ключа несколько параллельных запросов было бы трудно сопоставить с результатами.
Ожидание должно иметь предел
Ответ может не прийти вовсе: сервис завершился, сообщение потеряло актуальность или обработка заняла слишком много времени. Поэтому ожидание должно иметь таймаут или другой критерий завершения, после которого система считает операцию неуспешной либо продолжает её по запасному сценарию.