1.概述

在 微服务 调用的时候,我们会需要将微服务实例进行分组的情况,我们有订单和库存服务,订单服务 和库存服务 分别 为 A,B两组服务实例。 A 服务分组服务A用户,B服务分组服务B用户,这样就可以实现 一组服务对应一个用户,实现用户的应用服务隔离。本篇解决的是,订单A服务调用库存A服务,订单B服务调用库存B服务.

2.实现原理

2.1. 在服务启动的时候,指定一个服务分组

我现在有订单服务和库存服务,配置环境变量。

spring:
  application:
    name: order-service
  profiles:
    active: dev
  cloud:
    nacos:
      username: nacos
      password: nacos
      discovery:
        server-addr: localhost:8848
        namespace:  local
        metadata:
          group: ${group:A}

我们给每个微服务定义一个 group 的元数据,在启动的的时候指定这个数据。
启动程序命令 java -jar orderdemo-0.0.1-SNAPSHOT.jar --server.port=9902 --group=B

image

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
    @Primary
    public IServiceSelector groupSelector() {
        return  new GroupServiceSelector();
    }
}

如果用户有其他的需求,可以实现IServiceSelector 接口后进行配置。

接口定义如下:

public interface IServiceSelector {
    List<ServiceInstance> getServices(List<ServiceInstance> var1, Environment var2);
}
posted on 2025-09-23 11:46  自由港  阅读(26)  评论(0)    收藏  举报