【发布时间】:2022-02-14 00:02:23
【问题描述】:
我的微服务中有以下用例
用户体验:联系人详细信息弹出窗口要求用户在 UI 上确认联系人详细信息、电子邮件地址和其他相关详细信息。一旦用户提交数据 - 用户应该会在屏幕上看到联系人详细信息保存成功/失败消息。
每当更新联系方式时,还应在后台添加独特的评论。
下游系统公开了几个用于创建、检索、更新和删除联系人详细信息的 CRUD API 端点以及用于 cmets 的类似 CRUD API 端点。
因为这些 API 端点中的每一个都是独立的。我正在考虑通过事件来实现 SAGA(编排/编排)以确保原子性。
我这边的 REST API 端点(Spring Boot)将用户从 UI 修改的所有数据作为 JSON 捕获,并将事件 Update_Contact_Details 发布到 Kafka 消息主题。
Update_Contact_Details 消费者将从主题中读取消息,调用下游更新联系人详细信息 API,并写回 Contact_Details_Updated/Contact_Details_Update_Failed 事件。
在幸福的道路场景中: Contact_Details_Updated Message 将被 Comments Listener 读取并调用下游 API 添加评论。
在失败场景中: Contact_Details_Update_Failed 将被联系人详细失败监听器读取并调用删除联系人详细信息 API。
在任何一种情况下,由于从 UI 到 API 端点的第一个捕获是 REST API - 我如何将成功/失败响应发送回客户端(网络/移动),因为与编排上述流程相关的整个过程是异步。
【问题讨论】:
-
我认为除了存储临时本地状态之外,您能做的最好的事情就是显示进度微调器或“消息已接受”响应。不是直接的成功/失败。然后,您需要在后台轮询 API 以最终获取真实数据。假设最初的 POST API 调用不是错误,您需要设置一些超时以向前端显示任何错误
标签: rest microservices saga event-driven-design