网站版面布局结构图,深圳网站公司招聘,网站开发产品描述,南京的电商网站设计#x1f4cb; 个人简介
#x1f496; 作者简介#xff1a;大家好#xff0c;我是阿牛#xff0c;全栈领域优质创作者。#x1f61c;#x1f4dd; 个人主页#xff1a;馆主阿牛#x1f525;#x1f389; 支持我#xff1a;点赞#x1f44d;收藏⭐️留言#x1f4d… 个人简介 作者简介大家好我是阿牛全栈领域优质创作者。 个人主页馆主阿牛 支持我点赞收藏⭐️留言格言迄今所有人生都大写着失败但不妨碍我继续向前 目录 个人简介 前言IDL代码代码服务端与业务逻辑客户端 结语 前言
前面我们在Thrift入门里面实现了Thrift实现RPC调用的简单案例而Thrift最大的优势就是可以实现跨语言RPC调用尤其在一些大厂微服务各模块之间使用不同的语言是很常见的有用java的有go的有python的因此选用Thrift实现RPC远程调用是很不错的选择本节将在 RPC 框架之Thrift入门一 的案例基础上使用java作为服务端用python作为客户端实现不同语言之间的RPC调用
IDL代码
namespace java com.aniu.service
namespace py thrift_demostruct Person { // 定义 Person 结构体1: required string name; // 姓名必选字段2: required i32 age; // 年龄必选字段3: optional string sex; // 性别可选字段
}service PersonService { // 定义 PersonService 服务接口Person getByName(1: string name); // 根据姓名获取 Person 信息bool save(1: Person person); // 保存 Person 信息
}分别使用以下代码生成java和python的代码
thrift --gen java person.thriftthrift --gen py person.thrift代码
服务端与业务逻辑
服务端代码和业务逻辑就是 RPC 框架之Thrift入门一 的案例里面的
package com.aniu.server;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TSimpleServer;
import org.apache.thrift.transport.TServerSocket;
import com.aniu.service.PersonService;
import com.aniu.service.impl.PersonServiceImpl;
public class Server {public static void main(String[] args) {try{// 创建一个新的 Thrift 服务端套接字监听在端口 9000 上TServerSocket socket new TServerSocket(9000);// 创建一个 PersonService 的 Processor。Processor 是 Thrift 中用于处理请求的接口它需要一个实现了 PersonService 接口的对象作为参数。PersonService.ProcessorPersonServiceImpl processor new PersonService.Processor(new PersonServiceImpl());// 创建一个二进制协议工厂对象。Thrift 支持多种协议如 TBinaryProtocol、TCompactProtocol、TJSONProtocol 等这里选择的是二进制协议。TBinaryProtocol.Factory factory new TBinaryProtocol.Factory();// 创建一个 TSimpleServer 的参数对象 args1并将之前创建的套接字、Processor 和协议工厂设置为其属性。TServer.Args args1 new TSimpleServer.Args(socket);args1.processor(processor);args1.protocolFactory(factory);// 使用之前设置好的参数创建 TSimpleServer 对象TSimpleServer tSimpleServer new TSimpleServer(args1);// 开始执行 TSimpleServer开始监听并处理客户端的请求。tSimpleServer.serve();}catch (Exception e){System.out.println(e);}}
}package com.aniu.service.impl;import com.aniu.service.Person;
import com.aniu.service.PersonService;
import org.apache.thrift.TException;public class PersonServiceImpl implements PersonService.Iface {Overridepublic Person getByName(String name) throws TException {return new Person(name,18);}Overridepublic boolean save(Person person) throws TException {return false;}
}客户端
接下来我们就用python编写Thrift客户端来实现RPC调用 java服务端 首先安装thrift包
pip install thrift将生成的python代码拷贝到项目然后编写python客户端
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from thrift_demo import PersonService# 创建Thrift服务端的地址和端口
host localhost
port 9000# 创建Thrift传输层和协议层
t_socket TSocket.TSocket(host, port)
transport TTransport.TBufferedTransport(t_socket)
protocol TBinaryProtocol.TBinaryProtocol(transport)# 创建Thrift客户端
client PersonService.Client(protocol)# 打开Thrift传输层连接
transport.open()# 调用Thrift客户端提供的接口
try:# 调用getName方法person client.getByName(aniu)print(person)except Exception as e:print(Error:, str(e))# 关闭Thrift传输层连接
transport.close()首先启动java服务端然后启动python客户端可以看到调用成功
结语
对于thrift的基本案例就写完了这些案例使用的thrift服务端模型都是TSimpleServer同时只支持一个socket连接用于我们这些小案例测试后续总结springboot整合thrift的代码我们使用其他thrift服务端模型