欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

Spring Cloud Feign的原理及基本使用

发布时间:2023/12/29 36 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Spring Cloud Feign的原理及基本使用 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
  • 了解Feign的作用
  • 掌握Feign的使用过程
  • 掌握Feign的负载均衡配置
  • 掌握Feign的熔断配置
  • 掌握Feign的压缩配置
  • 掌握Feign的日志配置

一、 Feign简介

Feign [feɪn] 译文 伪装。Feign是一个声明式WebService客户端.使用Feign能让编写WebService客户端更加简单,它的使用方法是定义一个接口,然后在上面添加注解。不再需要拼接URL,参数等操作。项目主页:https://github.com/OpenFeign/feign 。

  • 集成Ribbon的负载均衡功能
  • 集成了Hystrix的熔断器功能
  • 支持请求压缩
  • 大大简化了远程调用的代码,同时功能还增强啦
  • Feign以更加优雅的方式编写远程调用代码,并简化重复代码

总结:

  • feign 是一个[声明式]REST客户端。(http客户端:RestTemplate 使用Restful 风格进行开发的)
  • feign 是基于RestTemplate开发的一个声明式的Rest客户端;只需要写一个接口,定义一个注解,就可以直接使用。

二、Feign的快速入门

使用Feign替代RestTemplate发送Rest请求。

2.1 使用feign的步骤

  • consumer中添加起步依赖(spring-cloud-starter-openfeign)
  • consumer中编写一个接口, 添加一个注解进行声明@FeignClient,注解后面的name 指定的是要发送到哪个微服务对应的名字。最后定义一个方法。
  • consumer中编写控制层,在Controller中使用@Autowired注入FeignClient。(在controller service dao里面都可以使用)
  • consumer中在启动类中添加@EnableFeignClients,开启Feign。
  • provider中被调用方controller 一定要【实现】声明的接口的方法。
  • (1)导入依赖

    在user-consumer中添加spring-cloud-starter-openfeign依赖

    <!--配置feign--> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>

    (2)创建Feign客户端(接口)

    在user-consumer中创建com.it.feign.UserClient接口,添加一个注解进行声明@FeignClient,定义一个方法。

    //name 指定的是要发送到哪个微服务对应的名字 @FeignClient(name = "user-provider",fallback = UserClientFallback.class) /*@RequestMapping("/user")*/ public interface UserClient {/*** 实际上是发送请求给微服务 获取数据的* @param id* @return*/@RequestMapping("/user/find/{id}")public User findById(@PathVariable(name = "id") Integer id); }

     解释:

  • Feign会通过动态代理,帮我们生成实现类。
  • 注解@FeignClient声明Feign的客户端,注解value指明服务名称
  • 接口定义的方法,采用SpringMVC的注解。Feign会根据注解帮我们生成URL地址
  • 注解@RequestMapping中的/user,不要忘记。因为Feign需要拼接可访问地址
  • (3)编写控制层

    在user-consumer中:  创建com.it.controller.ConsumerFeignController,在Controller中使用@Autowired注入FeignClient,代码如下:

    @RestController @RequestMapping("/feign") public class ConsumerFeignController {@Autowiredprivate UserClient userClient;//根据ID获取用户的数据(要使用feign的方式来获取)@RequestMapping(value = "/{id}")public User findById(@PathVariable(name = "id") Integer id){return userClient.findById(id);} }

    (4)在user-provider的controller 一定要【实现】声明的接口的方法。

    @RestController @RequestMapping("/user") public class UserController {@Autowiredprivate UserService userService;@GetMapping("/{id}")public User findById(@PathVariable Integer id){System.out.println("这个是18081==================================");return userService.findById(id);}//provider接受这个请求@GetMapping("/find/{id}")public User find(@PathVariable Integer id){System.out.println("这个是18081==================================");return userService.findById(id);} }

    (5)在启动类中开启Feign

    在user-consumer的启动类中添加@EnableFeignClients,开启Feign。

    @SpringBootApplication @EnableEurekaClient @EnableCircuitBreaker @EnableFeignClients//开启feign public class UserConsumerApplication {public static void main(String[] args) {SpringApplication.run(UserConsumerApplication.class,args);}@Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}@Beanpublic Logger.Level feignLoggerLevel(){//设置feign调用的级别是 Fullreturn Logger.Level.FULL;} }

    (6)测试

    请求<http://localhost:18082/feign/2>,效果如下:

    总结

    以上是生活随笔为你收集整理的Spring Cloud Feign的原理及基本使用的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。