Spring Cloud Starter OpenFeign 和 Spring Cloud Alibaba Nacos Discovery 联合使用

Spring Cloud Feign 和 Nacos 集成后,默认会使用 Nacos 的负载均衡配置。具体来说,Feign 客户端会从 Nacos Server 中获取服务列表,并使用 Nacos 提供的负载均衡算法来选择一个可用的服务进行调用。

Nacos 提供了多种负载均衡算法,包括轮询、随机、加权轮询、加权随机、最小活跃数等。默认情况下,Nacos 会使用轮询算法进行负载均衡,即每次选择下一个服务进行调用

 

当服务出现故障或者下线时,Nacos 会自动从服务列表中移除该服务,并通知 Feign 客户端更新服务列表。同时,Nacos 也提供了健康检查、容错机制等功能,可以保证系统的可用性和稳定性。

需要注意的是,如果您需要自定义负载均衡算法,可以通过实现 LoadBalancer 接口来实现。同时,Nacos 也支持自定义扩展负载均衡算法,可以通过实现 LoadBalanceListener 接口来实现

yml配置

    

spring:
  application:
    name: spring-cloud-nacos-consumer # 项目名称(nacos 注册的服务名)

  cloud:
    nacos:
      discovery:
        username: nacos # nacos 登录用户名
        password: nacos # nacos 密码
        server-addr: 127.0.0.1:8848 # nacos 服务端地址

 

使用示例:

  1. 首先需要在 pom.xml 文件中添加 Spring Cloud Alibaba Nacos Discovery 和 Spring Cloud Starter OpenFeign 的依赖:
    <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-openfeign</artifactId>
          <version>3.1.4</version>
    </dependency>
    <dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
          <version>2021.0.5.0</version>
    </dependency>

     

  2.  然后需要在启动类上添加 @EnableDiscoveryClient 和 @EnableFeignClients 注解,用于启用服务发现和 Feign 客户端:
    @SpringBootApplication
    @EnableDiscoveryClient
    @EnableFeignClients
    public class Application {
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }

     

  3. 接着需要在 Feign 接口中使用 @FeignClient 注解来指定服务名,并使用 @GetMapping 等注解来定义 RESTful API 接口:
    @FeignClient(name = "service-provider", fallback = ServiceProviderFallback.class)
    public interface ServiceProviderClient {
        @GetMapping("/hello")
        String hello();
    }

     

    其中,name 属性指定了服务名,fallback 属性指定了服务降级的处理类。

  4. 最后,在应用中使用 ServiceProviderClient 接口来调用服务:
    @RestController
    public class HelloController {
        @Autowired
        private ServiceProviderClient serviceProviderClient;
    
        @GetMapping("/hello")
        public String hello() {
            return serviceProviderClient.hello();
        }
    }

     

    在这个示例中,Feign 客户端会自动从 Nacos Server 中获取服务列表,并使用负载均衡算法来选择一个可用的服务进行调用。同时,当服务出现故障时,Feign 客户端会自动使用服务降级的处理类进行处理,保证了系统的可用性。

    希望这个示例能够帮助您理解 Spring Cloud Feign 和 Nacos 的负载均衡的使用。

git 地址:Verite/spring-boot-demo

posted @ 2023-05-29 16:55  Verite  阅读(289)  评论(0)    收藏  举报