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

版权声明:喜欢的点个赞吧!欢迎转载,请注明出处来源,博文地址: https://blog.csdn.net/u012294515/article/details/87914180

前言

上一章节学习了 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 实现声明式服务调用,还有许多的配置这里就不一一说明了

猜你喜欢

转载自blog.csdn.net/u012294515/article/details/87914180