美文网首页Spring Cloudspring cloud
干掉 Feign,Spring Cloud Square 组件发

干掉 Feign,Spring Cloud Square 组件发

作者: 冷冷zz | 来源:发表于2021-04-19 09:50 被阅读0次

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

    总结

    相关文章

      网友评论

        本文标题:干掉 Feign,Spring Cloud Square 组件发

        本文链接:https://www.haomeiwen.com/subject/dbxilltx.html