国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Java框架】RPC遠(yuǎn)程調(diào)用

這篇具有很好參考價(jià)值的文章主要介紹了【Java框架】RPC遠(yuǎn)程調(diào)用。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

RPC架構(gòu)

一、RPC概述

RPC(Remote Procedure Call)叫作遠(yuǎn)程過(guò)程調(diào)用,它是利用網(wǎng)絡(luò)從遠(yuǎn)程計(jì)算機(jī)上請(qǐng)求服務(wù),可以理解為把程序的一部分放在其他遠(yuǎn)程計(jì)算機(jī)上執(zhí)行。通過(guò)網(wǎng)絡(luò)通信將調(diào)用請(qǐng)求發(fā)送至遠(yuǎn)程計(jì)算機(jī)后,利用遠(yuǎn)程計(jì)算機(jī)的系統(tǒng)資源執(zhí)行這部分程序,最終返回遠(yuǎn)程計(jì)算機(jī)上的執(zhí)行結(jié)果。

RPC的五個(gè)主要部分

  • user(服務(wù)調(diào)用方)
  • user-stub(調(diào)用方的本地存根)
  • RPCRuntime(RPC通信者)
  • server-stub(服務(wù)端的本地存根)
  • server(服務(wù)端)

服務(wù)調(diào)用方、調(diào)用方的本地存根及其一個(gè)RPC通信包的實(shí)例存在于調(diào)用者的機(jī)器上;而服務(wù)提供方、服務(wù)提供方的存根及另一個(gè)RPC通信包的實(shí)例存在于被調(diào)用的機(jī)器上。

服務(wù)方的代碼啟動(dòng)后要能夠接受調(diào)用方的網(wǎng)絡(luò)請(qǐng)求(如Netty、Tomcat)

從一個(gè)簡(jiǎn)單的案例分析

  • Provider模塊為服務(wù)方,提供服務(wù)(接口)的實(shí)現(xiàn),接收調(diào)用方的調(diào)用(網(wǎng)絡(luò)請(qǐng)求),并返回執(zhí)行結(jié)果
  • Consumer模塊為調(diào)用方,發(fā)送請(qǐng)求給服務(wù)方,并接受執(zhí)行結(jié)果
  • Common模塊為公共模塊,提供服務(wù)(接口)的定義。供Provider和Consumer使用
  • RPC模塊為RPC架構(gòu)的實(shí)現(xiàn)框架
    • 提供網(wǎng)絡(luò)服務(wù)的啟動(dòng)(HttpServer)
    • 提供網(wǎng)絡(luò)請(qǐng)求的處理(HttpServerHandler)
    • 提供接口名和實(shí)現(xiàn)類(lèi)的映射,便于快速找到網(wǎng)絡(luò)請(qǐng)求調(diào)用方法對(duì)應(yīng)的實(shí)現(xiàn)類(lèi)(LocalRegister,這里使用本地注冊(cè))
    • 提供網(wǎng)絡(luò)請(qǐng)求中接口名,方法名,參數(shù)類(lèi)型數(shù)組,參數(shù)數(shù)組的封裝(Invocation,需要實(shí)現(xiàn)序列化接口)
    • 提供代理工廠類(lèi)用于Consumer創(chuàng)建代理對(duì)象,通過(guò)代理對(duì)象直接調(diào)用服務(wù)中的方法(ProxyFactory,通過(guò)JDK中的動(dòng)態(tài)代理類(lèi)Proxy實(shí)現(xiàn))

二、RPC框架的開(kāi)發(fā)要點(diǎn)

服務(wù)發(fā)現(xiàn)

從遠(yuǎn)程注冊(cè)中心(如Redis)獲取接口名對(duì)應(yīng)的ip地址和端口(URL列表)

List<URL> urlList = RemoteRegister.get(interfaceClass.getName(), "1.0");

負(fù)載均衡

負(fù)載均衡(LoadBalance)提供很多種策略,這里實(shí)現(xiàn)隨機(jī)策略

public class LoadBalance {

	public static URL random(List<URL> urls){
		Random random = new Random();
		int randomIndex = random.nextInt(urls.size());
		return urls.get(randomIndex);
	}
}

服務(wù)容錯(cuò)

在可能會(huì)出現(xiàn)異常的位置進(jìn)行異常的友好處理,例如在網(wǎng)絡(luò)連接失敗時(shí)返回具體的信息

也可以在catch中調(diào)用自定義的實(shí)現(xiàn)類(lèi)HelloServiceErrorCallback調(diào)用具體的錯(cuò)誤回調(diào)方法

//服務(wù)調(diào)用:發(fā)送請(qǐng)求
String result = null;
try {
    HttpClient client = new HttpClient();
    result = client.send(url.getHostname(), url.getPort(), invocation);
}catch (Exception e){
    return "服務(wù)調(diào)用失敗!";
}

服務(wù)重試

當(dāng)某個(gè)服務(wù)調(diào)用失敗后,可以嘗試調(diào)用集群中的其他服務(wù)

服務(wù)mock

若服務(wù)方的業(yè)務(wù)代碼沒(méi)有開(kāi)發(fā)完,調(diào)用方需要一個(gè)返回結(jié)果,就可以用mock實(shí)現(xiàn)。

在代理對(duì)象的調(diào)用邏輯中判斷是否有mock參數(shù)的信息,如果有直接返回mock中的信息

String mock = System.getProperty("mock");
if( mock != null && mock.startsWith("return:")){
    String result = mock.replace("return:", "");
    return result;
}

三、案例代碼實(shí)現(xiàn)

獲取源碼可以去看我的Github文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-612222.html

RPC模塊中需要的依賴(lài)

<dependencies>
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-core</artifactId>
        <version>9.0.43</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-io</artifactId>
        <version>1.3.2</version>
    </dependency>
</dependencies>

到了這里,關(guān)于【Java框架】RPC遠(yuǎn)程調(diào)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • RPC遠(yuǎn)程調(diào)用

    RPC遠(yuǎn)程調(diào)用

    PRC是一種調(diào)用方式而不是一種協(xié)議 在本地調(diào)用方式時(shí)由于方法在同一個(gè)內(nèi)存空間,所以程序中可以直接調(diào)用該方法,但是瀏覽器端和服務(wù)端程序是不在一個(gè)內(nèi)存空間的,需要使用網(wǎng)絡(luò)來(lái)訪問(wèn),就需要使用TCP或者UDP協(xié)議,由于TPC協(xié)議是面向連接,基于字節(jié)流的,使用起來(lái)不太方

    2024年02月11日
    瀏覽(25)
  • [RPC]:Feign遠(yuǎn)程調(diào)用

    [RPC]:Feign遠(yuǎn)程調(diào)用

    摘要:RestTemplate;Feign;遠(yuǎn)程調(diào)用; Feign是一個(gè)簡(jiǎn)化HTTP客戶(hù)端編寫(xiě)的框架,通過(guò)聲明式方式將遠(yuǎn)程服務(wù)調(diào)用封裝成簡(jiǎn)單接口調(diào)用。 1.2.1 使用RestTemplate發(fā)送遠(yuǎn)程調(diào)用代碼 要求:系統(tǒng)調(diào)用者在查詢(xún)訂單的同時(shí),根據(jù)訂單中包含的userId查詢(xún)出用戶(hù)信息,一起返回。 1.2.1.1 項(xiàng)目示例

    2024年02月10日
    瀏覽(22)
  • Java 【dubbo rpc改feign調(diào)用】feign接口異常統(tǒng)一處理

    【框架改造問(wèn)題點(diǎn)記錄,dubbo改為spring cloud alibaba】 【第一篇】feign接口異常統(tǒng)一處理 示例代碼中【ApplicationException 】、【Payload 】為自定義異常類(lèi)和通用結(jié)果返回實(shí)體類(lèi): 示例代碼中【ApplicationException 】、【StringUtil】為自定義異常類(lèi)和自定義工具,自己平替即可:

    2024年02月16日
    瀏覽(20)
  • Java 【dubbo rpc改feign調(diào)用】解決調(diào)用服務(wù)提供方無(wú)法傳遞完整參數(shù)問(wèn)題

    【框架改造問(wèn)題點(diǎn)記錄,dubbo改為spring cloud alibaba】 【第二篇】feign接口異常解決 【描述】多參數(shù)情況下,調(diào)用服務(wù)提供方無(wú)法傳遞完整參數(shù)、改@SpringQueryMap原因是會(huì)將實(shí)體自動(dòng)拆分為拼接參數(shù)。目前只遇到多參數(shù):實(shí)體和單參數(shù)情況,持續(xù)更新… 匯總: 1.多個(gè)普通參數(shù),

    2024年02月16日
    瀏覽(35)
  • 基于netty的rpc遠(yuǎn)程調(diào)用

    ??????這是一個(gè)手寫(xiě)RPC項(xiàng)目,用于實(shí)現(xiàn)遠(yuǎn)程過(guò)程調(diào)用(RPC)通信?????? 歡迎star串門(mén) : https://github.com/red-velet/ ??Q-PRC 簡(jiǎn)單的RPC框架的實(shí)現(xiàn) :該RPC框架實(shí)現(xiàn)了基本的遠(yuǎn)程過(guò)程調(diào)用功能,允許客戶(hù)端通過(guò)網(wǎng)絡(luò)調(diào)用遠(yuǎn)程服務(wù)的方法,實(shí)現(xiàn)分布式系統(tǒng)之間的通信和協(xié)作。 基于

    2024年02月14日
    瀏覽(19)
  • 常見(jiàn)的遠(yuǎn)程過(guò)程調(diào)用(RPC)分析

    常見(jiàn)的遠(yuǎn)程過(guò)程調(diào)用(RPC)框架包括了許多開(kāi)源和商業(yè)解決方案,它們旨在簡(jiǎn)化分布式系統(tǒng)中服務(wù)之間的通信和調(diào)用。以下是一些常見(jiàn)的 RPC 框架及其特點(diǎn): gRPC : 基于 HTTP/2 協(xié)議的高性能 RPC 框架,由 Google 開(kāi)發(fā)。 使用 Protocol Buffers 進(jìn)行數(shù)據(jù)序列化,提供了跨語(yǔ)言的支持。

    2024年02月02日
    瀏覽(20)
  • RPC遠(yuǎn)程調(diào)用加密方法獲取返回值

    RPC遠(yuǎn)程調(diào)用加密方法獲取返回值

    從混淆的加密JS中還原了加密參數(shù)的具體生成流程,結(jié)果想從JS轉(zhuǎn)python的過(guò)程中第一步就卡住了。開(kāi)頭密鑰JS代碼如下,但是水平有限不知道如何轉(zhuǎn)為python實(shí)現(xiàn)(如果有大佬知道希望可以評(píng)論指點(diǎn))。利用execjs+jsdom來(lái)執(zhí)行簡(jiǎn)化還原后的JS代碼依舊無(wú)法實(shí)現(xiàn)。所以只能通過(guò)RPC的方式來(lái)

    2024年02月08日
    瀏覽(22)
  • Java 【dubbo rpc改feign調(diào)用】feign接口調(diào)用 Body parameter 4 was null

    【框架改造問(wèn)題點(diǎn)記錄,dubbo改為spring cloud alibaba】 【第四篇】feign接口調(diào)用 Body parameter 4 was null 【描述】Feign是一個(gè)聲明式的Web服務(wù)客戶(hù)端,它使得寫(xiě)HTTP客戶(hù)端變得更簡(jiǎn)單。如果你在使用Feign進(jìn)行服務(wù)調(diào)用時(shí)遇到了\\\"Body parameter 4 was null\\\"這樣的錯(cuò)誤,這通常意味著你嘗試將一個(gè)

    2024年02月11日
    瀏覽(18)
  • 微服務(wù)系列<3>---微服務(wù)的調(diào)用組件 rpc 遠(yuǎn)程調(diào)用
  • RPC:Remote Procedure Call 遠(yuǎn)程過(guò)程調(diào)用

    目前,對(duì)于一個(gè)完整的應(yīng)用來(lái)說(shuō),通常包含了若干支持不同功能的服務(wù),亦或者是函數(shù),這些服務(wù)之間往往可能需要互相調(diào)用,使用已經(jīng)實(shí)現(xiàn)的服務(wù)功能,而不是需要在每個(gè)服務(wù)進(jìn)程中再去重復(fù)實(shí)現(xiàn)已經(jīng)有的功能。 這不僅對(duì)于開(kāi)發(fā)者來(lái)說(shuō)是一種比較合理的設(shè)計(jì)方式,對(duì)于服務(wù)

    2024年01月19日
    瀏覽(25)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包