7.Feign
7.1.Feign简介
介绍Feign前,我们先来说一下Ribbon的缺点
1.在实际生产中,Ribbon调用服务提供者,通过restTemplate调用,缺点是,多个地方调用,同一个请求要写多次,不方便统一维护;
2.调用方式,与传统的MVC方式不一样,原来是直接注入Service,所有在实际使用我们跟希望保持与原来的一致;
Feign是Netflix开发的声明式、模板化的HTTP客户端, Feign可以帮助我们更快捷、优雅地调用HTTP API。
在Spring Cloud中,使用Feign非常简单——创建一个接口,并在接口上添加一些注解,代码就完成了。Feign支持多种注解,例如Feign自带的注解或者JAX-RS注解等。
Spring Cloud对Feign进行了增强,使Feign支持了Spring MVC注解,并整合了Ribbon和Eureka,要配置负载均衡的话,直接配置Ribbon即可,无其他特殊地方,从而让Feign的使用更加方便。
Fiegn也整合了服务容错保护,断路器Hystrix等,后面我们会详细讲解。
7.2.Feign实战应用
第一步:在common项目里建一个service接口作为Feign客户端,用Feign客户端来调用服务器提供者,当然可以配置负载均衡;
Feign客户端定义的目的,就是为了方便给其他项目调用;
修改 common模块
pom.xml引入Feign依赖:
<!-- feign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
在common中建立TicketClientService接口:
package com.wfd360.service; import com.wfd360.model.Ticket; import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import java.util.List; /** * @author 姿势帝-博客园 * @address https://www.cnblogs.com/newAndHui/ * @WeChat 851298348 * @create 07/18 8:49 * @description */ //调用的服务名称 @FeignClient(value = "SERVICE-TICKET") public interface TicketClientService { /** * 根据id查询车票信息 * * @param id * @return */ @GetMapping(value = "/ticket/get/{id}") Ticket get(@PathVariable("id") Integer id); /** * 查询车票信息 * * @return */ @GetMapping(value = "/ticket/list") List<Ticket> list(); /** * 添加或者修改车票信息 * * @param ticket * @return */ @PostMapping(value = "/ticket/save") boolean save(Ticket ticket); /** * 根据id删除车票信息 * * @return */ @GetMapping(value = "/ticket/delete/{id}") boolean delete(@PathVariable("id") Integer id); }