国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Thrift RPC使用入門

junfeng777 / 1359人閱讀

摘要:使用入門目前項(xiàng)目使用來作為服務(wù)之間調(diào)用的底層框架,組內(nèi)人員說可以嘗試使用替換他,性能更出色,且使用更方便。所以找了一些資料,為做一個(gè)入門。客戶端客戶端引入接口,使用生成代理,來訪問遠(yuǎn)程服務(wù)對(duì)象。

thrift使用入門

目前項(xiàng)目使用hessian來作為服務(wù)之間RPC調(diào)用的底層框架,組內(nèi)人員說可以嘗試使用thrift替換他,thrift性能更出色,且使用更方便。所以找了一些資料,為thrift做一個(gè)入門。

服務(wù)描述

thrift的服務(wù)描述使用IDL(服務(wù)描述語(yǔ)言),然后提供一個(gè)代碼生成工具,將之轉(zhuǎn)化成不同語(yǔ)言的源代碼文件,服務(wù)端實(shí)現(xiàn)該接口,客戶端通過該接口進(jìn)行服務(wù)調(diào)用。

樣例

接口描述語(yǔ)言
thrift自己定義了接口描述語(yǔ)言,如下,更多的參考 Thrift IDL,或者這篇文章

namespace java com.tongyin.thrift.demo
service HelloWorldServcie{
    string sayHello(1:string username)
}

使用官方提供的代碼生成工具
首先官方去下載代碼生成工具(提供了多個(gè)語(yǔ)言的版本),然后運(yùn)行

thrift -r --gen java demo.thrift

下面是生成的java版本的java接口文件,沒有貼完,給了個(gè)大概

package com.szp.mvp.thrift.demo1;

@SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.10.0)", date = "2017-09-26")
public class HelloWorldServcie {
  public interface Iface {
    public String sayHello(String username) throws org.apache.thrift.TException;
  }

服務(wù)端
服務(wù)器端要實(shí)現(xiàn)接口對(duì)應(yīng)的方法

//HelloWorldImpl.java
public class HelloWorldImpl implements HelloWorldServcie.Iface {
    public String sayHello(String username)throws TException{
        System.out.println("server:" + username);
        return "Hi, "+ username;
    }
}

接口實(shí)現(xiàn)了,需要將該實(shí)現(xiàn)暴露出去,這里又涉及了很多Thrift的類,監(jiān)聽端口.這里需要研究下如何通過一個(gè)端口暴率多個(gè)服務(wù)類,不然對(duì)端口資源太浪費(fèi)

    public class HelloServerDemo {
        public static final int SERVER_PORT=7911;
        public void startServer(){
            try{
                System.out.println("Thrift TThreadPoolServer start...");
                TProcessor tprocessor = new HelloWorldServcie.Processor(new HelloWorldImpl());
                TServerSocket serverTransport = new TServerSocket(SERVER_PORT);
                TThreadPoolServer.Args ttpsArgs = new TThreadPoolServer.Args(serverTransport);
                ttpsArgs.processor(tprocessor);
                ttpsArgs.protocolFactory(new TBinaryProtocol.Factory());
                TServer server = new TThreadPoolServer(ttpsArgs);
                server.serve();
            }catch (Exception e){
                System.out.println("Server start error!!!");
                e.printStackTrace();
            }
    
        }
        public static void main(String[] args){
            HelloServerDemo server = new HelloServerDemo();
            server.startServer();
        }
    }

客戶端
客戶端引入接口,使用thrift生成代理,來訪問遠(yuǎn)程服務(wù)對(duì)象。

    public class HelloClientDemo {
        public static final String SERVER_IP="127.0.0.1";
        public static final int SERVER_PORT=7911;
        public static final int TIMEOUT=30000;
    
        public  void startClient(String userName){
            TTransport transport = null;
            try{
                transport = new TSocket(SERVER_IP,SERVER_PORT,TIMEOUT);
                TProtocol protocol = new TBinaryProtocol(transport);
                HelloWorldServcie.Client client = new HelloWorldServcie.Client(protocol);
                transport.open();;
                String result = client.sayHello(userName);
                System.out.println("Thrify client result = " + result);
            }catch(TTransportException e){
                e.printStackTrace();
            }catch(TException e1){
                e1.printStackTrace();
            }finally{
                if(null !=transport){
                    transport.close();
                }
            }
    
    
        }
        public static void main(String[] args){
            HelloClientDemo client = new HelloClientDemo();
            client.startClient("Linda");
        }
    }

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/67718.html

相關(guān)文章

  • 后端必備——數(shù)據(jù)通信知識(shí)(RPC、消息隊(duì)列)一站式總結(jié)

    摘要:具體可以參考消息隊(duì)列之具體可以參考實(shí)戰(zhàn)之快速入門十分鐘入門阿里中間件團(tuán)隊(duì)博客是一個(gè)分布式的可分區(qū)的可復(fù)制的基于發(fā)布訂閱的消息系統(tǒng)主要用于大數(shù)據(jù)領(lǐng)域當(dāng)然在分布式系統(tǒng)中也有應(yīng)用。目前市面上流行的消息隊(duì)列就是阿里借鑒的原理用開發(fā)而得。 我自己總結(jié)的Java學(xué)習(xí)的系統(tǒng)知識(shí)點(diǎn)以及面試問題,目前已經(jīng)開源,會(huì)一直完善下去,歡迎建議和指導(dǎo)歡迎Star: https://github.com/Snail...

    Kahn 評(píng)論0 收藏0
  • Spring Boot 中使用 thrift 入門

    摘要:簡(jiǎn)介是什么是一個(gè)軟件框架,用來進(jìn)行可擴(kuò)展且跨語(yǔ)言的服務(wù)的開發(fā)。的功能允許定義一個(gè)簡(jiǎn)單的定義文件中的數(shù)據(jù)類型和服務(wù)接口,以作為輸入文件,編譯器生成代碼用來方便地生成客戶端和服務(wù)器通信的無縫跨編程語(yǔ)言。 Thrift 簡(jiǎn)介 Thrift 是什么 Thrift是一個(gè)軟件框架,用來進(jìn)行可擴(kuò)展且跨語(yǔ)言的服務(wù)的開發(fā)。它結(jié)合了功能強(qiáng)大的軟件堆棧和代碼生成引擎,以構(gòu)建在 C++, Java, Go,P...

    cnio 評(píng)論0 收藏0
  • RPC框架實(shí)踐之:Apache Thrift

    摘要:在文章微服務(wù)調(diào)用鏈追蹤中心搭建一文中模擬出來的調(diào)用鏈就是一個(gè)遠(yuǎn)程調(diào)用的例子,只不過這篇文章里是通過這種同步調(diào)用方式,利用的是協(xié)議在應(yīng)用層完成的,這種方法雖然奏效,但有時(shí)效率并不高。 showImg(https://segmentfault.com/img/remote/1460000014858219); 一、概述 RPC(Remote Procedure Call)即 遠(yuǎn)程過程調(diào)...

    Gilbertat 評(píng)論0 收藏0
  • RPC框架實(shí)踐之:Apache Thrift

    摘要:在文章微服務(wù)調(diào)用鏈追蹤中心搭建一文中模擬出來的調(diào)用鏈就是一個(gè)遠(yuǎn)程調(diào)用的例子,只不過這篇文章里是通過這種同步調(diào)用方式,利用的是協(xié)議在應(yīng)用層完成的,這種方法雖然奏效,但有時(shí)效率并不高。 showImg(https://segmentfault.com/img/remote/1460000014858219); 一、概述 RPC(Remote Procedure Call)即 遠(yuǎn)程過程調(diào)...

    keithxiaoy 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<