zoukankan      html  css  js  c++  java
  • thrift简介

    简介

    thrift是由facebook开发的一个跨平台,跨语言RPC框架。于2007年贡献给apache基金会。在HBase中提供了跨平台的服务调用。本文以一个简单的例子来看下thrift在java中的使用,使用的是thrift-0.10.0。

    案例

    首先需要下载thrift的编译器
    写一个thrift的服务定义文件,Calculator.thrift:

    service Calculator{
       i32 add(1:i32 num1, 2:i32 num2),
    }
    

    上面只是一个Calculator服务包含add一个方法。
    使用前面下载的thrift编译器进行编译

    thrift-0.10.0.exe --gen java Calculator.thrift
    

    之后就会生成一个java源码文件,将其放入项目,并添加Thrift需要的java依赖

        compile group: 'org.apache.thrift', name: 'libthrift', version: '0.10.0'
    

    接下来需要定义对应的服务器,客户端和服务实现

    //服务器
    public class JavaServer {
        public static CalculatorHandler handler;
        public static Calculator.Processor processor;
    	
        public static void main(String [] args) {
            try {
                handler = new CalculatorHandler();
                processor = new Calculator.Processor(handler);
    
                Runnable simple = new Runnable() {
                    public void run() {
                        simple(processor);
                    }
                };
    			new Thread(simple).start();
    			
                /* 安全连接
                Runnable secure = new Runnable() {
                    public void run() {
                        secure(processor);
                    }
                };
    			new Thread(secure).start();
    			*/
    
            } catch (Exception x) {
                x.printStackTrace();
            }
        }
    
        public static void simple(Calculator.Processor processor) {
            try {
                TServerTransport serverTransport = new TServerSocket(9090);
                TServer server = new TSimpleServer(new Args(serverTransport).processor(processor));
    
                // 需要多线程时使用下一行代码
                // TServer server = new TThreadPoolServer(new TThreadPoolServer.Args(serverTransport).processor(processor));
    
                System.out.println("Starting the simple server...");
                server.serve();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public static void secure(Calculator.Processor processor) {
            try {
                TSSLTransportParameters params = new TSSLTransportParameters();
                params.setKeyStore("../../lib/java/test/.keystore", "thrift", null, null);
    
                TServerTransport serverTransport = TSSLTransportFactory.getServerSocket(9091, 0, null, params);
                TServer server = new TSimpleServer(new Args(serverTransport).processor(processor));
    
                // 需要多线程时使用下一行代码
                // TServer server = new TThreadPoolServer(new TThreadPoolServer.Args(serverTransport).processor(processor));
    
                System.out.println("Starting the secure server...");
                server.serve();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    //客户端
    public class JavaClient {
        public static void main(String [] args) {
    
    
            try {
                TTransport transport;
                transport = new TSocket("localhost", 9090);
                transport.open();
                /* ssl transport
                    TSSLTransportParameters params = new TSSLTransportParameters();
                    params.setTrustStore("../../lib/java/test/.truststore", "thrift", "SunX509", "JKS");
                    transport = TSSLTransportFactory.getClientSocket("localhost", 9091, 0, params);
                */
    
                TProtocol protocol = new  TBinaryProtocol(transport);
                Calculator.Client client = new Calculator.Client(protocol);
    
                perform(client);
    
                transport.close();
            } catch (TException x) {
                x.printStackTrace();
            }
        }
    
        private static void perform(Calculator.Client client) throws TException
        {
    		//调用add方法
            int sum = client.add(1,1);
            System.out.println("1+1=" + sum);
        }
    }
    
    //服务实现
    public class CalculatorHandler implements Calculator.Iface {
        public int add(int n1, int n2) {
            System.out.println("add(" + n1 + "," + n2 + ")");
            return n1 + n2;
        }
    }
    

    运行服务端,服务端就会运行,之后运行客户端,然后就可以看到输出结果。

  • 相关阅读:
    PostgreSQL初识,编译安装
    关于iframe的父页面调取子页面里的事件(父往子里传)
    织梦常用代码
    获取月份的最后一天是几号
    获取今天、昨天、一周前的日期
    时分秒倒计时的js实现
    CSS初始化代码
    正则表达式
    utils.js文件;一些常用方法的备份
    js replace替换一段文本中所有的相同字符
  • 原文地址:https://www.cnblogs.com/resentment/p/6978258.html
Copyright © 2011-2022 走看看