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

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 未正式发布,需要配置 spring maven 仓库。
<repositories>
<repository>
<id>spring-milestones</id>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories>
- maven 依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-square-okhttp</artifactId>
<version>${square.version}</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>${okhttp.version}</version>
</dependency>
<!--添加负载均衡支持-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</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.cloud</groupId>
<artifactId>spring-cloud-square-retrofit</artifactId>
<version>${square.version}</version>
</dependency>
声明调用客户端
@RetrofitClient("square-provider")
public interface DemoService {
@GET("/")
Call<String> req();
}
开启客户端扫描
@EnableRetrofitClients
代码调用
@Autowired
DemoService demoService;
@SneakyThrows
@GetMapping("/retrofit")
public String retrofit(){
return demoService.req().execute().body();
}
总结
- 由于 spring-cloud-square 直接基于 retrofit 实现,整体源码非常的简单,推荐大家一读。
- 目前版本暂未实现 fallback 相关的实现。
干掉 Feign,Spring Cloud Square 组件发布的更多相关文章
- Spring Cloud 各组件调优参数
Spring Cloud整合了各种组件,每个组件往往还有各种参数.本文来详细探讨Spring Cloud各组件的调优参数. Tomcat配置参数 1 server: 2 tomcat: 3 max-c ...
- Spring Cloud各个组件的配套使用
我们从整体上来看一下Spring Cloud各个组件如何来配套使用: 从上图可以看出Spring Cloud各个组件相互配合,合作支持了一套完整的微服务架构. 其中Eureka负责服务的注册与发现, ...
- Spring Cloud 各个组件介绍
从上图可以看出 Spring Cloud 各个组件相互配合,合作支持了一套完整的微服务架构: Eureka 负责服务的注册与发现,很好地将各服务连接起来. Hystrix 负责监控服务之间的调用情况, ...
- Spring Cloud Greenwich.SR4 发布了,跟不上了……
前几天 Spring Cloud Greenwich.SR4 发布了: https://spring.io/blog/2019/11/19/spring-cloud-greenwich-sr4-rel ...
- Spring Cloud常用组件及各组件版本对应关系图
Spring Cloud常用组件: 架构图: 版本对应关系:
- Spring Cloud各组件
讲的不错:http://www.ityouknow.com/springcloud/2017/05/16/springcloud-hystrix.html Spring Cloud技术应用从场景上可以 ...
- Spring Cloud Alibaba 新版本发布:众多期待内容整合打包加入!
在Nacos 1.0.0 Release之后,Spring Cloud Alibaba也终于发布了最新的版本.该版本距离上一次发布,过去了整整4个月!下面就随我一起看看,这个大家期待已久的版本都有哪些 ...
- Spring Cloud各组件超时总结
Ribbon的超时 全局设置: ribbon: ReadTimeout: 60000 ConnectTimeout: 60000 1 2 3 局部设置: service-id: ribbon: Rea ...
- Spring Cloud 各个组件角色简介
概述 SpringCloud 是一个全家桶式的技术栈,包含了很多组件:包含 Eureka.Ribbon.Feign.Zuul .Hystrix等.每个组件完成对应的功能 组件介绍 - 服务发现 Eur ...
随机推荐
- Warning: Cannot update during an existing state transition (such as within `render`). Render 报错
原来 修改(不用在构造函数里面定义)
- 微信小程序:条件渲染wx:if和hidden
一.条件渲染:wx:if,wx:elif,wx:else 花括号中的true或false可以改成变量从而来动态显示. 二.hidden 只显示hidden2 当标签不是频繁切换显示(控制是否渲染到页面 ...
- Vue使用 空白占位符
当有时候需要在页面显示时显示空格时,可以使用 ,但是使用这个占位符时,无论写多少个,就只能显示一个空格.要想显示多个空格进行占位,这种方式显然是可行的,解决方法是使用转义字符. 先看代码: <t ...
- 死磕Spring之IoC篇 - BeanDefinition 的解析过程(面向注解)
该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ...
- Jquery hover鼠标经过时弹出div动态提示语
一.效果图 二.需求描述 1.鼠标经过table每一行时,弹出div动态提示语: 2.div弹出层的位置随鼠标位置的变化而变化: 3.鼠标离开table或获取的动态提示语为空时,div弹出层消失. 下 ...
- SpringBoot(二): SpringBoot属性配置文件 SpringBoot多环境配置文件 SpringBoot自定义配置文件
1.属性配置文件 一共分为两种,一种是键值对的properties属性配置文件,一种是yaml格式的配置文件 properties配置: 2.多环境配置文件 当我们的项目中有多套配置文件 比如开发的配 ...
- 《C++ Primer》笔记 第5章 语句
空块的作用等价于空语句. case标签必须是整型常量表达式,default也是一种特殊的case标签. 标签不应该孤零零地出现,它后面必须跟上一条语句或者另外一个case标签. 如果在某处一个带有初值 ...
- 内核报错kernel:NMI watchdog: BUG: soft lockup - CPU#1
1.现象描述 系统管理员电话通知,描述为一台服务器突然无法ssh连接,登录服务器带外IP地址并进入远程控制台界面后,提示Authentication error,重启后即可正常进入系统,进入后过20分 ...
- python的模块(module)和包(package)机制:import和from..import..
在python用import或者from...import来导入相应的模块. 模块其实就一些函数和类的集合文件,它能实现一些相应的功能,当我们需要使用这些功能的时候,直接把相应的模块导入到我们的程序中 ...
- HTML基础速览
HTML概述 HTML ,CSS , JavaScript, JQuery, Vue 的关系 HTML可以写一个简单的前端,但是很丑,所以需要CSS对HTML进行美化 HTML是静态的.JavaScr ...