文章预览
嗨,我是鸭哥。 最近被问到一个老生常谈的问题: A服务调用B服务,怎么保证A成功了B一定成功。 其实这个问题在分布式服务设计中相当常见,基本上每次面试都要被拎出来聊一聊。今天就来分享一下我的看法。 首先,明确一下问题背景:A服务调用B服务,要求的是A服务成功之后,B服务也一定成功。这种场景往往出现在需要确保数据一致性的时候,比如订单支付成功之后,要确保库存也相应减少。 那么,如何保证A成功了B也一定成功呢?这里我们需要从几个方面来考虑。 1. 同步调用 vs 异步调用 最直接的方式是同步调用。简单来说,就是A在调用B的时候直接等待B的响应,如果B返回成功,那么A才认为自己成功。这个方法实现起来最简单,代码也很好写,例如: public void callBService ( ) { Response response = bService.call(); if (response.isSuccess()) {
………………………………