前言
上一章节学习了
Ribbon,通常利用它的RestTemplate来实现对REST API的调用,形成了一套模版化的调用方法。但在实际开发过程中,调用的API可能不止一处,而用RestTemplate的调用每一步都是模版化内容。Fegin在此基础上做了进一步的封装,我们只需要创建一个接口并用注解的方式来配置它,即可完成对服务提供方的接口绑定,简化了在使用Ribbon时,自行封装服务调用客户端的开发量。
Fegin 简介
Fegin是 Netflix 开发的声明式、模版化的HTTP客户端,其灵感来自Retrofit、JAXRS-2.0以及WebSocket。Fegin可帮助我们更加快捷、优雅的调用HTTP API。
在SpringCloud中,使用 Fegin 非常简单——创建一个接口添加一些注解,代码就完成了。Fegin 支持多种注解,列入Fegin自带的注解或者JAX-RS注解等。
SpringCloud对Fegin进行了增强,使 Fegin 支持了Spring MVC注解,并整合了Ribbon和Eureka,从而让 Fegin 的使用更加便捷。
快速入门
Ribbon章节的微服务使用的是 RestTemplate (负载均衡通过整合Ribbon实现)调用 REST API 的。本章采用Fegin实现声明式的RESTful API 调用。
前提: 在第二章节中我们已经写好了注册中心Eureka和服务的提供者Client,将它们启动,并访问。
- 复制 上一章的
eureka-consumer-ribbon项目,将artifactId改为Fegin pom文件修改,引入Fegin
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
- 修改启动类
FeignApplication.java,通过@EnableDiscoveryClient注册为Eureka客户端应用,以获得服务发现的能力。同时@EnableFeignClients注解开启Fegin
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class FeignApplication {
public static void main(String[] args) {
SpringApplication.run(FeignApplication.class, args);
}
}
- 创建一个
Fegin接口,并添加@FeginClient注解,用于创建Ribbon负载均衡器,其中的name参数对应的是调用对应的服务名,这里是已经在注册中心注册的微服务client名称。
@FeignClient(name = "client")
@Component
public interface HelloRemote {
@GetMapping("/msg")
public String msg(@RequestParam("name")String name);
}
- 创建
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);
}
}
- 编写配置文件
application.yml
spring:
application:
name: feign
server:
port: 7001
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
- 启动
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 实现声明式服务调用,还有许多的配置这里就不一一说明了
本文介绍如何使用Fegin实现声明式RESTful API调用,简化服务调用客户端的开发,通过创建接口和注解配置,实现对服务提供方接口的绑定。Fegin支持多种注解,整合了Ribbon和Eureka,实现负载均衡。

815

被折叠的 条评论
为什么被折叠?



