一、接口服务多版本管理
在实际项目场景中在发布生产之前会存在一个过渡的灰度版本环境,dubbo也一样在接口服务升级时,可以实现两个版本的服务接口,指定不同的版本号。当少量的消费端调用引用高版本后使用无问题时,则可以将消费端调用全部切换到新版本的服务上。
1,服务提供方相同接口不同版本配置注解方式实现和使用xml方式实现
使用注解方式主要在服务提供者项目接口实现类注解@Service上添加 version 信息对类中所有方法进行版本设置。在xml中在其<dubbo:service >标签上进行配置版本信息。
xml配置方式
2,服务消费方使用配置版本信息进行路由不同接口
服务消费端可以在接口引用上进行配置版本信息。使用注解时在接口实现类中接口属性引用处@Reference注解上添加配置版本信息。在使用xml方式时,在<dubbo:reference > 标签上添加version信息。当消费端想随机的调用不同的接口时,可以配置version信息为version="*"。
xml方式配置
二、dubbo本地存根使用介绍
本地存根Stub为服务消费端中实现了远程依赖接口的并有一个有远程接口类构造参数的实现类(在提供端也可以实现,不过命名位置等都有要求,消费端较容易实现)。在消费端调用执行远程接口方法前回先执行本地存根类的对应方法。我们在该存根类中可以先进行参数校验等操作在执行真实的远程方法,在执行远程方法之后我们还可以对返回数据做逻辑处理。或者远程方法报错时我们可以通过try{}chache(){}返回一个一些模拟数据等自定义操作。存根的使用方式类似于一种远程接口方法的切面编程。
实现步骤
1,添加本地存根类对象
package com.xiaohui.service.impl;
import com.xiaohui.domain.UserAddress;
import com.xiaohui.service.UserService;
import java.util.Arrays;
import java.util.List;
/**
* 代理对象
*/
public class UserServiceStub implements UserService {
private UserService userService;
/**
*
* @param userService
*/
public UserServiceStub(UserService userService) {
this.userService = userService;
}
@Override
public List<UserAddress> queryAllUserAddress(String userId) {
try {
System.out.println("========调用前执行,可检查参数等========");
List<UserAddress> userAddresses = userService.queryAllUserAddress(userId);
System.out.println("========调用后执行========");
return userAddresses;
} catch (Exception e) {
e.printStackTrace();
//可以模拟一些失败返回参数
return Arrays.asList(new UserAddress(10001, "default address", "10001"));
}
}
}
2,使用注解或者xml方式在接口依赖处进行配置存根类
注解方式:在@Reference处进行配置
xml方式: