Spring Cloud整合Thrift RPC(一) - 使用指南

前言

前面几篇博客,着重对Apache Thrift的使用和原理做了介绍。在微服架构流行的今天,自然而然就会想到Spring BootSpring Cloud作为微服务的基础框架。然而,Spring Cloud从诞生以来,就基于HTTP协议的轻量级Restful API作为服务之间的通信方式。

在微服务架构设计中,可以分为外部服务内部服务。两者主要区别是:

  • 外部服务:基于Restful风格的HTTP协议,通过外网向外部提供服务,相对来说简单并且通用
  • 内部服务:基于RPC消息通信的TCP/IP协议,提供内网服务与服务之间的调用,以达到减少带宽降低延迟率提高性能

一些应用场景,尤其是内部服务需要高频地调用,就需要考虑是否需要改造为RPC实现,来提高吞吐量系统性能,比如说鉴权服务一类。


正文

简述

下载 spring-cloud-starter-thrift并导入IDEA开发环境,项目地址:https://github.com/ostenant/spring-cloud-starter-thrift

12738336-208b4e019c230605.png
image

spring-cloud-starter-thrift 提供 Spring Cloud可伸缩跨语言服务调用框架 Apache Thrift的封装和集成。

spring-cloud-starter-thrift包括客户端spring-cloud-starter-thrift-client服务端spring-cloud-starter-thrift-server两个模块。而spring-cloud-starter-thrift-examples 子模块提供了3个示例项目:calculatordeposittest

  • calculator:简单上手项目示例。
  • deposit:复杂业务场景项目示例。
  • test:性能测试项目示例。

服务端

  1. 支持 Apache Thrift的各种原生线程服务模型,包括单线程阻塞模型(simple)、单线程非阻塞模型(nonBlocking)、线程池阻塞模型(threadPool)、半同步半异步模型(hsHa)和线程选择器模型(threadedSelector)。
  2. 支持 Apache Thrift 0.10.0版本后提供的多路复用处理器,提供服务的统一注册管理功能。
  3. 支持由服务签名 (服务ID + 客户端Stub接口名称 + 服务版本号) 唯一标识服务Stub具体实现类,支持服务版本的平滑升级
  4. 支持Server Group形式的启动方式,每个服务实例可以开启多台Thrift Server,通过不同的端口号暴露给客户端。

客户端

  1. 支持由服务签名 (服务ID + 客户端Stub接口名称 + 服务版本号) 唯一标识和调用服务端的Stub具体实现类
  2. 支持Apache ThriftTransport层的连接池管理减少了客户端与服务端之间连接的频繁创建销毁
  3. 支持与Spring Cloud Consul无缝集成,客户端通过心跳检测服务注册中心Consul保持连接,动态定时的刷新服务列表监测服务的启用关闭健康状态
  4. 支持客户端负载均衡,包括随机轮询的负载均衡策略,客户端的Thrift程序通过本地的服务缓存列表实现调用的动态转发。

快速上手

项目结构:

12738336-4dea3c0673463248.png
image
  • calculator
    • calculator-client
    • calculator-iface
    • calculator-server

spring-cloud-starter-thrift 使用的是 0.10.0版本的 thrift。以calculator项目入手,首先,通过 Thrift IDL (接口描述语言) 编写客户端桩Stub服务端骨架Skeleton,通过.thrift文件定义接口规范。

首先进入 spring-cloud-starter-thrift 根目录,pom.xml 定义如下:

pom.xml

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.8.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<modelVersion>4.0.0</modelVersion>
<groupId>com.icekredit.rpc.thrift.examples</groupId>
<version>1.0-SNAPSHOT</version>
<modules>
    <module>calculator-client</module>
    <module>calculator-server</module>
    <module>calculator-iface</module>
</modules>
<artifactId>calculator</artifactId>
<packaging>pom</packaging>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <spring-cloud.version>Dalston.SR4</spring-cloud.version>
</properties>

<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.6</version>
        </plugin>
    </plugins>
</build>

将项目打包并安装到本地Maven仓库:

mvn clean install

Thrift IDL编写

namespace java com.icekredit.rpc.thrift.example
service CalculatorService {
    i32 add(1: i32 arg1, 2: i32 arg2)
    i32 subtract(1: i32 arg1, 2: i32 arg2)
    i32 multiply(1: i32 arg1, 2: i32 arg2)
    i32 division(1: i32 arg1, 2: i32 arg2)
}

下载并安装0.10.0Thrift IDL编译生成器,下载地址:http://thrift.apache.org/docs/install。通过编译器生成.javaStub类文件。

thrift -gen java ./CalculatorService.thrift

编译器生成的CalculatorService.java文件。CalculatorService.java有成千上万行代码。对于开发人员而言,只需要关注以下四个核心接口/类IfaceAsyncIfaceClientAsyncClient

  • Iface服务端通过实现 HelloWorldService.Iface 接口,向客户端的提供具体的同步业务逻辑。
  • AsyncIface服务端通过实现 HelloWorldService.Iface
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spark-Thrift和Spark-SQL是Spark框架中的两个组件,它们有以下区别: 1. Spark-SQL是Spark的一个模块,用于处理结构化数据,支持SQL查询和DataFrame API。它提供了一种高效且易于使用的方法来处理和分析结构化数据。用户可以使用SQL语句或DataFrame API来查询和操作数据。Spark-SQL允许用户直接在Spark应用程序中使用SQL查询,而无需编写复杂的MapReduce代码。 2. Spark-Thrift是Spark的一个独立服务,它提供了一个标准的Thrift接口,用于执行SQL查询。它可以作为一个独立的进程运行,并通过网络接收来自客户端的SQL查询请求,并将查询转发到Spark集群中的Spark-SQL模块进行处理。Spark-Thrift使得可以使用不同的编程语言,如Java、Python、R等,通过Thrift接口与Spark集群交互。 因此,Spark-SQL是Spark框架中用于处理结构化数据的模块,而Spark-Thrift是提供Thrift接口让用户可以使用不同编程语言与Spark-SQL模块交互的独立服务。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [CDH15.0支持spark-sql和spark-thrift-server](https://blog.csdn.net/u012458821/article/details/87635599)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [122.Thrift和spark-sql客户端部署](https://blog.csdn.net/m0_47454596/article/details/126856172)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值