thrift的安装和Java编写thrift
来源:互联网 发布:张纪中 知乎 编辑:程序博客网 时间:2024/05/16 07:30
一、Thrift的安装(MAC)
1、安装Homebrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
注意
关于最新版mac(OSX High Sierra 10.13 )/usr/local权限问题,请看如何关掉SIP。
- 安装好后运行:brew update
2、安装thrift:
brew install thrift
3、验证安装: thrift -version
二、编写Thrift文件并编译:
namespace java com.example.serverstruct User{ 1: required i16 uid = -1; 2: required string name; 3: required i16 age; 4: required double height; 5: optional string address; 6: optional list<string> friends;}service UserManager{ void addUser(1: User user); User getUser(1: i16 uid); void removeUser(1: i16 uid);}
编译Thrift文件: thrift -gen java UserManager.thrift
产生的Java文件如下:User.java就是我们定义的User结构体产生的JavaBean,UserManager.java就是我们定义的服务产生的接口代码。
三、Java代码实现
1、导入maven依赖
<dependencies> <dependency> <groupId>org.apache.thrift</groupId> <artifactId>libthrift</artifactId> <version>0.10.0</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-nop</artifactId> <version>1.7.25</version> </dependency> </dependencies>
注:
如果发生错误:
Failed to load class "org.slf4j.impl.StaticLoggerBinder".
请查看是否引入slf4j-nop依赖
2、服务端代码
package com.example.test;import org.apache.thrift.TProcessor;import org.apache.thrift.protocol.TBinaryProtocol;import org.apache.thrift.server.TNonblockingServer;import org.apache.thrift.server.TServer;import org.apache.thrift.transport.TFastFramedTransport;import org.apache.thrift.transport.TNonblockingServerSocket;import org.apache.thrift.transport.TTransportException;import server.UserManager;import server.UserManagerImpl;public class Server{ private static final Logger logger = LoggerFactory.getLogger(Server.class); public static void main(String args[]) { UserManagerImpl userManager = new UserManagerImpl(16);//创建一个Server端的service对象 try { TNonblockingServerSocket serverSocket = new TNonblockingServerSocket(1234);//创建socket TProcessor processor = new UserManager.Processor<UserManager.Iface>(userManager);//创建Processor TNonblockingServer.Args tArgs = new TNonblockingServer.Args(serverSocket);//创建Server端参数对象 tArgs.processor(processor);//添加Processor tArgs.transportFactory(new TFastFramedTransport.Factory());//添加传输类型,这里是按Frame读取数据 tArgs.protocolFactory(new TBinaryProtocol.Factory());//添加协议类型(不是网络协议),表示以何种方式读取和发送数据 TServer server = new TNonblockingServer(tArgs);//创建一个服务端(非阻塞服务端) logger.info("Server listening on port 1234 ..."); server.serve();//启动服务端 }catch(TTransportException e) { e.printStackTrace(); } }}
3、客户端代码
package com.example.test;import org.apache.thrift.TException;import org.apache.thrift.protocol.TBinaryProtocol;import org.apache.thrift.protocol.TProtocol;import org.apache.thrift.transport.TFramedTransport;import org.apache.thrift.transport.TSocket;import org.apache.thrift.transport.TTransport;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import server.User;import server.UserManager;import java.util.ArrayList;import java.util.List;public class Client{ private static Logger logger = LoggerFactory.getLogger(Client.class); public static void main(String args[]) throws TException { TSocket socket = new TSocket("localhost", 1234, 500);//创建socket TTransport transport = new TFatstFramedTransport(socket);//创建transport,与服务端保持一致 TProtocol protocol = new TBinaryProtocol(transport);//创建数据解析协议,与服务端保持一致 UserManager.Client client = new UserManager.Client(protocol);//创建客户端 socket.open();//打开连接 //测试代码 List<String> friends = new ArrayList<String>(); friends.add("Tom"); friends.add("Alice"); client.addUser(new User((short)1,"Jack", (short)12, 123.1, "BeiJing", friends)); User user = client.getUser((short)1); logger.info(user.toString()); }}
4、实现类
package com.example.thriftdemo.server;import org.apache.thrift.TException;import java.util.HashMap;import java.util.Map;public class UserManagerImpl implements UserManager.Iface{ private Map<Short, User> userMap; public UserManagerImpl(int size) { if(size < 0) size = 16; userMap = new HashMap<Short, User>(size); } @Override public void addUser(User user) throws TException { userMap.put(user.getUid(), user); } @Override public User getUser(short uid) throws TException { return userMap.get(uid); } @Override public void removeUser(short uid) throws TException { userMap.remove(uid); }}
阅读全文
0 0
- thrift的安装和Java编写thrift
- thrift的安装和使用
- thrift的安装以及php客户端编写
- Thrift安装和试用
- Thrift的安装
- Thrift的安装和简单使用
- Thrift的安装和简单使用
- ubuntu下thrift的安装和运行
- Thrift的安装和简单示例
- Thrift的安装和简单示例
- Thrift的安装和简单示例
- thrift的安装和部分问题解决
- Apache Thrift入门(安装、测试与java程序编写)
- Thrift安装与服务器、客户端的编写运行演示
- Thrift安装以及测试【java】
- thrift安装
- thrift安装
- thrift安装
- 【ActiveMQ】ActiveMQ在CentOS的搭建与使用
- OpenLayers的API讲解(二)
- BZOJ1072(SCOI2007)[排列perm]--状压DP
- maven学习笔记
- C# Winform月考学生成绩管理系统
- thrift的安装和Java编写thrift
- Android分发机制
- 冒泡排序的几种实现
- Opnecv3 阈值函数
- cf-Chtholly's request(水)
- 第一期任务
- php 学习笔记
- 大数据时代带来的伦理问题
- Ubuntu14.04安装wineqq国际版