Я использую Spring Boot 2.1.4, Kafka и React в качестве пользовательского интерфейса. У меня есть процесс регистрации пользователя из пользовательского интерфейса, который требует бэкэнд-процесса и его данных до завершения регистрации.
Поток такой:
- Интерфейс внешнего интерфейса делает запрос к API, который возвращает токен и помещает сообщение в очередь запросов Kafka
- Сообщение обрабатывается внутренним процессом (это занимает приблизительно 1 минуту)
- Когда процесс завершается, сообщение с токеном и данными записывается в очередь ответов Kafka, которая указывает, что процесс завершен
Я хочу, чтобы интерфейсный интерфейс веб-интерфейса выполнял начальный запрос API, который немедленно возвращался, отображал экран загрузки и отображал готовое сообщение после завершения процесса регистрации.
Я подумал о нескольких вариантах:
Присоединить KafkaListener к очереди ответов. Когда появится ответное сообщение, сохраните ответ и токен в хранилище данных (например, Redis). Предоставьте API для интерфейса пользователя, который проверяет хранилище данных на наличие токена. Пользовательский интерфейс будет опрашивать этот API каждые 10 секунд. Если ответ не доступен через 2 минуты, пользователю будет предложено проверить позже.
Использование WebSockets с React. Я раньше не пользовался WebSockets, но единственное, в чем я не уверен, это то, что если у меня будет несколько экземпляров микросервиса регистрации, это вызовет какие-либо проблемы со связью клиент / API.
Есть ли какие-либо рекомендации или другие варианты, как лучше всего справиться с этим?