项目背景
注册中心使用了Nacos,框架是SpringCloud,远程调用基于Feign实现。
现状
当服务之间需要联调时,只能将本地启动的服务注册至nacos,修改权重分流至本地。缺点是不仅不能调试服务执行过程中调用到的其他服务,还会污染测试环境。
期望效果
当本地服务启动发生远程调用时,无需注册至注册中心,可根据bootstrap.yml配置中的服务列表,请求至本地的指定服务;若无配置于bootstrap.yml服务列表的服务,则走默认从注册中心的服务列表获取。以分流指定服务的流量至本地,实现本地联调。
步骤
- bootstrap.yml #自定义服务配置列表格式
ribbon:
listOfServers:
- {
host: "127.0.0.1", port: "8081", name: "service-a" }
- {
host: "127.0.0.1", port: "8082", name: "service-b" }
- RibbonServerList #服务配置列表接口对象
public class RibbonServerList {
private String name;
private String host;
private int port;
//省略GET SET
}
- RibbonConfigurationProperties 使用ConfigurationProperties映射服务配置列表
@Component
@ConfigurationProperties(prefix = "ribbon")
public class RibbonConfigurationProperties {
@Value("${spring.profiles.active}")
private String env;
private List<RibbonServerList> listOfServers;
//省略GET SET
}
- RibbonLocalServiceRule #分流至本地的自定义策略
public class RibbonLocalServiceRule extends AbstractLoadBalancerRule {
private static Logger log =