Dubbo降级&容错机制
在分布式环境中,由于所有的服务不在同一台服务器中,就涉及到服务之间的调用,而远程调用涉及到网络,网络是不可靠的,这就导致了有时候远程调用会失败,这时候就需要容错机制
而服务降级机制,是指在流量特别大的情况下,我们主动关闭一些不重要的服务,将资源向核心服务倾斜,被关闭的服务就会做服务降级
服务降级
服务降级就是我们将一些不重要的服务屏蔽掉,当有别的服务对被降级的服务发起远程调用时,不发起调用,而是执行本地的服务降级逻辑
首先我们构建一个提供者服务,用于获取用户的地址
@Service
@DubboService
@Slf4j
public class UserServiceImpl implements UserService {
private static int count = 0;
@Override
public List<UserAddress> getUserAddressList() {
UserAddress userAddress1 = new UserAddress(1, "HZ", "00000", "小王", "15652211111", "1");
UserAddress userAddress2 = new UserAddress(2, "BJ", "00001", "小张", "17911111111", "1");
return Arrays.asList(userAddress1, userAddress2);
}
@Override
public UserAddress getUserAddress(String userId) {
count++;
log.info("调用次数:{},查询id:{}", count,userId);
List<UserAddress> userAddressList = getUserAddressList();
for (UserAddress userAddress : userAddressList) {
if (userAddress.getUserId().equals(userId)) {
return userAddress;
}
}
return null;
}
}
然后构建一个消费者服务,然后对提供者服务进行降级,不发起远程调用
我们只需要在@DubboReference
注解的mock属性中,设置值为force:xxx,即可屏蔽提供者服务,可以设置具体的返回值,或者抛出的异常,或者mock实现的全路径,这里设置为返回一个null值
@Service
public class OrderServiceImpl implements OrderService {
@DubboReference(check = false, mock