Thrift笔记(一)--Hello Demo

本文详细介绍了Thrift作为RPC框架的应用过程,包括IDL文件定义、代码生成器使用、服务端及客户端实现等内容,并提供了完整的Java示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Thrift是一个RPC框架

1. 用IDL定义好实体和服务框架,如实体字段名,类型等。服务名,服务参数,返回值等

2. 通过编译器或者说代码生成器生成RPC框架代码

IDL语法,代码生成器的安装使用可以在官网查

这里参考了一个网上的Demo,忘了出处了

Test.thrift

namespace java com.gxf.thrift

enum RequestType {
   SAY_HELLO,   //问好
   QUERY_TIME,  //询问时间
}

struct Request {
   1: required RequestType type;  // 请求的类型,必选
   2: required string name;       // 发起请求的人的名字,必选
   3: optional i32 age;           // 发起请求的人的年龄,可选
}

exception RequestException {
   1: required i32 code;
   2: optional string reason;
}

// 服务名
service HelloWordService {
   string doAction(1: Request request) throws (1:RequestException qe); // 可能抛出异常。
}

使用代码生成器,生成框架代码:thrift --gen java Test.thrift 

Server端逻辑实现,需要实现XXXService.Iface接口

HelloServiceImpl.java

public class HelloWordServiceImpl implements HelloWordService.Iface {

    // 实现这个方法完成具体的逻辑。
    public String doAction(Request request)
            throws RequestException, org.apache.thrift.TException {
        System.out.println("Get request: " + request);
        if (StringUtils.isBlank(request.getName()) || request.getType() == null) {
            throw new com.gxf.thrift.RequestException();
        }
        String result = "Hello, " + request.getName();
        if (request.getType() == com.gxf.thrift.RequestType.SAY_HELLO) {
            result += ", Welcome!";
        } else {
            result += ", Now is " + new Date().toLocaleString();
        }
        return result;

    }
}

Server端启动代码HelloServer.java

import org.apache.thrift.TProcessor;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TThreadPoolServer;
import org.apache.thrift.transport.TServerSocket;

import java.net.ServerSocket;

public class HelloWordServer {

    public static void main(String[] args) throws Exception {
        ServerSocket socket = new ServerSocket(7912);
        TServerSocket serverTransport = new TServerSocket(socket);
        TBinaryProtocol.Factory proFactory = new TBinaryProtocol.Factory();

        /**
         * 关联处理器与GreetingService服务实现
         */
        TProcessor processor = new HelloWordService.Processor(new HelloWordServiceImpl());

        TThreadPoolServer.Args serverArgs = new TThreadPoolServer.Args(serverTransport);
        serverArgs.processor(processor);
        serverArgs.protocolFactory(proFactory);
        TServer server = new TThreadPoolServer(serverArgs);
        System.out.println("Start server on port 7912...");

        server.serve();
    }

}

客户端代码

HelloWorldClient.java

import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;

public class HelloWordClient {
    public static void main(String[] args) throws Exception {
        TTransport transport = new TSocket("127.0.0.1", 7912);
        TProtocol protocol = new TBinaryProtocol(transport);

        // 创建client
        com.gxf.thrift.HelloWordService.Client client = new com.gxf.thrift.HelloWordService.Client(protocol);

        transport.open();  // 建立连接

        // 第一种请求类型
        com.gxf.thrift.Request request = new com.gxf.thrift.Request()
                .setType(com.gxf.thrift.RequestType.SAY_HELLO).setName("guanxiangfei").setAge(24);
        System.out.println(client.doAction(request));

        // 第二种请求类型
        request.setType(com.gxf.thrift.RequestType.QUERY_TIME).setName("guanxiangfei");
        System.out.println(client.doAction(request));

        transport.close();  // 请求结束,断开连接
    }

}

 

客户端定义好请求实体,通过RPC请求服务

总结:

1. Thrift不仅仅提供了RPC,也提供了序列化反序列化框架

2. 序列化框架有多种序列化方式可以选择,二进制,json等

3. RPC传输方式有Socket, SockectChannel, File等

 

转载于:https://www.cnblogs.com/luckygxf/p/9216290.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值