当前位置: 首页 > news >正文

做原油看哪个网站做株洲网站需要多少钱

做原油看哪个网站,做株洲网站需要多少钱,qq网页登录入口,商务网站建设与维护试卷Thrift RPC引言 Thrift RPC的特点 Thrift 是一个RPC的框架#xff0c;和Hessian RPC有什么区别#xff0c;最重要的区别是Thrift可以做异构系统开发。 什么是异构系统#xff0c;服务的提供者和服务的调用者是用不同语言开发的。 为什么会当前系统会有异构系统的调用…Thrift RPC引言 Thrift RPC的特点 Thrift 是一个RPC的框架和Hessian RPC有什么区别最重要的区别是Thrift可以做异构系统开发。 什么是异构系统服务的提供者和服务的调用者是用不同语言开发的。 为什么会当前系统会有异构系统的调用 做大数据一般使用Python数据存储又要使用Hbase(Java)这就是异构系统了。 另外还有遗留系统额整合一个公司的系统是随着业务增长的在不同的业务可能由不同的编程语言开发的想要完成一个共同的目标就要不同系统之间进行交互。不同的系统要传输数据首先要构建一个统一的格式和编程语言无关。 设计一个异构系统的RPC解决的核心问题是什么 只要双方用各自的编程语言网络编程建立连接进行通信即可。 但是有一些挑战 1.得需要精通不同编程语言的网络IO线程技术。 2.通信数据的格式尤其是二进制的格式不同编程语言的二进制数据量大小不一样。 所以我们引入了Thrift帮我们解决异构系统的调用。 ThriftRPC框架 基本概念是apache组织开源的一个顶级异构系统RPC框架,用于完成异构系统的RPC通信。 多种编程语言 Java C PHP Phyton Ruby Node.jsp… 2007 FaceBook Thrift 开源。特点 跨语言支持开发快速学习简单 IDL语言稳定 Thrift的设计思想 针对于不同的编程语言提供了一个库jar 作用网络通信的代码 协议序列化相关的内容 java libthriftIDL语言 中立语言 用于服务发布Thrift命令把IDL语言 自动转换成 你需要的编程语言。 Thrift 命令的安装 安装什么 安装的是将IDL语言转换为相应的编程语言。 如何安装 mac brew install thrift windows http://www.apache.org/dyn/closer.cgi?path/thrift/0.18.0/thrift-0.18.0.exe https://blog.51cto.com/u_15854865/5810927 如何验证 thrift -help thrift --version 针对于不同的编程语言 安装库 这里用Java dependencygroupIdorg.apache.thrift/groupIdartifactIdlibthrift/artifactIdversion0.18.0/version/dependencyIDL语法 IDEA 中 Thrift插件插件目的提示 校验IDL语法。 IDL语法 必须 thrift 注释 # 单行注释 // 单行注释 /* * 多行注释 */namespace namespace java com.liu namespace py com.liu指定编程语言指定生成好的代码 包 基本类型 1. i8 有符号的8位整数 byte 2. i16 有符号的16位整数 short 3. i32 有符号的32位整数 int 4. i64 有符号的64位整数 long 5. double 64位浮点数 double 6. bool 布尔值 boolean 7. string 字符串 字符 UTF-8集合类型 listT 有序可重复 java.util.List setT 无需不可重复 java.util.Set mapK,V k-v java.util.Mapmapi32,string sex {1:female,2:male} listi32 ages [1,2,3,4]struct 自定义对象 struct User{1: string name sunshuai,2: optional i32 age,3: listi32 ages [1,2,3,4]4. required i32 hieght }1. struts 不能继承 2. 成员与成员的分割 3. 结构体里面的每一个字段 都要进行编号 4. 变量类型 变量名 5. optional 可选的 默认为每一个成员都加入的关键字代表这个字段在序列化过程中可选的。如果这个字段没有默认值就不序列化如果有默认值 就序列化. 6. required 必选有没有值都会序列化枚举 enum) enum SEASON{SPRING 1,SUMMERT 2... }不支持嵌套i32 异常 Exception) exception MyException{1: i32 errorCode2: string message }服务 Service) 服务接口 service UserService{bool login(1:string name,2:string password)void register(1:User user) //User idl语言中的结构体 }注意1. 异常service UserService{bool login(1:string name,2:string password) throws (1:MyException e,2:XXXException e)void register(1:User user) //User idl语言中的结构体 }2. oneway 表示客户端发起请求后不等待响应返回,只能和void 这种操作配合。service UserService{bool login(1:string name,2:string password) throws (1:MyException e,2:XXXException e)oneway void register(1:User user) //User idl语言中的结构体 }3. 继承service BaseService{void m1(1:string name)}service UserService extends BaseService{}include 作用进行IDL模块化编程suns1.thriftstruct User{1:string name} suns2.thrift include suns1.thriftservice UserService{void register(1:suns1.User user)}Thrift把IDL生成对应代码的命令 thrift --gen java xx.thrift thrift --gen py xx.thriftthrift -r --gen java xx.thrift Thrift RPC的开发 环境搭建 1. 安装Thrift 作用把IDL语言描述的接口内容生成对应编程语言的代码简化开发。 2. 引入依赖 作用引入thrift针对于某一种编程语言的封装 网络通信 协议【序列化】dependencygroupIdorg.apache.thrift/groupIdartifactIdlibthrift/artifactIdversion0.13.0/version/dependencydependencygroupIdorg.slf4j/groupIdartifactIdslf4j-api/artifactIdversion1.7.32/version/dependencydependencygroupIdch.qos.logback/groupIdartifactIdlogback-classic/artifactIdversion1.2.9/version/dependency项目结构的定义 1. thrift-client 代表的是服务的调用者 2. thrift-server 代表的是服务的提供者 3. thrift-common RPC编程共有的内容 1实体类型 2服务接口Thrift核心对象 1. TTransport作用底层封装网络通信TSocket 阻塞IO通信TNonblockdingTransport 非阻塞网络通信TFramedTransport 加入了封帧的操作 压缩后 数据边界问题 2. TProtocol处理的协议 序列化方式TBinayProtocol 二进制进行序列化TCompactProtocol 压缩方式 处理二进制 TJSONProtocol JSON进行序列化 3. TProcessor业务处理把通信数据 和 业务功能整合在一起 4. TServer 服务端thrift-common 1. 通过IDL语言 定义 client与服务端 共用的数据类型 和 服务接口 2. client server端 引入 common模块编写thrift文件 namespace java com.liu struct User{1:string name,2:string password }service UserService{User queryUserByNamendPassword(1:string name,2:string password),void save(1:User user) }使用Thrift工具命令生成文件放在common模块中。 服务端 1. 实现服务接口 idl语言生成的 2. 创建服务端代码服务端实现之后就要发布服务如何发布服务 public static void main1(String[] args) throws TTransportException {//TTransportTServerTransport tServerTransport new TServerSocket(9002);//TBinaryProtocolTBinaryProtocol.Factory factory new TBinaryProtocol.Factory();//TProcessorUserService.Processor processor new UserService.Processor(new UserServiceImpl());TSimpleServer.Args tArgs new TSimpleServer.Args(tServerTransport);tArgs.protocolFactory(factory);tArgs.processor(processor);//TServer发布服务TServer tServer new TSimpleServer(tArgs);tServer.serve();}客户端 客户端要向本地方法那样 调用远端方法。 代理public static void main(String[] args) throws TException {//传输方式 基于Socket阻塞 也可以使用非阻塞方式TTransport transportnew TSocket(localhost,9002);//传输协议 TBinaryProtocol 二进制格式 TCompactProtocol 压缩格式 TJSONProtocol json格式TProtocol tProtocol new TBinaryProtocol(transport);UserService.Client userService new UserService.Client(tProtocol);transport.open();User user userService.queryUserByNamendPassword(liusir, 123);System.out.println(user user);}启动服务端之后然后运行客户端可以看到服务成功了。 实战开发中的思考 在实战开发中往往服务端的功能 其实已经开发完成。1. 现有本地的功能 服务端的功能 写好了。2. 根据系统的功能才有可能决定 这个服务发布成 RPC。所以在发布RPC业务实现 IFace接口主要通过原有的Service方法的调用进行实现。这样维护性更好也是实战中使用的方式。TServer服务的相关内容 TServer类型 1. 代表的是Thrift开发中的服务器。 2. 功能服务的开启serve() 服务的关闭stop() 3. 阻塞 非阻塞 有没有线程池 Reactor模式TSimpleServer 阻塞 单线程的服务器 没有实战价值只是用于测试TThreadPoolServer: 阻塞 线程池的服务器 TNonBlockingServer: 非阻塞单线程的服务器 TThreadSelectorServer: 实现了主从版的Reactor(类似Netty)分析TSimpleServer 目的1. 了解Thrift相关类型的作用源码的分析2. 核实SimpleServer是一个阻塞的 单线程的服务器TThreadPoolServer 阻塞引入了线程池 1. 如果使用一定注意 默认的线程池 最大值 Integer.Max显然不成 需要maxWorkerThreads进行设置。 2. 不能够让我们的线程复用因为没有selector底层实现思路 把具体调用的Socket分配 WorkerProcess进行操作而WorkerProcess从线程池中获得 线程资源。TNonblockingServer 底层连接 必须使用 TFreameTransport ,TCompactProtocol 非阻塞 单线程Java NIO SocketChannel#configureBlocking ServerSocketChannel#configureBlockingselectorTThreadSelectorServer [主从版的Reactor模式的实现][实战中推荐] client public class TestClient1 {public static void main(String[] args) throws TException {//完成 与服务端 网络连接的连接TTransport tTransport new TSocket(localhost, 9000);TFramedTransport tFramedTransport new TFramedTransport(tTransport);tTransport.open();//创建协议TCompactProtocol tCompactProtocol new TCompactProtocol(tFramedTransport);//创建代理 stub 存根 桩UserService.Client userService new UserService.Client(tCompactProtocol);User user userService.queryUserByNameAndPassword(xiaojr, 9090);System.out.println(user user);} }server public class TestServer1 {public static void main(String[] args) throws TTransportException {TNonblockingServerSocket tNonblockingServerSocket new TNonblockingServerSocket(9000);TFramedTransport.Factory tFramedTransport new TFramedTransport.Factory();TCompactProtocol.Factory factory new TCompactProtocol.Factory();UserService.Processor processor new UserService.Processor(new UserServiceImpl());TThreadedSelectorServer.Args arg new TThreadedSelectorServer.Args(tNonblockingServerSocket);arg.transportFactory(tFramedTransport);arg.protocolFactory(factory);arg.processor(processor);TServer tServer new TThreadedSelectorServer(arg);tServer.serve();} }坑 1. client server thrift版本maven 一致 2. client server通信的transport protocal 保持一致
http://www.pierceye.com/news/491947/

相关文章:

  • 做彩票网站需要多少钱网络营销和传统营销的关系
  • 教育咨询网站模板谷歌外贸网站seo怎么做
  • 怎么制作网站主题郑州推出vip服务
  • 在国外做盗版电影网站吗安卓网站建站系统
  • 网站备案是在哪个部门织梦cms 获得网站流量次数
  • 公司网站放哪些内容ui培训班教程
  • 电子商务网站设计目的及要求百通互联网站建设
  • 网站做端口是什么问题微信最新版本官方版下载安装
  • 活字格能开发企业网站吗本地做网站
  • 建立一个小型网站多少钱微信公众号移动网站开发
  • 网站建设设计师招募建设方案模板范文
  • 做网站需要多少钱一年wordpress网站语言
  • 专门做家具的网站做网站建设的怎么赢利
  • 网站建设教程皆赞湖南岚鸿完成站长网站大全
  • 广州市网站建设 合优系统学做网站
  • 网站建设客户相关问题wordpress主题怎么选
  • 网站数据迁移教程网络营销项目策划书范文
  • 网站 只收录首页网站建设手机端页面模板
  • 光明区建设局网站云南省工程建设造价协会网站
  • 网站建设视频教程 百度云网站制作背景图片
  • 网站域名起名网站建设企业排行榜
  • 高端品牌网站定制设计wordpress多张页面左右滑动
  • git网站开发网名logo设计制作
  • seo在线网站诊断推推蛙seo兼职怎么收费
  • 网站数据分析视频深圳市昊客网络科技有限公司
  • 外贸网站做开关行业的哪个好网站互动优化
  • 西班牙语网站设计哪家好开发一个跑腿app需要多少钱
  • 怎么才能提高网站点击量 免费网站原型图软件
  • wordpress私人建站主题网络公司手机网站
  • 做网站设计比较好的公司wordpress wp_trim_words