微服务之Feign分布式RPC

举报
香菜聊游戏 发表于 2022/06/26 21:44:43 2022/06/26
【摘要】 从换了工作到web 之后,一直在各种新技术之间切换,各种挣扎,一直没有时间进行总结,今天稍微总结下,做个记录。1 基本概念Feign是Netflix开发的声明式、模板化的HTTP客户端, Feign可以帮助我们更快捷、优雅地调用HTTP API。 使用Feign可以像调用本地方法一样调用远程HTTP接口 Spring Cloud Feign是基于Netflix feign实现,整合了Spr...

image.png 从换了工作到web 之后,一直在各种新技术之间切换,各种挣扎,一直没有时间进行总结,今天稍微总结下,做个记录。

1 基本概念

Feign是Netflix开发的声明式、模板化的HTTP客户端, Feign可以帮助我们更快捷、优雅地调用HTTP API。 使用Feign可以像调用本地方法一样调用远程HTTP接口 Spring Cloud Feign是基于Netflix feign实现,整合了Spring Cloud Ribbon和Spring Cloud Hystrix Spring Cloud Feign对Feign进行了增强,使Feign支持了Spring MVC注解 使用Spring Cloud Feign可以轻松实现解耦、简化开发、负载均衡、远程调用、容错和降级

2 基本原理

启动时,程序会进行包扫描,扫描所有包下所有@FeignClient注解的类,并将这些类注入到 Spring 的IOC容器中。当定义的Feign中的接口被调用时,通过JDK的动态代理来生成RequestTemplate

RequestTemplate中包含请求的所有信息,如请求参数,请求URL等。 RequestTemplate将Request交给client处理,这个client默认是JDK的HttpURLConnection,也可以是Okhttp

最后client封装成LoadBaLanceClient,结合Ribbon负载均衡地发起调用

3 使用方式

3.1 添加依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

注意:不用写版本,因为springboot会自动协商。

3.2 开启Feign

灰常简单,在启动类application上加上 @EnableFeignClients 注解就可以了

3.3 创建Client

新建接口类,在接口类上加上 @FeignClient 注解,如:

@FeignClient(name = "msskill")
public interface UserFeignClient {
  @RequestMapping(value = "/{id}", method = RequestMethod.GET)
  public User findById(@PathVariable("id") Long id);
}

name:是微服务的名字

RequestMapping:定义了远程的url路径 和 调用方式

总结:

一个使用java动态代理,对http 请求自动组装的库。

使用的时候先开启,增加注解@EnableFeignClients

然后创建接口,在接口上增加 @RequestMapping 注解



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200