Ожидание ответа от бэкэнд-процесса с использованием Spring Boot, Kafka и ReactJS - PullRequest
0 голосов
/ 06 апреля 2019

Я использую Spring Boot 2.1.4, Kafka и React в качестве пользовательского интерфейса. У меня есть процесс регистрации пользователя из пользовательского интерфейса, который требует бэкэнд-процесса и его данных до завершения регистрации.

Поток такой:

  1. Интерфейс внешнего интерфейса делает запрос к API, который возвращает токен и помещает сообщение в очередь запросов Kafka
  2. Сообщение обрабатывается внутренним процессом (это занимает приблизительно 1 минуту)
  3. Когда процесс завершается, сообщение с токеном и данными записывается в очередь ответов Kafka, которая указывает, что процесс завершен

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

Я подумал о нескольких вариантах:

  1. Присоединить KafkaListener к очереди ответов. Когда появится ответное сообщение, сохраните ответ и токен в хранилище данных (например, Redis). Предоставьте API для интерфейса пользователя, который проверяет хранилище данных на наличие токена. Пользовательский интерфейс будет опрашивать этот API каждые 10 секунд. Если ответ не доступен через 2 минуты, пользователю будет предложено проверить позже.

  2. Использование WebSockets с React. Я раньше не пользовался WebSockets, но единственное, в чем я не уверен, это то, что если у меня будет несколько экземпляров микросервиса регистрации, это вызовет какие-либо проблемы со связью клиент / API.

Есть ли какие-либо рекомендации или другие варианты, как лучше всего справиться с этим?

1 Ответ

0 голосов
/ 07 апреля 2019
  1. Присоедините KafkaListener к очереди ответов. Когда появится ответное сообщение, сохраните ответ и токен в хранилище данных (например, Redis). Предоставьте API для интерфейса пользователя, который проверяет хранилище данных на наличие токена. Пользовательский интерфейс будет опрашивать этот API каждые 10 секунд. Если ответ не доступен через 2 минуты, пользователю будет предложено проверить позже.

Это будет работать. Я бы использовал встроенную RocksDB для хранения, хотя, просто для простоты. Ниже приведена документация для выставления хранилища состояний для запроса вне потоков kafka.

https://kafka.apache.org/20/documentation/streams/developer-guide/interactive-queries.html

  1. Использование WebSockets с React. Я раньше не пользовался WebSockets, но единственное, в чем я не уверен, это то, что если у меня будет несколько экземпляров микросервиса регистрации, это вызовет какие-либо проблемы со связью клиент / API.

Это может потенциально вызвать проблемы. Это зависит от реализации службы регистрации. Вы не будете знать, с каким экземпляром службы регистрации клиент установит соединение. Например, сеанс должен управляться во внешнем источнике данных, таком как Redis, или вам придется использовать балансировщик laod, который поддерживает липкие сеансы (немного устаревшее решение).

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