干掉 Feign,Spring Cloud Square 组件发布
2021/4/19 10:58:06
本文主要是介绍干掉 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 相关的实现。
-
- 本文的配套代码 https://github.com/lltx/spring-cloud-square-demo
这篇关于干掉 Feign,Spring Cloud Square 组件发布的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-04TiDB 资源管控的对撞测试以及最佳实践架构
- 2024-07-03万字长文聊聊Web3的组成架构
- 2024-07-02springboot项目无法注册到nacos-icode9专业技术文章分享
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现