分布式服务框架学习笔记7.2 Thrift 异步调用

分布式服务框架学习笔记7.2 Thrift 异步调用

RPC调用时,高吞吐量的时候使用异步模式可以优化系统性能。
使用异步模式的时候,thrift文件的编写并没有大的差别,主要差别在函数定义和调用上。

一、服务端

import org.apache.thrift.TProcessor;
import org.apache.thrift.protocol.TCompactProtocol;
import org.apache.thrift.server.TNonblockingServer;
import org.apache.thrift.server.TServer;
import org.apache.thrift.transport.TFramedTransport;
import org.apache.thrift.transport.TNonblockingServerSocket;
import org.apache.thrift.transport.TTransportException;

import com.whr.rpc.service.MessageForwardsService;

public class MessageForwardsServer {

	public static MessageForwardsRpcInterface handler;

	@SuppressWarnings("rawtypes")
	public static MessageForwardsService.Processor processor;

	public static void start() {		
		try {
			System.out.println("async TNonblockingServer start ....");
 
			final TProcessor tprocessor = new MessageForwardsService.Processor<MessageForwardsService.Iface>(
					new MessageForwardsRpcInterface());
 

			Runnable simple = new Runnable() {
				public void run() {
					simple(tprocessor);
				}
			};
	
			new Thread(simple).start();
		} catch (Exception e) {
			System.out.println("Server start error!!!");
			e.printStackTrace();
		}
            
	}
	
//	/**
//	 * RPC 服务端
//	 * @param processor
//	 */
	public static void simple(TProcessor tprocessor)  {

		TNonblockingServerSocket tnbSocketTransport;
		try {
			tnbSocketTransport = new TNonblockingServerSocket(9090);
			
			TNonblockingServer.Args tnbArgs = new TNonblockingServer.Args(
					tnbSocketTransport);
			tnbArgs.processor(tprocessor);
			tnbArgs.transportFactory(new TFramedTransport.Factory());
			tnbArgs.protocolFactory(new TCompactProtocol.Factory());
	
			// 使用非阻塞式IO,服务端和客户端需要指定TFramedTransport数据传输的方式
			TServer server = new TNonblockingServer(tnbArgs);
			server.serve();
		} catch (TTransportException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

二、客户端

public class ControlCommand 
{
    public static void main( String[] args )
    {
    	test("192.168.1.3");
    }
    public static void test(String ip){
    	TTransport transport = null;
		try {
			transport = new TFramedTransport(new TSocket(ip,9090, 3000));
			// 协议要和服务端一致
			TProtocol protocol = new TCompactProtocol(transport);
			MessageForwardsService.Client client = new MessageForwardsService.Client(
					protocol);
			transport.open();
			String result = client.getAllChannels();
			System.out.println("Thrify client result =: " + result);
			transport.close();
		} catch (TTransportException e) {
			e.printStackTrace();
		} catch (TException e) {
			e.printStackTrace();
		} finally {
			if (null != transport) {
				transport.close();
			}
		}
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

编程圈子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值