thrift開發步驟

2021-09-12 06:00:52 字數 2783 閱讀 8301

[三]、基本概念

1.資料型別

結構體型別:

容器型別:

異常型別:

服務型別:

2.服務端編碼基本步驟:

package service.demo;

import org.apache.thrift.tprocessor;

import org.apache.thrift.protocol.tbinaryprotocol;

import org.apache.thrift.protocol.tjsonprotocol;

import org.apache.thrift.server.tthreadedselectorserver;

import org.apache.thrift.transport.tframedtransport;

import org.apache.thrift.transport.tnonblockingserversocket;

import org.apache.thrift.transport.tnonblockingservertransport;

import org.apache.thrift.transport.ttransportexception;

import org.apache.thrift.transport.ttransportfactory;

import service.demo.thrift.hello;

public class helloserviceserver2 catch (ttransportexception e)

}}

3.客戶端編碼基本步驟:

同步**:

// 設定呼叫的服務位址為本地,埠為 7911

ttransport transport = new tsocket("localhost", 7911);

transport = new tframedtransport(transport);

transport.open();

// 設定傳輸協議為

tprotocol protocol = new tjsonprotocol(transport);

hello.client client = new hello.client(protocol);

// 呼叫服務的 hellovoid 方法

client.hellovoid();

//非同步**:

tasyncclientmanager clientmanager = new tasyncclientmanager();

tnonblockingsocket transport = new tnonblockingsocket("localhost",

port, 500000);

tjsonprotocol.factory protocolfactory = new tjsonprotocol.factory();

hello.asyncclient asycnclient = new hello.asyncclient(

protocolfactory, clientmanager, transport);

mycallback callback = new mycallback(wait);

asycnclient.hellostring("libin", callback);

synchronized (wait)

asyncclient.hellostring_call msg = callback.getresult();

system.out.println("***************=== async client msg = " + msg);

4.資料傳輸協議

tips:客戶端和服務端的協議要一致

thrift裡面常見的幾種同步非同步用法

thrift客戶端與伺服器之間同步非同步的方法:

客戶端-伺服器

呼叫型別

同步伺服器

非同步伺服器

同步客戶端

同步呼叫

okok

同步客戶端

非同步呼叫

ok(不保證返回結果)

待確認非同步客戶端

---nook

預設使用的是:同步客戶端,同步呼叫,

同步伺服器

同步客戶端,非同步呼叫 ,同步伺服器: thrift框架保證傳輸到位,但應用不保證一定處理完成

需要注意的問題

1. thrift生成的server端是thread safe的. 但是client端不是thread safe. 所以需要多個thread和server端通訊,則每個thread需要initiate乙個自己的client例項.

2. 如果伺服器採用tnonblockingserver的話,客戶端必須採用tframedtransport。程式鏈結的時候需要thriftnb。

3. 預設tserversocket和tsocket都設定了nodelay為1,使得報文盡快傳送出去,如果客戶端和伺服器間傳輸資料量較大,通過可以設定nodelay為0來開啟nagel演算法,快取一段資料後再進行傳送,減少報文數量。

tsocket預設開啟了linger,並設定linger time為0,這樣close會丟棄socket傳送緩衝區中的資料,並向對端傳送乙個rst報文,close不會被阻塞,立即返回。

tserversocket預設關閉了linger,close不會被阻塞,立即返回。

4. fb303作為handler的基類,裡面預置了一些rpc方法,用於監控,包括系統狀態,請求次數等狀態資訊。

thrift開發問題總結

作為目前最流行的rpc框架,thrift不僅提供了通訊協議,同時提供了網路框架,解脫了程式設計師的生產力。thrift也是阿帕奇hadoop系列的rpc實現工具。本文主要聚焦在實現的thrift系統中,遇到的各種問題。但是thrift在隱藏一些底層細節的同時,也給應用層帶來了一些不確定性,這些不確定...

thrift開發踩坑全紀錄

使用thrift搭建的系統已經穩定執行了一段時間了,該系統是公司的核心流式系統,高峰時qps在40萬。作為目前最流行的rpc框架,thrift不僅提供了通訊協議,同時提供了網路框架,解脫了程式設計師的生產力。thrift也是阿帕奇hadoop系列的rpc實現工具。本文主要聚焦在搭建c 實現的thri...

Thrift總結 四 Thrift實現雙向通訊

前面介紹過 thrift 安裝和使用,介紹了thrift服務的發布和客戶端呼叫,可以檢視我之前的文章 但是,之前介紹的都是單向的客戶端傳送訊息,服務端接收訊息。而客戶端卻得不到伺服器的響應。那如果我們要實現雙向通訊 即 客戶端傳送請求,服務端處理返回,服務端傳送訊息,客戶端處理返回 的功能,該怎麼實...