在 saga 模式架构中,用户是否应该在 http 请求之后等待响应?

Should users await for a response after the http request in a saga pattern architecture?

我正在设计一个微服务架构,每个服务模式使用一个数据库。

以Order Service和Shipping Service为例,当用户向Order Service发出HTTP REST请求时,这个会触发一个事件来通知shipping service。所有这些都是异步发生的。那么,用户体验会怎样?我的意思是,用户需要 HTTP 请求的立即响应。我该如何处理这种情况?

All this happens asynchronously. So, What happen with the user experience? I mean, the user needs an immediately response from the HTTP request. How can I handle this scenario?

存储请求后立即回复。

微服务的部分意义在于,您拥有一个由不需要协调的可独立部署元素组成的系统。

如果您想要一个 可靠的系统 即使服务没有 100% 的正常运行时间,那么您需要有某种形式的持久消息存储,以便发件人接收者不需要同时运行。

因此,您从外部获取数据的基本模式是复制来自传入 HTTP 请求的信息,而不是直接复制到 运行 服务中,而是复制到消息存储中,由稍后服务。

换句话说,您的 REST API 是存储前面的外观,而不是服务本身前面的外观。

演员模型可能是一个有用的类比;信息通过将消息复制到不同的 收件箱 来移动,然后由订阅者使用。

从客户端的角度来看,HTTP 响应是对请求已被接收并确认为有效的确认。想想“感谢您的订单,当您购买的商品可供取货时,我们会向您发送一封电子邮件。”

在网络上,我们会在响应中包含指向其他有用资源的链接;单击此处查看您的订单状态,单击此处查看您最近的订单历史记录,等等。