1.概述
在 微服务 调用的时候,我们会需要将微服务实例进行分组的情况,我们有订单和库存服务,订单服务 和库存服务 分别 为 A,B两组服务实例。 A 服务分组服务A用户,B服务分组服务B用户,这样就可以实现 一组服务对应一个用户,实现用户的应用服务隔离。本篇解决的是,订单A服务调用库存A服务,订单B服务调用库存B服务.
2.实现原理
2.1. 在服务启动的时候,指定一个服务分组
我现在有订单服务和库存服务,配置环境变量。
spring:application:name: order-serviceprofiles:active: devcloud:nacos:username: nacospassword: nacosdiscovery:server-addr: localhost:8848namespace: localmetadata:group: ${group:A}
我们给每个微服务定义一个 group 的元数据,在启动的的时候指定这个数据。
启动程序命令 java -jar orderdemo-0.0.1-SNAPSHOT.jar --server.port=9902 --group=B
2.1. 在使用FEIGN访问服务的时候,选择服务实例
具体是根据当前的服务实例的分组,选择目标服务的服务实例。
3. 在我们的产品中实现代码如下
3.1 引入jar包
<dependency><groupId>com.redxun</groupId><artifactId>ac-core-loadbalance</artifactId><version>7.4-SNAPSHOT</version></dependency>
3.2 增加组选择器配置
@Configuration
public class FeignConfig {@Bean@Primarypublic IServiceSelector groupSelector() {return new GroupServiceSelector();}
}
如果用户有其他的需求,可以实现IServiceSelector 接口后进行配置。
接口定义如下:
public interface IServiceSelector {List<ServiceInstance> getServices(List<ServiceInstance> var1, Environment var2);
}