我正在使用Spring Boot 2.1.4,Kafka和React作为前端UI。我从UI进行了一个用户注册过程,该过程需要一个后端过程,并且需要完成注册之前的数据。
流程如下:
我想要的是前端UI发出初始API请求,该请求立即返回,显示加载屏幕并在注册过程完成后显示就绪消息。
我想到了两个选择:
将KafkaListener附加到回复队列。出现回复消息后,将响应和令牌存储在数据存储区(例如Redis)中。向UI提供一个API,该API检查数据存储区中的令牌。 UI将每10秒轮询一次此API。如果2分钟后仍然没有响应,则将要求用户稍后再检查。
在React中使用WebSockets。我以前没有使用过WebSocket,但是我唯一不确定的是如果我有多个注册微服务实例,这会导致客户端/ api通信的任何问题。
有什么建议或其他最佳方式来解决此问题?
答案 0 :(得分:0)
- 将KafkaListener附加到回复队列。出现回复消息后,将响应和令牌存储在数据存储区(例如Redis)中。向UI提供一个API,该API检查数据存储区中的令牌。 UI将每10秒轮询一次此API。如果2分钟后仍然没有响应,则将要求用户稍后再检查。
这将起作用。我只是为了简单起见,将使用内置的RocksDB进行存储。以下是将状态存储公开为可在kafka流之外查询的文档。
https://kafka.apache.org/20/documentation/streams/developer-guide/interactive-queries.html
- 将WebSockets与React一起使用。我以前没有使用过WebSockets,但是我唯一不确定的是如果我有多个注册微服务实例,这会导致客户端/ api通信的任何问题。
它可能会引起问题。这取决于注册服务的实施。您将不知道客户端将与哪个注册服务实例建立连接。例如,会话需要在Redis这样的外部数据源中进行管理,否则您将不得不使用支持粘性会话的laod balancer(有点过时的解决方案)。