Spring Cloud Alibaba 2021.0.1.0 版本整合openfeign+熔断的注意事项

359 阅读1分钟

1、版本说明

Spring Cloud Alibaba 2021.0.1.0

spring-boot-dependencies 2.6.3

spring-cloud-starter-openfeign 3.1.2

spring-cloud-loadbalancer 3.1.2

spring-cloud-starter-netflix-hystrix 2.2.6.RELEASE

2、所需依赖


<!-- springboot的依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.6.3</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

<!--SpringBoot整合Spring Cloud Alibaba-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2021.0.1.0</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

<!-- ==========使用feign+熔断功能所需依赖========= -->
<!-- openfeign依赖  -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    <version>3.1.2</version>
</dependency>
<!--loadbalancer依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-loadbalancer</artifactId>
    <version>3.1.2</version>
</dependency>

<!--Spring Cloud2020之后,需要引入 spring-cloud-starter-netflix-hystrix 依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    <version>2.2.6.RELEASE</version>
</dependency>
<!-- ==========使用feign+熔断功能所需依赖========= -->

3、常见报错问题

3.1、Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true

image.png

解决方法: 在配置文件中添加以下内容

spring:
  main:
    allow-circular-references: true   # 解决spring boot 2.6后,因循环引用导致启动时报错的问题

3.2、Caused by: java.lang.IllegalStateException: No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalancer?

image.png

解决方法:添加依赖

<!--loadbalancer依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-loadbalancer</artifactId>
    <version>3.1.2</version>
</dependency>

3.3、调用时报错:feign.FeignException$ServiceUnavailable: [503] during [POST] to [http://zhanzhan-generator/zhanzhan/generator/generatorCode] [GeneratorFeignClient#generatorCode(GenInfo)]: [Load balancer does not contain an instance for the service zhanzhan-generator]

image.png

解决方法:添加依赖or添加配置

<!--Spring Cloud2020之后,需要引入 spring-cloud-starter-netflix-hystrix 依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    <version>2.2.6.RELEASE</version>
</dependency>
# feign 配置
feign:
  circuitbreaker:
    enabled: true

4、feign调用 熔断成功

image.png