• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
深水是沉默
别自制压力,我们没有必要跟着时间走, 只需跟着心态和能力走 随缘 尽力 问心无愧,其他的,交给天。
博客园    首页    新随笔    联系   管理    订阅  订阅
干掉 Feign,Spring Cloud Square 组件发布

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-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();
}

总结

    1. 由于 spring-cloud-square 直接基于 retrofit 实现,整体源码非常的简单,推荐大家一读。
    1. 目前版本暂未实现 fallback 相关的实现。
    1. 本文的配套代码 https://github.com/lltx/spring-cloud-square-demo
    2. 来源:https://www.cnblogs.com/leng-leng/p/14675590.html
posted on 2021-04-19 15:21  深水是沉默  阅读(362)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3