SpringCloud | 第六章: Feign 实现声明式服务调用

前言

上一章节学习了 Ribbon,通常利用它的RestTemplate 来实现对 REST API的调用,形成了一套模版化的调用方法。但在实际开发过程中,调用的API可能不止一处,而用 RestTemplate 的调用每一步都是模版化内容。Fegin 在此基础上做了进一步的封装,我们只需要创建一个接口并用注解的方式来配置它,即可完成对服务提供方的接口绑定,简化了在使用 Ribbon 时,自行封装服务调用客户端的开发量。

Fegin 简介

Fegin 是 Netflix 开发的声明式、模版化的 HTTP 客户端,其灵感来自 RetrofitJAXRS-2.0以及 WebSocketFegin 可帮助我们更加快捷、优雅的调用 HTTP API
SpringCloud 中,使用 Fegin 非常简单——创建一个接口添加一些注解,代码就完成了。Fegin 支持多种注解,列入 Fegin 自带的注解或者 JAX-RS 注解等。
SpringCloudFegin 进行了增强,使 Fegin 支持了 Spring MVC 注解,并整合了 RibbonEureka,从而让 Fegin 的使用更加便捷。

快速入门

Ribbon章节的微服务使用的是 RestTemplate (负载均衡通过整合Ribbon实现)调用 REST API 的。本章采用Fegin实现声明式的RESTful API 调用。

前提: 在第二章节中我们已经写好了注册中心Eureka和服务的提供者Client,将它们启动,并访问。

  1. 复制 上一章的 eureka-consumer-ribbon 项目,将 artifactId 改为 Fegin
  2. pom文件修改,引入 Fegin
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
  1. 修改启动类 FeignApplication.java ,通过@EnableDiscoveryClient注册为Eureka客户端应用,以获得服务发现的能力。同时 @EnableFeignClients注解开启 Fegin
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class FeignApplication {
    public static void main(String[] args) {
        SpringApplication.run(FeignApplication.class, args);
    }
}
  1. 创建一个 Fegin 接口,并添加 @FeginClient 注解,用于创建 Ribbon 负载均衡器,其中的name参数对应的是调用对应的服务名,这里是已经在注册中心注册的微服务client名称。
@FeignClient(name = "client")
@Component
public interface HelloRemote {
    @GetMapping("/msg")
    public String msg(@RequestParam("name")String name);
}
  1. 创建FeignController类,并实现HelloRemote的接口。通过上面创建的接口来实现对Client服务提供的/msg接口进行调用。
@RestController
public class FeignController {

    @Autowired
    private HelloRemote helloRemote;

    @GetMapping("/fegin")
    public String index(@RequestParam("name") String name){
        return helloRemote.msg(name);
    }
}
  1. 编写配置文件application.yml
spring:
  application:
    name: feign
server:
  port: 7001
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka
  1. 启动Fegin后就可以在 Eureka 界面上看到服务已经注册成功。
    在这里插入图片描述

测试 :在浏览器访问 http://localhost:7001/fegin?name=fegin。可以看到浏览器上返回了信息:hello~ fegin! welcome spring cloud.8081,再按一次返回了信息:hello~ fegin! welcome spring cloud.8082,原因是启动了两个client,端口分别为8081、8082。Fegin将请求分别向两个客户端轮训发送,可见 Fegin 也实现了负载均衡。而与Ribbon 不同的是,通过Fegin 我们只需要定义服务绑定接口,以声明式的方法,优雅而简单的实现服务的调用。

小结

本章简单的说明了如何通过 Fegin 实现声明式服务调用,还有许多的配置这里就不一一说明了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值