在许多项目中,往往需要和其他厂商的项目进行对接。这就不得不访问外部url接口。网上的各种方案层出不穷,但我不太喜欢额外添加maven依赖,所以使用已有的feign实现。

由于个人习惯,我的spring-boot版本是2.6.7。这导致了我添加openfeign依赖时总是报错,因为网络上的教程往往是使用了Hoxton.SR8版本的spring-cloud,它的绑定依赖openfeign是2.2.5.RELEASE。

版本兼容的问题往往最难为新手。

  1. 添加Maven依赖

    xml
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    <version>3.1.1</version>
    </dependency>

    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
    <version>3.1.1</version>
    </dependency>
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    <version>2.2.9.RELEASE</version>
    </dependency>
  2. 在启动类添加注解

    java
    @EnableFeignClients
  3. 在配置文件中打开熔断器

    properties
    feign.circuitbreaker.enabled=true
  4. 编写Feign接口

    java
    @FeignClient(url = "http://aliyun.test.com", name = "test", fallback = OutFeignImpl.class)
    public interface OutFeign {
    @GetMapping(value = "/test", headers = {"session_id=1001"},produces = {"application/json"})
    Object getInfo();
    }
    1. 在@FeignClient中,url指定外部http请求,name或value为注解必写参数,fallback则是熔断器指定实现类。

    2. @GetMapping中,headers可以设置请求头,因不同于大部分博客上的版本,所以headers中的参数用等于号相连。

  5. 编写熔断器实现类

    java
    @Component
    public class OutFeignImpl implements OutFeign {
    @Override
    public Object getInfo() {
    return "---触发熔断---";
    }
    }

至此,便可以在项目中调用外部url了。

参考:使用feign服务调用添加Header参数_java_脚本之家 (jb51.net)