微服务保持多链路数据一致性,消息队列的应用

721 阅读1分钟

链路

客户完成一项业务,发起一个请求可能要多个服务进行交互完成,比如A->B->C,A1->A2,多个服务先后调用或者并发调用我们称之为链路。如果链路的某个服务出现异常,会导致后边所有的服务都无法进行,导致这项业务最终失败。看下图:

对于微服务保持数据一致性有多种模式,本文采用的是事件通知模式。

消息队列

对接第三方支付,我们一般是这样完成用户支付请求的:

现在出现这样一个问题,用户成功支付,但由于某种原因没有接收到第三方支付的异步回调通知,用户是否支付成功无法获知,我们可以升级为下方案:

以上增加了消息队列服务,每次用户去支付时,在调用第三方支付服务的同时推送一个该订单查询(调用第三方订单查询接口)消息,当第三方正常异步返回结果时,我们将该条消息删掉。

扩展

可以将消息队列应用到微服务当中,也就是多链路的事件通知模式。