JAVA基础之——Thrift原理及应用
1 是什么
是为了解决facebook系统中各系统间大数据量的传输通信,以及系统之间语言环境不同需要跨平台的问题。
是一种实现RPC的软件框架,自定义IDL(Interface description language)接口描述语言
2 为什么用
当跨语言调用时,使用http是个比较好的访问协议,但是如果消费端不能使用http,而是以操作本地的api的方式来使用服务,那我们需要使用thrift,客户端和服务端之间传输协议分为文本和二进制,一般使用二进制类型传输。
3 框架流程
3.1 编写idl文件,demo.thrift
3.2 客户端 编写cs文件,封装对象
数据发送 编码和封装 字节流转换 底层发送
3.3 服务端 编写java文件出,解析对象
底层接收 字节流转换 解码和解析 分发请求 处理请求
4 thrift涉及技术点
4.1 基本数据类型
namespace java com.xxxx struct ParameterSetting
{
1: bool isShadow;
2: i32 probability; //int
3: double range; //64位浮点数
4: string name;
5: list<string> addressInfo;
6: i64 scale; //long
7: i16 height; //short
8: byte sdFlag; //byte,8位有符号整数
9: map<string,string> propaMap;
10:set<Integer> errorSet;
11: optional string id; //当该字段没有值的时候,不会被序列化输出
12: AcuUnit acuUnit;
} enum AcuUnit
{
succ=0,
fail=1,
} const string COMMON_URL=“xxxx”
4.2 数据传输协议
4.2.1 TSimpleJSONProtocol
Thrift对象转换成json TSimpleJSONProtocol提供json只写协议
TBase接口反序列化和序列化时使用。Thrift序列化时根据idl中结构体定义的每个属性的序号顺序写入inputStream中,所以序号不能重复。
TBase obj
TSerializer s=new TSerializer(new TSimpleJSONProtocol.Factory());
s.toString(obj);
TCompactProtocol压缩格式,高效率的密集的二进制编码格式进行数据传输。
JAVA基础之——Thrift原理及应用的更多相关文章
- Java基础之Synchronized原理
思维导图svg: https://note.youdao.com/ynoteshare1/index.html?id=eb05fdceddd07759b8b82c5b9094021a&type ...
- 【Java基础】HashMap原理详解
哈希表(hash table) 也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,本文会对java集合框架中Has ...
- java基础-注解Annotation原理和用法
在很多java代码中都可以看到诸如@Override.@Deprecated.@SuppressWarnings这样的字符,这些就是注解Annotation.注解最早在jdk5中被引入,现在已经成为j ...
- Java基础 | Stream流原理与用法总结
Stream简化元素计算: 一.接口设计 从Java1.8开始提出了Stream流的概念,侧重对于源数据计算能力的封装,并且支持序列与并行两种操作方式:依旧先看核心接口的设计: BaseStream: ...
- Java基础之Volatile原理
原文链接: http://www.aoaoyi.com/archives/956.html 计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据 的读取和写入.由于程序运 ...
- Java基础之HashMap原理分析(put、get、resize)
在分析HashMap之前,先看下图,理解一下HashMap的结构 我手画了一个图,简单描述一下HashMap的结构,数组+链表构成一个HashMap,当我们调用put方法的时候增加一个新的 key-v ...
- Java基础之LinkedHashMap原理分析
知识准备HashMap 我们平时用LinkedHashMap的时候,都会写下面这段 LinkedHashMap<String, Object> map = new LinkedHashMa ...
- java基础解析系列(四)---LinkedHashMap的原理及LRU算法的实现
java基础解析系列(四)---LinkedHashMap的原理及LRU算法的实现 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析 ...
- java基础解析系列(六)---深入注解原理及使用
java基础解析系列(六)---注解原理及使用 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)---Integer ja ...
随机推荐
- 转载文章 208 个最常见 Java 面试题全解析
最近正值春招,一直在给公司招聘 Java 程序员,我从 2015 年做 TeamLeader 开始就习惯性地收集平时遇到的 Java 技术问题或周围朋友见过的面试题,经过不断筛选,终于凝练成一套实用的 ...
- Get 和 Post 方法的选择和URL的设计
原文链接:http://yifei.me/note/540 HTTP 中常用的方法有 GET/POST/PUT/DELETE 等,在设计API或者表单的时候我们需要选择合适的方法.一般有两种方案: 只 ...
- Linux磁盘及文件系统(三)Linux文件系统
一.文件系统的组成 Linux常见的文件系统类型有ReiserFS,ext2,ext3,ext4,vfat,XFS等,文件系统是对一个存储设备上数据和元数据进行组织的机制.他的最终目的是把大量数据有组 ...
- PHP性能优化四(业务逻辑中使用场景)
php脚本性能,很多时候依赖于你的php版本.你的web server环境和你的代码的复杂度. Hoare曾经说过“过早优化是一切不幸的根源”.当你想要让你的网站更快运转的时候,你才应该去做优化的事情 ...
- mxonline实战8,机构列表分页功能,以及按条件筛选功能
对应github地址:列表分页和按条件筛选 一. 列表分页 1. pip install django-pure-pagination 2. settings.py中 install ...
- Spring Boot Cookbook 中文笔记
Spring Boot Cookbook 一.Spring Boot 入门 Spring Boot的自动配置.Command-line Runner RESTful by Spring Boot wi ...
- python基础知识梳理-----7函数
基本内容梳理 1:函数定义,函数名,函数体以及函数的调用方式 2:函数的返回值 3:函数的参数 4:函数---动态传参数 5:名称空间,局部名称的加载顺序,全局名称空间,作用域,加载顺序 6:函数的嵌 ...
- git 命令摘录
回滚 n 个 commit (增加了revert commit) git revert -n commit_id 回滚到指定的commit_id(不增加commit,回滚的commit_id被删除) ...
- leetcode-374-Guess Number Higher or Lower(二分查找)
题目描述: We are playing the Guess Game. The game is as follows: I pick a number from 1 to n. You have t ...
- 架构师养成记--35.redis集群搭建
前记:redis哨兵经验之谈.哨兵做主从切换可能要花费一两秒,这一两秒可能会丢失很多数据.解决方法之一是在java代码中做控制,try catch 到 链接断开的异常就sleep 一两秒钟再conti ...