RPC框架正确的使用姿势

  1. RPC框架-Thrift
    1. 介绍

RPC(Remote Procedure Call)远程过程调用,简单的理解是一个节点请求另一个节点提供的服务;

本地过程调用:如果需要将本地student对象的age+1,可以实现一个addAge()方法,将student对象传入,对年龄进行更新之后返回即可,本地方法调用的函数体通过函数指针来指定。

远程过程调用:上述操作的过程中,如果addAge()这个方法在服务端,执行函数的函数体在远程机器上,如何告诉机器需要调用这个方法呢?

 

 

 

目前主流的RCP框架有:

rpcx

基于Go的服务治理的rpc框架、客户端支持跨语言

grpc

Google 出品的跨语言rpc框架,很弱的(实验性的)负载均衡, 测试使用的是grpc-go

go std rpc

Go标准库的rpc, 不支持跨语言(jsonrpc支持json rpc 1.0)

thrift:

跨语言的rpc框架,facebook贡献

从社区活跃度、跨语言考虑,我们选择Thrift。

Thrift是Facebook于2007年开发的跨语言的rpc服框架,提供多语言的编译功能,并提供多种服务器工作模式;用户通过Thrift的IDL(接口定义语言)来描述接口函数数据类型,然后通过Thrift的编译环境生成各种语言类型的接口文件,用户可以根据自己的需要采用不同的语言开发客户端代码和服务器端代码。

Thrift提供跨语言的服务框架,这种跨语言主要体现在它对多种语言的编译功能的支持,用户只需要使用IDL描述好接口函数,只需要一条简单的命令,Thrift就能够把按照IDL格式描述的接口文件翻译成各种语言版本。

    1. 开发说明

1、编写.thrift脚本(IDL文件,一个脚本对应一个业务通道)

脚本内容:

    1、定义请求入参实体类

    2、定义响应出参实体类

    3、服务端方法接口类

2、编译thrift脚本

将.thrift脚本放在和thrift-0.13.0.exe编译器同一个目录

执行命令:thrift-0.13.0.exe -r --gen java sample.thrift

该命令会自动生成java代码 (gen-java目录)

支持多种语言,如python等

thrift-0.13.0.exe -r --gen py sample.thrift

3、将生成好的java代码放到业务工程,

编写接口实现impl类、服务端Server、客户端Client代码即可

4、java集成

添加pom依赖:

<dependency>

    <groupId>org.apache.thrift</groupId>

    <artifactId>libthrift</artifactId>

    <version>0.13.0</version>

</dependency>

 

 

 

 

 

 

 

热门文章

暂无图片
编程学习 ·

PAT 1161 Merging Linked Lists

原题链接:暂无 关键词:链表 Given two singly linked lists L 1 =a 1 →a 2 →…→a n−1 →a n L1=a1→a2→…→an−1→an and L 2 =b 1 →b 2 →…→b m−1 →b m L2=b1→b2→…→bm−1→bm . If n≥2m n≥2m , you are supposed to reverse and merge the shorter one i…
暂无图片
编程学习 ·

C++核心准则ES.40:避免复杂的表达式

ES.40: Avoid complicated expressionsES.40:避免复杂的表达式Reason(原因)Complicated expressions are error-prone.复杂的表达式容易引发错误。Example(示例)// bad: assignment hidden in subexpression while ((c = getc()) != -1)// bad: two non-local variables as…
暂无图片
编程学习 ·

Java的ConcurrentHashMap 底层了解

最近有人问Java8 中ConcurrentHashMap 底层实现,这里简单列下。大家都知道 Java8 对 HashMap 、ConcurrentHashMap 进行了改进,前者非线程安全,后者线程安全。HashMap在Java 7 中,采用哈希表结构在Java 8 中,采用哈希表 + 红黑树ConcurrentHashMap在Java 7 中,采用分段的…
暂无图片
编程学习 ·

使用go语言寻找最长不含有重复字符的字串,统计数量

go语言Map例题(寻找最长不含有重复字符的字串 )要求 a := abcdabc 那么得出统计说是4,实现下方代码 解题思路lastOccurred[x]不存在,或者无需操作 lastOccurred[x] >= start -> 更新start 更新lastOccurred[x],更新maxLengthfunc lengthOfNonRepeatingSubstr(s strin…
暂无图片
编程学习 ·

[云盘](二)我的文件和共享列表后台实现

后台代码实现我的文件列表Mian读取配置信息解析json登录token(cmd为count)解析jason(cmd不为count)获取用户文件个数获取用户文件列表源码共享文件列表main获取共享文件个数前端分页请求包获得普通共享文件列表共享文件排行榜源码 我的文件列表业务逻辑是,点击我的文件,会…
暂无图片
编程学习 ·

日志框架 SLF4j

是什么:SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统为什么:在java.util.logging, logback…
暂无图片
编程学习 ·

php发送stmp邮件类 给有需要的人

<?php/*** email smtp (support php7)** Modified by: Reson 2019/06** More: http://www.wan0551.com**/class Smtp {/* Public Variables */public $smtp_port;public $time_out;public $host_name;public $log_file;public $relay_host;public $debug;public $auth;pu…
暂无图片
编程学习 ·

贪心:P2240 【深基12.例1】部分背包问题(洛谷)

贪心算法的讲解: 贪心算法 本题链接 第一种:结构体解题 #include<bits/stdc++.h> using namespace std; struct node {double w;//重量double v;//价值double p;//均价 }a[101]; int N; double T,sum; bool cmp(node a, node b) {return a.p > b.p; } int main() {…
暂无图片
编程学习 ·

当我们谈论算法我们在谈论什么:由疫情核酸检测想到的分治算法(Divide-and-Conquer)

原文转载自「刘悦的技术博客」https://v3u.cn/a_id_159 北京的疫情一波未平一波又起,由此看来,战“疫”将是一场旷日持久的战争,绝不能掉以轻心、轻易言胜。病毒随时都会死灰复燃,以生命为代价换来的经验教训值得我们每一个人久久深思。笔者所在的小区也开始组织居民批量进…
暂无图片
编程学习 ·

Tomcat 启动控制台乱码

Tomca 启动控制台乱码将tomcat用作web应用服务器,在tomcat的服务迭代中,服务漏洞是不可避免需要升级的来修复漏洞的。在修复漏洞的时候通常需要将原来的webapps下的文件复制到新tomcat中,并替换tomcat/conf/server.xml文件(小版本升级都可以用这种方式)。解决乱码 在tomca…
暂无图片
编程学习 ·

GitHub更新fork的代码

1、在本地装好github客户端,或者git客户端 2、clone 自己的fork分支到本地,可以直接使用github客户端,clone到本地,如果使用命令行,命令为:git clone https://github.com/liuyanqing1023/WxJava.git3、增加源分支地址到你项目远程分支列表中(此处是关键),先得将原来的仓…
暂无图片
编程学习 ·

HADOOP YARN原理及资源调度

文章目录1、ResourceManager2、NodeManager3、Applicacation Master4、yarn调度方式5、Yarn架构及各角色职责6、Yarn作业执行流程7、特点8、MapReduce在Yarn上的运转 1、ResourceManager ReaouceManager(资源管理器RM)常驻守护进程: 管理集群资源,负责全局资源的监控、分配和…
暂无图片
编程学习 ·

C++Primer5th 第十六章 模板与泛型编程

第十六章 模板与泛型编程16.1 定义模板16.1.1 函数模板实例化函数模板 模板类型参数 非类型模板参数 inline和constexpr的函数模板 编写类型无关的代码 模板编译 模板大多数编译错误在实例化期间报告16.1.2 类模板定义类模板 实例化类模板 类模板的成员函数 类模板成员函数的实…
暂无图片
编程学习 ·

最大子段和

题目描述:N个整数组成的序列a11,a22,a33,…,ann, 求该序列如aii+ai+1i+1+…+ajj的连续子段和的最大值。当所给的整数均为负数时和为0。 例如:-2,11,-4,13,-5,-2,和最大的子段为:11,-4,13。和为20。 Input 第1行:整数序列的长度N(2 <= N <= 50000) 第2 - N + 1行:…
暂无图片
编程学习 ·

屏蔽系统更新

win+r services.msc 改为禁用 恢复 -> 全改为无操作win + r gpedit.msc 找到windows 更新 中的 配置自动更新禁用掉注: 家庭版无法打开gpedit.msc 新建一个文本文档,名字随便取,编辑以下批处理内容,保存后将后缀名改为.bat ,右键使用管理员权限执行: @echo of…