最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Thrift實(shí)現(xiàn)跨語(yǔ)言RPC的調(diào)用

 更新時(shí)間:2023年10月07日 10:02:19   作者:愛(ài)音斯坦牛  
Thrift最大的優(yōu)勢(shì)就是可以實(shí)現(xiàn)跨語(yǔ)言RPC調(diào)用,尤其在一些大廠,微服務(wù)各模塊之間使用不同的語(yǔ)言是很常見(jiàn)的,本文就將使用java作為服務(wù)端,用python作為客戶端,實(shí)現(xiàn)不同語(yǔ)言之間的RPC調(diào)用,需要的可以參考下

前言

前面我們?cè)赥hrift入門(mén)里面實(shí)現(xiàn)了Thrift實(shí)現(xiàn)RPC調(diào)用的簡(jiǎn)單案例,而Thrift最大的優(yōu)勢(shì)就是可以實(shí)現(xiàn)跨語(yǔ)言RPC調(diào)用,尤其在一些大廠,微服務(wù)各模塊之間使用不同的語(yǔ)言是很常見(jiàn)的,有用java的,有g(shù)o的,有python的,因此,選用Thrift實(shí)現(xiàn)RPC遠(yuǎn)程調(diào)用是很不錯(cuò)的選擇,本節(jié)將在RPC 框架之Thrift入門(mén)(一)的案例基礎(chǔ)上,使用java作為服務(wù)端,用python作為客戶端,實(shí)現(xiàn)不同語(yǔ)言之間的RPC調(diào)用!

IDL代碼

namespace java com.aniu.service
namespace py thrift_demo
struct Person {  // 定義 Person 結(jié)構(gòu)體
    1: required string name;   // 姓名,必選字段
    2: required i32 age;       // 年齡,必選字段
    3: optional string sex;    // 性別,可選字段
}
service PersonService {  // 定義 PersonService 服務(wù)接口
    Person getByName(1: string name);  // 根據(jù)姓名獲取 Person 信息
    bool save(1: Person person);       // 保存 Person 信息
}

分別使用以下代碼生成java和python的代碼

thrift --gen java person.thrift

thrift --gen py person.thrift

代碼

服務(wù)端與業(yè)務(wù)邏輯

服務(wù)端代碼和業(yè)務(wù)邏輯就是RPC 框架之Thrift入門(mén)(一)的案例里面的

package com.aniu.server;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TSimpleServer;
import org.apache.thrift.transport.TServerSocket;
import com.aniu.service.PersonService;
import com.aniu.service.impl.PersonServiceImpl;
public class Server {
    public static void main(String[] args) {
        try{
            // 創(chuàng)建一個(gè)新的 Thrift 服務(wù)端套接字,監(jiān)聽(tīng)在端口 9000 上
            TServerSocket socket = new TServerSocket(9000);
            // 創(chuàng)建一個(gè) PersonService 的 Processor。Processor 是 Thrift 中用于處理請(qǐng)求的接口,它需要一個(gè)實(shí)現(xiàn)了 PersonService 接口的對(duì)象作為參數(shù)。
            PersonService.Processor<PersonServiceImpl> processor = new PersonService.Processor<>(new PersonServiceImpl());
            // 創(chuàng)建一個(gè)二進(jìn)制協(xié)議工廠對(duì)象。Thrift 支持多種協(xié)議,如 TBinaryProtocol、TCompactProtocol、TJSONProtocol 等,這里選擇的是二進(jìn)制協(xié)議。
            TBinaryProtocol.Factory factory = new TBinaryProtocol.Factory();
            // 創(chuàng)建一個(gè) TSimpleServer 的參數(shù)對(duì)象 args1,并將之前創(chuàng)建的套接字、Processor 和協(xié)議工廠設(shè)置為其屬性。
            TServer.Args args1 = new TSimpleServer.Args(socket);
            args1.processor(processor);
            args1.protocolFactory(factory);
            // 使用之前設(shè)置好的參數(shù)創(chuàng)建 TSimpleServer 對(duì)象
            TSimpleServer tSimpleServer = new TSimpleServer(args1);
            // 開(kāi)始執(zhí)行 TSimpleServer,開(kāi)始監(jiān)聽(tīng)并處理客戶端的請(qǐng)求。
            tSimpleServer.serve();
        }catch (Exception e){
            System.out.println(e);
        }
    }
}
package com.aniu.service.impl;
import com.aniu.service.Person;
import com.aniu.service.PersonService;
import org.apache.thrift.TException;
public class PersonServiceImpl implements PersonService.Iface {
    @Override
    public Person getByName(String name) throws TException {
        return new Person(name,18);
    }
    @Override
    public boolean save(Person person) throws TException {
        return false;
    }
}

客戶端

接下來(lái)我們就用python編寫(xiě)Thrift客戶端來(lái)實(shí)現(xiàn)RPC調(diào)用 java服務(wù)端首先安裝thrift包:

pip install thrift

將生成的python代碼拷貝到項(xiàng)目,然后編寫(xiě)python客戶端!

from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from thrift_demo import PersonService
# 創(chuàng)建Thrift服務(wù)端的地址和端口
host = 'localhost'
port = 9000
# 創(chuàng)建Thrift傳輸層和協(xié)議層
t_socket = TSocket.TSocket(host, port)
transport = TTransport.TBufferedTransport(t_socket)
protocol = TBinaryProtocol.TBinaryProtocol(transport)
# 創(chuàng)建Thrift客戶端
client = PersonService.Client(protocol)
# 打開(kāi)Thrift傳輸層連接
transport.open()
# 調(diào)用Thrift客戶端提供的接口
try:
    # 調(diào)用getName方法
    person = client.getByName("aniu")
    print(person)
except Exception as e:
    print('Error:', str(e))
# 關(guān)閉Thrift傳輸層連接
transport.close()

首先啟動(dòng)java服務(wù)端,然后啟動(dòng)python客戶端,可以看到調(diào)用成功!

結(jié)語(yǔ)

對(duì)于thrift的基本案例就寫(xiě)完了,這些案例使用的thrift服務(wù)端模型都是TSimpleServer,同時(shí)只支持一個(gè)socket連接,用于我們這些小案例測(cè)試,后續(xù)總結(jié)springboot整合thrift的代碼,我們使用其他thrift服務(wù)端模型!

到此這篇關(guān)于使用Thrift實(shí)現(xiàn)跨語(yǔ)言RPC的調(diào)用的文章就介紹到這了,更多相關(guān)Thrift跨語(yǔ)言RPC調(diào)用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入淺析Java 抽象類(lèi)和接口

    深入淺析Java 抽象類(lèi)和接口

    這篇文章主要介紹了Java 抽象類(lèi)和接口的相關(guān)知識(shí),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-11-11
  • 淺析Mybatis 在CS程序中的應(yīng)用

    淺析Mybatis 在CS程序中的應(yīng)用

    如果是自己用的Mybatis,不需要考慮對(duì)配置文件加密,如果不是,那就需要考慮加密,這篇文章主要講如何配置CS的Mybatis
    2013-07-07
  • JavaWeb禁止瀏覽器緩存當(dāng)前Web頁(yè)面的方法

    JavaWeb禁止瀏覽器緩存當(dāng)前Web頁(yè)面的方法

    所謂瀏覽器緩存,是指當(dāng)?shù)谝淮卧L問(wèn)網(wǎng)頁(yè)時(shí),瀏覽器會(huì)將這些網(wǎng)頁(yè)緩存到本地,當(dāng)下一次再訪問(wèn)這些被緩存的網(wǎng)頁(yè)時(shí),瀏覽器就會(huì)直接從本地讀取這些網(wǎng)頁(yè)的內(nèi)容,而無(wú)需再?gòu)木W(wǎng)絡(luò)上獲取
    2017-11-11
  • SpringCloud配置客戶端ConfigClient接入服務(wù)端

    SpringCloud配置客戶端ConfigClient接入服務(wù)端

    這篇文章主要為大家介紹了SpringCloud配置客戶端ConfigClient接入服務(wù)端,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • 深入探討Java應(yīng)用性能監(jiān)控與調(diào)優(yōu)的工具鏈構(gòu)建

    深入探討Java應(yīng)用性能監(jiān)控與調(diào)優(yōu)的工具鏈構(gòu)建

    這篇文章主要來(lái)和大家將深入探討Java應(yīng)用性能監(jiān)控與調(diào)優(yōu)的完整工具鏈,從傳統(tǒng)的單機(jī)分析工具JProfiler到現(xiàn)代化的分布式監(jiān)控系統(tǒng)Prometheus,希望能幫助開(kāi)發(fā)者和運(yùn)維人員構(gòu)建全方位的性能監(jiān)控體系
    2025-06-06
  • SpringBoot下載docx文檔方式

    SpringBoot下載docx文檔方式

    這篇文章主要介紹了SpringBoot下載docx文檔方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • Java實(shí)現(xiàn)在線聊天室(層層遞進(jìn))

    Java實(shí)現(xiàn)在線聊天室(層層遞進(jìn))

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)在線聊天室,層層遞進(jìn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • SpringBoot中基于JWT的單token授權(quán)和續(xù)期方案步驟詳解

    SpringBoot中基于JWT的單token授權(quán)和續(xù)期方案步驟詳解

    在前后端分離架構(gòu)中,用戶登錄后,后端生成JWT?Token返給前端存于LocalStorage,每次請(qǐng)求攜帶Token驗(yàn)證身份,后端校驗(yàn)其有效性,本文給大家介紹SpringBoot中基于JWT的單token授權(quán)和續(xù)期方案步驟詳解,感興趣的朋友一起看看吧
    2024-09-09
  • 詳解SpringBoot 處理異常的幾種常見(jiàn)姿勢(shì)

    詳解SpringBoot 處理異常的幾種常見(jiàn)姿勢(shì)

    這篇文章主要介紹了詳解SpringBoot 處理異常的幾種常見(jiàn)姿勢(shì),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 解決表單post,get到springMVC后臺(tái)亂碼的問(wèn)題

    解決表單post,get到springMVC后臺(tái)亂碼的問(wèn)題

    下面小編就為大家分享一篇解決表單post,get到springMVC后臺(tái)亂碼的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01

最新評(píng)論

南雄市| 类乌齐县| 和田县| 武川县| 大连市| 湾仔区| 云南省| 蒙城县| 黔南| 平阴县| 东乌珠穆沁旗| 宁乡县| 扶风县| 苏尼特右旗| 寻乌县| 香格里拉县| 攀枝花市| 通榆县| 茌平县| 和政县| 双鸭山市| 陕西省| 区。| 定兴县| 黑山县| 博兴县| 增城市| 资源县| 尼玛县| 绿春县| 大埔区| 台北县| 澄江县| 海晏县| 贞丰县| 连州市| 宜黄县| 涟水县| 精河县| 秦皇岛市| 邢台县|