干掉 Feign,Spring Cloud Square 组件发布

标签: feign spring cloud | 发表时间:2021-04-19 01:39 | 作者:冷冷zz
出处:https://juejin.cn/backend

Spring Cloud Square 是什么

谈起 Spring Cloud 生态大家一定对 Feign 不陌生,如下图所示,Feign 可以把底层(okhttp、httpclient)Rest 的请求进行隐藏,伪装成类似 SpringMVC 的 Controller 一样。你不用再自己拼接 url,拼接参数等等操作,一切都交给 Feign 去做。使用 Feign 调用 API 就像调用本地方法一样,从避免了调用目标微服务时,需要不断的解析/封装 json 数据的繁琐。

Spring Cloud Feign 调用

Spring Cloud Square 项目旨在替代原有的 Spring Cloud Feign , 借助 Retrofit 对底层通信类库的封装实现跨服务调用,目前已在 spring-cloud-incubator 孵化器进行孵化 (上一个在孵化器孵化 spring-cloud-loadbalancer 已经正式接替 Ribbon 成为正式推荐组件)。

在了解 Spring Cloud Square 之前,需要先了解以下组件:

  • OkHttp 是一个关于网络请求的第三方类库,其中封装了网络请求的 get、post 等操作的底层实现,是目前最为火热的网络请求框架之一。

  • Retrofit 是一个 RESTful 的 HTTP 网络请求框架, 它是基于 OkHttp 的。它是通过注解配置网络参数的,支持多种数据的解析和序列化(Gson、Json、Xml 等,并且对 RxJava 也是支持的。

那么基于 Spring Cloud Square 的服务调用可以抽象成如下图所示:

Spring Cloud Square 调用

快速上手

1618403200

添加依赖

  • 由于目前 spring-cloud-square 未正式发布,需要配置 spring maven 仓库。
   <repositories>
  <repository>
    <id>spring-milestonesid>
    <url>https://repo.spring.io/milestoneurl>
  repository>
repositories>
复制代码
  • maven 依赖
   <dependency>
  <groupId>org.springframework.cloudgroupId>
  <artifactId>spring-cloud-square-okhttpartifactId>
  <version>${square.version}version>
dependency>
<dependency>
  <groupId>com.squareup.okhttp3groupId>
  <artifactId>okhttpartifactId>
  <version>${okhttp.version}version>
dependency>


<dependency>
  <groupId>org.springframework.cloudgroupId>
  <artifactId>spring-cloud-starter-loadbalancerartifactId>
dependency>
复制代码

代码配置

   @Bean
@LoadBalanced
public OkHttpClient.Builder okHttpClientBuilder() {
    return new OkHttpClient.Builder();
}
复制代码

代码调用

  • 和最早的 ribbon 调用一样,非常的简单。
   @Autowired
OkHttpClient.Builder builder;

@GetMapping
public String req() {
    Request request = new Request.Builder()
            .url("http://square-provider/req").build();
    Response response = builder.build().newCall(request).execute();
    return response.body().string();
}
复制代码

进阶使用

作为 Spring Cloud Feign 的替代品,square 也支持声明式客户端的形式。注意看以下代码 和 feign 一样的味道

添加依赖

   <dependency>
  <groupId>org.springframework.cloudgroupId>
  <artifactId>spring-cloud-square-retrofitartifactId>
  <version>${square.version}version>
dependency>
复制代码

声明调用客户端

   @RetrofitClient("square-provider")
public interface DemoService {

    @GET("/")
    Call req();
}
复制代码

开启客户端扫描

   @EnableRetrofitClients
复制代码

代码调用

   @Autowired
DemoService demoService;

@SneakyThrows
@GetMapping("/retrofit")
public String retrofit(){
    return demoService.req().execute().body();
}
复制代码

总结

    1. 由于 spring-cloud-square 直接基于 retrofit 实现,整体源码非常的简单,推荐大家一读。
    1. 目前版本暂未实现 fallback 相关的实现。
    1. 本文的配套代码 github.com/lltx/spring…

相关 [feign spring cloud] 推荐:

Spring Cloud Feign接口返回流

- - Blog_龙飞
身无彩凤双飞翼,心有灵犀一点通. 关注微信公众号 java干货 不定期分享干货资料.

干掉 Feign,Spring Cloud Square 组件发布

- - 掘金 后端
Spring Cloud Square 是什么. 谈起 Spring Cloud 生态大家一定对 Feign 不陌生,如下图所示,Feign 可以把底层(okhttp、httpclient)Rest 的请求进行隐藏,伪装成类似 SpringMVC 的 Controller 一样. 你不用再自己拼接 url,拼接参数等等操作,一切都交给 Feign 去做.

Spring Cloud Feign如何实现JWT令牌中继,传递认证信息?

- - 程序猿DD
在上一篇实现了 Spring Cloud资源服务器的定制化,但是又发现了一个新的问题,Spring Cloud微服务调用的过程中需要令牌中继. 只有令牌中继才能在调用链中保证用户认证信息的传递. 今天就来分享一下如何在Feign中实现令牌中继. 令牌中继(Token Relay)是比较正式的说法,说白了就是让Token令牌在服务间传递下去以保证资源服务器能够正确地对调用方进行鉴权.

大话 Spring Cloud

- - IT瘾-dev
研究了一段时间spring boot了准备向spirng cloud进发,公司架构和项目也全面拥抱了Spring Cloud. 在使用了一段时间后发现Spring Cloud从技术架构上降低了对大型系统构建的要求,使我们以非常低的成本(技术或者硬件)搭建一套高效、分布式、容错的平台,但Spring Cloud也不是没有缺点,小型独立的项目不适合使用.

Spring Cloud Alibaba:支持的几种服务消费方式(RestTemplate、WebClient、Feign)_饭团小哥哥iop的博客-CSDN博客

- -
关于消费者通过Nacos来消费注册的服务时可以使用RestTemplate、WebClient、Feign等方式,他们之间有什么不一样. 使用RestTemplate. RestTemplate来向服务的某个具体实例发起HTTP请求,但是具体的请求路径是通过拼接完成的,对于开发体验并不好. 但是,实际上,在Spring Cloud中对RestTemplate做了增强,只需要稍加配置,就能简化之前的调用方式.

Spring Cloud限流详解 | Spring Cloud|周立

- -
限流往往是一个绕不开的话题. 本文详细探讨在Spring Cloud中如何实现限流. Zuul上实现限流是个不错的选择,只需要编写一个过滤器就可以了,关键在于如何实现限流的算法. 常见的限流算法有漏桶算法以及令牌桶算法. https://www.cnblogs.com/LBSer/p/4083131.html,写得通俗易懂,你值得拥有,我就不拽文了.

Spring Cloud Kubernetes指南

- -
当我们构建微服务解决方案时,SpringCloud和Kubernetes都是最佳解决方案,因为它们为解决最常见的挑战提供组件. 但是,如果我们决定选择Kubernetes作为我们的解决方案的主要容器管理器和部署平台,我们仍然可以主要通过SpringCloudKubernetes项目使用SpringCloud的有趣特性.

Spring Cloud 快速入门

- - IT瘾-tuicool
Spring Cloud 是一套完整的微服务解决方案,基于 Spring Boot 框架,准确的说,它不是一个框架,而是一个大的容器,它将市面上较好的微服务框架集成进来,从而简化了开发者的代码量. 本课程由浅入深带领大家一步步攻克 Spring Cloud 各大模块,接着通过一个实例带领大家了解大型分布式微服务架构的搭建过程,最后深入源码加深对它的了解.

Deploy the spring cloud project using jenkins

- - Telami
先简单记录下Jenkins部署maven聚合工程要点. Root pom配置成项目根目录的pom.xml. maven命令单独install 欲构建的项目. 选项后可跟随{groupId}:{artifactId}或者所选模块的相对路径(多个模块以逗号分隔). 表示同时处理选定模块所依赖的模块. 表示同时处理依赖选定模块的模块.

Spring Cloud Gateway(限流) | Wind Mt

- -
限流可以保障我们的 API 服务对所有用户的可用性,也可以防止网络攻击. 一般开发高并发系统常见的限流有:限制总并发数(比如数据库连接池、线程池)、限制瞬时并发数(如 nginx 的 limit_conn 模块,用来限制瞬时并发连接数)、限制时间窗口内的平均速率(如 Guava 的 RateLimiter、nginx 的 limit_req 模块,限制每秒的平均速率);其他还有如限制远程接口调用速率、限制 MQ 的消费速率.