假设我为一个支付系统设计了一个微服务体系结构,用户只需单击UI屏幕上的pay按钮,就可以向API网关发送请求,网关将启动api调用链,以调用几个微服务。当一个micorservices在链调用中途停机或没有响应时,该如何处理?
我希望用户认为他的付款已经成功,并且不返回给他“稍后再试”我可以在某个地方保存链的状态吗?
发布于 2020-02-03 15:15:36
对于这种情况,使用异步通信比使用同步通信更可取。
在这种情况下;
当客户端向系统发送请求时,API网关接受请求,并将请求委托给相应的微服务。之后,该微服务向其他相关的微服务发送一个事件。消息代理通常用于此目的,消息存储在代理中,即使消费者(subcsriber)微服务关闭,消息也不会丢失。
您还可以将事件直接从api网关发送到message broker。(请参阅:https://microservices.io/patterns/apigateway.html)
为了实现原子性和一致性(当然是最终的一致性),可以使用SAGA模式。你可以通过check获取更多信息。
但是,如果您的需求是调用微服务来立即获取一些数据,并且如果此所需的微服务关闭,则此解决方案将不起作用。您应该在设计上避免微服务之间的这种耦合。在我看来,这是微服务架构中最具挑战性的部分之一。域驱动设计技术可用于确定有界上下文。
https://stackoverflow.com/questions/60032959
复制相似问题