Я не уверен, как правильно выразить это словами, так что вот (довольно распространенный) пример.
Допустим, пользователь использует наш сервис блогов и нажимает кнопку "Сохранить", чтобы опубликовать свой потрясающий пост в блоге.
Теперь будет обычная пользовательская история, он будет уведомлен о результате своего действия - уведомление типа «Успешно опубликовано!» или «Произошла ошибка. Пожалуйста, попробуйте еще раз.»
В синхронном мире это не сложно - вы отправляете запрос на сервер, ждете ответа, а на основании ответа показываете уведомление.
Но давайте представим, что наш сервер имеет микросервисно-ориентированную архитектуру, использующую асинхронную связь; мы используем очередь сообщений, например. Микросервис API-шлюза принимает запрос от внешнего интерфейса и публикует свое сообщение в очереди. Затем «потребительский» микросервис отправляет результат использованного сообщения во внешний интерфейс.
Какой хороший способ вернуть результат действий пользователя в этом случае?
Если мы настроим сеанс websocket, чтобы принимать, например, такие ответы, код, инициирующий действие пользователя, и код, обеспечивающий обратную связь для действия пользователя, в конечном итоге будут полностью отделены, хотя это происходит в том же рабочем процессе пользователя. Это разумная идея? Или мне здесь не хватает фундаментальных идей?