Получение ответа на инициированное пользователем действие от микросервисов с асинхронной связью - PullRequest
0 голосов
/ 28 апреля 2018

Я не уверен, как правильно выразить это словами, так что вот (довольно распространенный) пример.

Допустим, пользователь использует наш сервис блогов и нажимает кнопку "Сохранить", чтобы опубликовать свой потрясающий пост в блоге. Теперь будет обычная пользовательская история, он будет уведомлен о результате своего действия - уведомление типа «Успешно опубликовано!» или «Произошла ошибка. Пожалуйста, попробуйте еще раз.»

В синхронном мире это не сложно - вы отправляете запрос на сервер, ждете ответа, а на основании ответа показываете уведомление.

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

1 Ответ

0 голосов
/ 29 апреля 2018

Процесс, который вы описываете, хорош и приносит некоторые «скрытые» преимущества, которые вы, возможно, еще не осознали. Я думаю, что главное здесь - ЧТО сообщать пользователю.

Я думаю, что в этом сценарии вы должны немедленно ответить, что сообщение было отправлено для публикации. Вы не говорите, оно было опубликовано, но процесс публикации был успешно начат. При этом вы говорите пользователю: ваш хороший пост в блоге безопасен (технология обмена сообщениями обеспечит это), и мы позаботимся о том, чтобы сделать его публичным. Расслабьтесь и подождите, пока он будет опубликован через секунду, две или минуту. Скрытое преимущество этого подхода состоит в том, что вы можете применить дополнительную обработку перед публикацией публикации, например, проверка модератором?

Все остальное так же, как вы описали. Это действительно просто способ, которым вы сообщаете это пользователю. Четкое информирование о том, что ваша система делает здесь, является ключом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...