Apache Thrift之java入门例子

Apache Thrift 是 Facebook 实现的一种高效的、支持多种编程语言的远程服务调用的框架


一:

首先加入thrift的java的依赖

<dependency>
	<groupId>org.apache.thrift</groupId>
	<artifactId>libthrift</artifactId>
	<version>0.9.3</version>
</dependency>

二:

本文首先介绍一个简单的 Thrift 实现实例,使读者能够快速直观地了解什么是 Thrift 以及如何使用 Thrift 构建服务。
创建一个简单的服务Calculator。首先根据 Thrift 的语法规范编写脚本文件 Calculator.thrift,代码如下:

namespace java com.pp.calc
service Calculator{
	i32 add(1:i32 num1, 2:i32 num2)
	i64 multi(1:i32 num1, 2:i32 num2)
}

然后执行thrift命令,生成java代码  

thrift -r -gen java Calculator.thrift

这样,就会在当前目录下创建了一个gen-java目录,目录里面是java代码,把目录里面的东西放到项目的src目录中

编写Calculator.Iface(thrift自动生成的,这里就不贴出来了)接口的实现类

package com.pp.calc.impl;

import org.apache.thrift.TException;

import com.pp.calc.Calculator;

public class CalculatorImpl implements Calculator.Iface
{
	public int add(int num1, int num2) throws TException
	{
		return num1 + num2;
	}

	public long multi(int num1, int num2) throws TException
	{
		return Long.valueOf(num1 * num2);
	}
}

三:编写服务端

package com.pp.server;

import org.apache.thrift.TMultiplexedProcessor;
import org.apache.thrift.protocol.TCompactProtocol;
import org.apache.thrift.protocol.TProtocolFactory;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TThreadPoolServer;
import org.apache.thrift.transport.TServerSocket;

import com.pp.calc.Calculator;
import com.pp.calc.impl.CalculatorImpl;

public class Server
{
	public static final int PORT = 9988;
	
	public static void main(String[] args)throws Exception
	{
		TServerSocket serverSocket = new TServerSocket(PORT); 
		
		TProtocolFactory protocolFactory = new TCompactProtocol.Factory();  
		
		TMultiplexedProcessor mp = new TMultiplexedProcessor();
		mp.registerProcessor("Calculator", new Calculator.Processor<>(new CalculatorImpl()));
		
		final TServer server = new TThreadPoolServer(new TThreadPoolServer.Args(serverSocket).protocolFactory(protocolFactory).processor(mp));  
		
		new Thread(() -> {
			//这个方法会阻塞线程
			server.serve();
		}).start();
		
		System.out.println("Start server on port " + PORT + " ...");  
	}
}

四:编写客户端

package com.pp.client;

import org.apache.thrift.protocol.TCompactProtocol;
import org.apache.thrift.protocol.TMultiplexedProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;

import com.pp.calc.Calculator;

public class Client 
{
    public static void main( String[] args)throws Exception
    {
    	TTransport transport = new TSocket("127.0.0.1", 9988);  
        transport.open();  
        
        TProtocol protocol = new TCompactProtocol(transport);  
        
        TMultiplexedProtocol mp = new TMultiplexedProtocol(protocol, "Calculator");
        
        Calculator.Client calc = new Calculator.Client(mp);
        
        System.out.println(calc.add(1, 222));
        System.out.println(calc.multi(22, 33));
        
        transport.close();
    }
}



  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值