1. 程式人生 > >dubbo通訊原理

dubbo通訊原理

二話不說,先上圖
這裡寫圖片描述

dubbo底層使用socket建立長連線,傳送、接收資料的形式進行通訊,結合使用apache mina框架,使用IoSession.write()方法,這個方法是一個非同步的呼叫。
即對於當前執行緒來說,只需要將請求傳送出去。就可以繼續向後執行了。

基本原理

1、客戶端一個執行緒呼叫遠端介面,生成一個唯一的ID。dubbo使用AtomicLong從0開始計數。
2、將打包的方法呼叫資訊(呼叫介面的介面名稱、方法名稱、引數值列表)以及處理結構的回撥物件callback,全部封裝在一起,組成一個物件Object
3、向專門存放呼叫資訊的全域性ConCurrentHashMap中put(ID,Obejct)
4、將ID和打包的方法呼叫資訊封裝成一物件connRequest,使用IoSession.write(connRequest)非同步傳送出去
5、**當前執行緒再使用callback的get()方法試圖獲取遠端返回的結果。在get()內部使用synchronized獲取回撥物件的callback鎖,再檢測是否已經獲得結果。如果沒有,然後呼叫callback的wait()方法。
釋放callback上的鎖。讓當前執行緒處於等待狀態。**
6、服務端接收到請求並處理後。將結果傳送給客戶端。客戶端上socket連線上專門監聽訊息的執行緒監聽到訊息。分析結果,取得ID,用ConCurrentHashMap.get(ID)。從而找到callback。將呼叫結果設定到callback物件中
7、監聽執行緒接著使用synchronized獲取回撥物件的鎖(callback的鎖已經被釋放掉了),再notifyAll(),喚醒前面處於等待狀態的執行緒繼續執行。

Q:當前執行緒如何”暫停”執行,等待結果回來後,再向後執行?

A:先生成一個物件Object,在全域性的ConCurrentHashMap中存放起來,再用synchronized鎖住這個物件,再呼叫wait()方法讓當前執行緒處於等待狀態。
另一訊息監聽執行緒等到服務端結果到來之後,再map.get(ID)找到Object.再用synchronized獲取Object鎖,再呼叫notifyAll()喚醒前面處於等待狀態的執行緒。

相關推薦

dubbo通訊原理

二話不說,先上圖 dubbo底層使用socket建立長連線,傳送、接收資料的形式進行通訊,結合使用apache mina框架,使用IoSession.write()方法,這個方法是一個非同步的呼叫。 即對於當前執行緒來說,只需要將請求傳送出去。就可以繼續

Dubbo併發通訊原理解析

1.消費者一個執行緒呼叫遠端介面,生成一個唯一的ID(比如一段隨機字串,UUID等

P2P通訊原理

轉發 可訪問性 實現 tcp 進行 應用 沒有 理解 類型 1.簡介   當今互聯網到處存在著一些中間件(MIddleBoxes),如NAT和防火墻,導致兩個(不在同一內網)中的客戶端無法直接通信。這些問題即便是到了IPV6時代也會存在,因為即使不需要NAT,但還有其他中

開源純C#工控網關+組態軟件(四)上下位機通訊原理

動畫 報警 com pan 其中 stat 減少 png 依次 一、 網關的功能:承上啟下 最近有點忙,更新慢了。感謝園友們給予的支持,現在github上已經有。目標是最好的開源組態,看來又近一步^^ 之前有提到網關是物聯網的關鍵環節,它的作用就是承上啟下。 下位

dubbo實現原理之SPI簡介

ring 循環 -i OS ade ava rabl spi for循環   dubbo采用微內核+插件體系,設計優雅,擴展性很強。微內核+插件體系是如何實現的呢?想必大家都知道SPI(service provider interface)機制。這種機制的原理是假如我們定義

網絡通訊原理

bsp 斷開連接 應用 斷開 網絡通訊 揮手 區分 網絡 網絡通 三次握手:建立連接  (第一次:客戶端告訴服務端。第二次:客戶端才知道服務端收到了。第三次:服務端才知道客戶端收到了)     :傳輸數據  (第一次:客戶端向服務端發送請求。第二次:服務端響應客戶端請求)

stm32-SPI通訊原理詳解

ash orf 即使 信號線 時鐘 tro 信號中斷 設備 操作 那麽今天再說說SPI吧,通過前面的IIC其實我們知道,通訊協議,其實就是通過時序來傳輸數據,通過自定義不同的函數來實現數據的傳輸(具體就是按照時序,來讀寫寄存器的標誌位,來完成數據傳輸的具體操作),所以可以通

Dubbo原理以及詳細原理、配置

Dubbo的背景 隨著網際網路的發展,網站應用的規模不斷擴大,常規的垂直應用架構已無法應對,分散式服務架構以及流動計算架構勢在必行,亟需一個治理系統確保架構有條不紊的演進。 Dubbo的應用 用於大規模服務化,通過在消費方獲取服務提供方地址列表,實現軟負載均衡,減輕硬體壓力。 架構 最簡單呼叫圖

Dubbo原始碼分析(六)Dubbo通訊的編碼解碼機制

Dubbo原始碼分析(一)Dubbo的擴充套件點機制 Dubbo原始碼分析(二)Dubbo服務釋出Export Dubbo原始碼分析(三)Dubbo的服務引用Refer Dubbo原始碼分析(四)Dubbo呼叫鏈-消費端(叢集容錯機制) Dubbo原始碼分析(五)Dubbo呼叫鏈-服務端

[Visual Studio C++][Socket程式設計] Socket通訊原理詳細講解

(本文參考:https://www.cnblogs.com/wangcq/p/3520400.html  在原文的基礎上進行了擴充。)    對TCP/IP、UDP、Socket程式設計這些詞你不會很陌生吧?隨著網路技術的發展,這些詞充斥著我們的耳朵。那麼我想問

Dubbo基本原理

版權宣告:本文為博主原創文章,轉載需標明出處哦 ^-^。 https://blog.csdn.net/qq_33101675/article/details/78701305 一、Duboo基本概念解釋 Dubbo是一種分散式服務框架。 Webservice也是一種服務框架,但是webser

通訊原理---HDB3---FPGA--極性轉換

 前文參考我的上一篇部落格,本來在上面修改的最後不能發表,所以在這裡補了最後一步極性轉換,原理前文已經介紹https://blog.csdn.net/dengfenglai123/article/details/79674063 always @ ( p

通訊原理---FPGA---HDB3碼編碼

 參考資料: 樊昌信,曹麗娜 . 《通訊原理》(第7版) https://wenku.baidu.com/view/24b7bc227fd5360cba1adb6c  (這個PPT給了很多啟發) https://wenku.baidu.com/view/7cd94

通訊原理---FPGA---HDB3譯碼

 參考我的上兩篇HDB3編碼,給出HDB3譯碼的Verilog實現 https://blog.csdn.net/dengfenglai123/article/details/79674063(編碼) https://blog.csdn.net/dengfeng

[dubbo]dubbo架構原理

1、準備 在分析探索Dubbo架構原理之前,我們需要準備一下環境,用於後面我們來分析dubbo的架構。 1.1 Zookeeper Dubbo使用Zookeeper為註冊中心。所以需要在本地啟動zookeeper,作為Dubbo的註冊中心。 啟動Zookeeper服務:用於dubbo

Dubbo原理分析

【1】RPC原理 首先看個圖: 一次完整的RPC呼叫流程(同步呼叫,非同步另說)如下: 1)服務消費方(client)呼叫以本地呼叫方式呼叫服務; 2)client stub(可以理解為代理)接收到呼叫後負責將方法、引數等組裝成能夠進行網路傳輸的訊息體; 3)clien

QQ 通訊原理分析

下面有4個基本的問答: 問題一:為什麼只要可以連上網際網路的計算機都可以用QQ相互建立通訊,而不需要固定IP? 也就是這個QQ使用者端是怎樣找到另一個QQ使用者的,而使用者在每次使用時他可能用的是不同的計算機,有著不同的IP地址。 伺服器端不會以qq使用者端的ip作為唯一標識,伺服器端會以qq賬

微控制器C51 - 序列通訊原理及串列埠程式設計實驗

一、兩種通訊方式概念 1.並行通訊 傳輸原理:並行通訊時資料的各個位同時傳送,以位元組為單位並行傳輸 優點:並行通訊速度快,傳輸的資料寬度可以是1~128位,甚至更寬 缺點:並口上導線之間資料同步難處理,佔用引腳資源多 2.序列通訊

iic通訊原理

1.iic匯流排顧名思義只有2根線:SDA資料線,SCL時鐘線。 主裝置與各個從裝置都是掛載在這兩根線上如圖: 每個裝置都有自己的一個地址,當主機要與多個外圍裝置中的一個裝置通訊時,首先要傳送要通訊的器件地址以確定通訊目標。 2.iic空閒訊號,起始訊號和終止訊號 空閒訊號:S

Spark 通訊原理分析

Spark通訊原理(發件箱和收件箱) 更多資源 github: https://github.com/opensourceteams/spark-scala-maven csdn(彙總視訊線上看): https://blog.csdn.net/thinktothings