Feign介绍

如果只用Ribbon里的RestTemplate来调用,会发现URL,参数返回值等都需要写死。

1
2
3
4
ResultObject<CardVo> result = (ResultObject<CardVo>) restTemplate.getForObject(
        "http://mic-card/card/admin/card/rand",
        ResultObject.class
);

如果服务提供者做了调整,则代码变得难以维护。

Feign组件出现,声明式解决上述问题。 Feign是Netflix公司开发的声明式、模板式的HTTP客户端,能够帮助你优雅的调用HTTP API。

Feign集成

注意本文使用的版本:

1
2
<spring-cloud.version>Hoxton.SR10</spring-cloud.version>
<spring-boot-version>2.2.7.RELEASE</spring-boot-version>

1.添加Feign依赖

1
2
3
4
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2.使用FeignClient来调用微服务

1
2
3
4
5
6
7
@FeignClient(name = "mic-card",path = "/card/admin")
public interface CardApi {

    @GetMapping("/card/rand")
    ResultObject<CardVo> getRand();

}

Controller中调用

1
2
3
4
5
6
7
@Autowired
private CardApi cardApi;

@GetMapping("/feign/cardRand")
public Result feignCardRand(){
    return cardApi.getRand();
}

3.访问验证

Feign深入

参考: https://www.itmuch.com/spring-cloud/finchley-10/