Dubbo基本原理机制
分布式服務(wù)框架:
- 高性能和透明化的RPC遠(yuǎn)程服務(wù)調(diào)用方案
- SOA服務(wù)治理方案
- Apache MINA 框架基于Reactor模型通信框架,基于tcp長(zhǎng)連接
Dubbo缺省協(xié)議采用單一長(zhǎng)連接和NIO異步通訊,
適合于小數(shù)據(jù)量大并發(fā)的服務(wù)調(diào)用,以及服務(wù)消費(fèi)者機(jī)器數(shù)遠(yuǎn)大于服務(wù)提供者機(jī)器數(shù)的情況
分析源代碼,基本原理如下:
當(dāng)前線程怎么讓它“暫停”,等結(jié)果回來(lái)后,再向后執(zhí)行?
答:先生成一個(gè)對(duì)象obj,在一個(gè)全局map里put(ID,obj)存放起來(lái),再用synchronized獲取obj鎖,再調(diào)用obj.wait()讓當(dāng)前線程處于等待狀態(tài),然后另一消息監(jiān)聽(tīng)線程等到服 務(wù)端結(jié)果來(lái)了后,再map.get(ID)找到obj,再用synchronized獲取obj鎖,再調(diào)用obj.notifyAll()喚醒前面處于等待狀態(tài)的線程。
正如前面所說(shuō),Socket通信是一個(gè)全雙工的方式,如果有多個(gè)線程同時(shí)進(jìn)行遠(yuǎn)程方法調(diào)用,這時(shí)建立在client server之間的socket連接上會(huì)有很多雙方發(fā)送的消息傳遞,前后順序也可能是亂七八糟的,server處理完結(jié)果后,將結(jié)果消息發(fā)送給client,client收到很多消息,怎么知道哪個(gè)消息結(jié)果是原先哪個(gè)線程調(diào)用的?
答:使用一個(gè)ID,讓其唯一,然后傳遞給服務(wù)端,再服務(wù)端又回傳回來(lái),這樣就知道結(jié)果是原先哪個(gè)線程的了。
總結(jié)
以上是生活随笔為你收集整理的Dubbo基本原理机制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: AtCoder Beginner Con
- 下一篇: 牛客第六场 H-Hopping Rabb