thrift 学习入门笔记

参考连贯 :Thrift入门

装置thrift命令:

brew install thrift

引入maven依赖

        <!-- https://mvnrepository.com/artifact/org.apache.thrift/libthrift -->        <dependency>            <groupId>org.apache.thrift</groupId>            <artifactId>libthrift</artifactId>            <version>0.16.0</version>        </dependency>

编写thrift文件

namespace java thrift.generatedtypedef i16 shorttypedef i32 inttypedef i64 longtypedef string Stringstruct Person{    1:optional String username,    2:optional int age,    3:optional bool married}exception DataException{    1:optional String message,    2:optional String callStack,    3:optional String code}service PersonService{    Person getPersonByName(1:required String name) throws (1:DataException e);    void savePerson(1:required Person p) throws(1:DataException e);}

生成代码

thrift --gen java ./resources/data.thrift <!--而后会在我的项目中生成的 gen-java 文件夹下生成java文件 -->├── gen-java│   └── thrift│       └── generated│           ├── DataException.java│           ├── Person.java│           └── PersonService.java

新建 PersonServiceImpl 实现 PersonService 接口。

public class PersonServiceImpl implements PersonService.Iface {    @Override    public Person getPersonByName(String name) throws DataException, TException {        System.out.println("----->> getPersonByName <<-------");        Person p1 = new Person();        p1.setAge(23);        p1.setMarried(Boolean.TRUE);        p1.setUsername("zhang san");        return p1;    }    @Override    public void savePerson(Person p) throws DataException, TException {        System.out.println("---- savePerson -----");        System.out.println(p.getAge());        System.out.println(p.getUsername());        System.out.println(p.isMarried());    }}

编写服务端

import com.demo.thrift.PersonService;import com.demo.thrift.PersonServiceImpl;import org.apache.thrift.TProcessorFactory;import org.apache.thrift.protocol.TCompactProtocol;import org.apache.thrift.server.THsHaServer;import org.apache.thrift.transport.TNonblockingServerSocket;import org.apache.thrift.transport.layered.TFramedTransport;public class MyServer {    public static void main(String[] args) throws Exception{        TNonblockingServerSocket socket = new TNonblockingServerSocket(8899);        THsHaServer.Args args1 = new THsHaServer.Args(socket).minWorkerThreads(2).maxWorkerThreads(4);        PersonService.Processor<PersonServiceImpl> processor = new PersonService.Processor<>(new PersonServiceImpl());        args1.protocolFactory(new TCompactProtocol.Factory());        args1.transportFactory(new TFramedTransport.Factory());        args1.processorFactory(new TProcessorFactory(processor));        THsHaServer tHsHaServer = new THsHaServer(args1);                System.out.println("服务端已启动  :8899");        tHsHaServer.serve();    }}

编写客户端

import com.demo.thrift.Person;import com.demo.thrift.PersonService;import org.apache.thrift.protocol.TCompactProtocol;import org.apache.thrift.protocol.TProtocol;import org.apache.thrift.transport.TSocket;import org.apache.thrift.transport.TTransport;import org.apache.thrift.transport.TTransportException;import org.apache.thrift.transport.layered.TFramedTransport;public class MyClient {    public static void main(String[] args) throws TTransportException {        TTransport transport = new TFramedTransport(new TSocket("localhost", 8899), 600);        TProtocol protocol = new TCompactProtocol(transport);        PersonService.Client client = new PersonService.Client(protocol);        try {            transport.open();            Person zhang_san = client.getPersonByName("zhang san");            System.out.println(zhang_san.getAge());            System.out.println(zhang_san.getUsername());            System.out.println(zhang_san.isMarried());            Person p1 = new Person();            p1.setAge(21);            p1.setMarried(Boolean.FALSE);            p1.setUsername("lisi");            client.savePerson(p1);        }catch (Exception e){            e.printStackTrace();        }finally {            transport.close();        }    }}

over