Thrift简介、环境搭建以及简单的Dome

入职美团了,用了N年的Windows换成mac. 有些不一样的技术也要学一下,美团这面用的RPC框架为Thrift, 以前用的RPC都是dubbo、springboot.

这篇文章主要是介绍一下thrift、 搭建一下mac下的thrift环境, 以及一个最简单的thrift dome.

thrift 简介
thrift是Facebook开发的一种跨语言、可伸缩的PRC框架。 现在已经开源并加入Apahce项目。
和dubbo相比,dubbo是一个综合的SOA解决方案,而thrift仅仅是一个RPC调用框架, thrift的开发难度高于dubbo, 但是性能上也优于dubbo. 且thrift是跨语言的,可以支持目前基本所有的主流语言, 而dubbo 主要的应用场景还是java。

thrift安装

brew install thrift

thrift helloworld

安装thrift并不是一个RPC调用的环境,而是一个工具,用于生产PRC接口代码。

首先定义个一个接口文件: helloworld.thrift

namespace java service.dome
service HelloWorldInterface{
   string sayHello(1:string param)
}

执行命令:

thrift  -gen java helloworld.thrift

不报错的情况下会生成一个文件夹. gen-java/service/dome
里面会有一个接口文件HelloWorldInterface.java. 这个就是我们需要的java接口文件。

新建一个maven工程,引入jar包

 <dependency>
    <groupId>org.apache.thrift</groupId>
     <artifactId>libthrift</artifactId>
     <version>0.12.0</version>
 </dependency>
 <dependency>
     <groupId>org.slf4j</groupId>
     <artifactId>slf4j-log4j12</artifactId>
     <version>1.7.5</version>
 </dependency>

其中注意的是 org.apache.thrift 的版本号要和你安装的thrift的版本号一致。

thrift -version

新建包service.dome, 拷贝HelloWorldInterface.java到该包下,@override可能会报错,全部删除就可以。

新建实现类:HelloServiceImpl.java

package service.demo;
import org.apache.thrift.TException;

public class HelloServiceImpl implements HelloWorldInterface.Iface {
    public String sayHello(String para) throws TException {
        return "hello " + para;
    }
}

创建服务端HelloServiceServer.java

package service.demo;
import org.apache.thrift.TProcessor;
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 org.apache.thrift.transport.TTransportException;


public class HelloServiceServer {

    public static void main(String[] args) {
        try {
            System.out.println("服务端开启....");
            TProcessor tprocessor = new HelloWorldInterface.Processor<HelloWorldInterface.Iface>(new HelloServiceImpl());
            // 简单的单线程服务模型
            TServerSocket serverTransport = new TServerSocket(9898);
            TServer.Args tArgs = new TServer.Args(serverTransport);
            tArgs.processor(tprocessor);
            tArgs.protocolFactory(new TBinaryProtocol.Factory());
            TServer server = new TSimpleServer(tArgs);
            server.serve();
        }catch (TTransportException e) {
            e.printStackTrace();
        }
    }
}

创建客户端HelloServiceClient.java

package service.demo;

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

public class HelloServiceClient {

    public static void main(String[] args) {
        System.out.println("客户端启动....");
        TTransport transport = null;
        try {
            transport = new TSocket("localhost", 9898, 30000);
            // 协议要和服务端一致
            TProtocol protocol = new TBinaryProtocol(transport);
            HelloWorldInterface.Client client = new HelloWorldInterface.Client(protocol);
            transport.open();
            String result = client.sayHello("world");
            System.out.println(result);
        } catch (TTransportException e) {
            e.printStackTrace();
        } catch (TException e) {
            e.printStackTrace();
        } finally {
            if (null != transport) {
                transport.close();
            }
        }
    }
}

启动服务端, 然后启动客户端,会输出 hello world。 至此全部完成。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

专注网赚的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值