Dubbo 同步 非同步呼叫的幾種方式

2021-09-12 14:58:29 字數 607 閱讀 6980

我們知道,dubbo 預設協議採用單一長連線,底層實現是 netty 的 nio 非同步通訊機制;基於這種機制,dubbo 實現了以下幾種呼叫方式:

同步呼叫是一種阻塞式的呼叫方式,即 consumer 端**一直阻塞等待,直到 provider 端返回為止;

通常,乙個典型的同步呼叫過程如下:

consumer 業務執行緒呼叫遠端介面,向 provider 傳送請求,同時當前執行緒處於阻塞狀態;

provider 接到 consumer 的請求後,開始處理請求,將結果返回給 consumer;

consumer 收到結果後,當前執行緒繼續往後執行。

這裡有 2 個問題:

consumer 業務執行緒是怎麼進入阻塞狀態的?

consumer 收到結果後,如果喚醒業務執行緒往後執行的?

其實,dubbo 的底層 io 操作都是非同步的。consumer 端發起呼叫後,得到乙個 future 物件。對於同步呼叫,業務執行緒通過future#get(timeout),阻塞等待 provider 端將結果返回;timeout則是 consumer 端定義的超時時間。當結果返回後ÿ

同步呼叫與非同步呼叫

一 什麼是同步呼叫與非同步呼叫 定義 1 同步就是整個處理過程順序執行,當各個過程都執行完畢,並返回結果。2 非同步呼叫則是只是傳送了呼叫的指令,呼叫者無需等待被呼叫的方法完全執行完畢 而是繼續執行下面的流程。例如,在某個呼叫中,需要順序呼叫 a,b,c三個過程方法 如他們都是同步呼叫,則需要將他們...

dubbo非同步呼叫的bug

現象 現有3個服務,關係如下,servicea非同步呼叫serviceb,serviceb同步呼叫servicec。其中serviceb暴露出的介面為非同步方式。表現的現象為,serviceb每次呼叫servicec時,第一次的返回結果為null,後面幾次呼叫時均能正常返回結果。問題排查 專案中對於...

ajax同步非同步呼叫

test.html asy.js function testasync success function data alert temp end tet.php echo here is html code sleep 5 async false,預設是true 如上 false為同步,這個 tes...