1. 程式人生 > >Dubbo原始碼分析(三)Exchanger

Dubbo原始碼分析(三)Exchanger

在一個框架中我們通常把負責資料交換和網路通訊的元件叫做Exchanger。Dubbo中每個Invoker都維護了一個ExchangeClient的引用,並通過它和遠端的Server進行通訊。整個與ExchangeClient相關的類圖如下

Dubbo Exchanger

其中包含了remoting相關的介面定義。個人覺得這個介面設計有些過於發雜,但為了可以展示全貌還是把全部內容都畫了進去。

ExchangeClient只有一個常用的實現類,HeaderExchangeClient

Exchangers.java Java
12345678910publicstatic
ExchangeClient connect(URL url,ExchangeHandler handler)throwsRemotingException{...url=url.addParameterIfAbsent(Constants.CODEC_KEY,"exchange");returngetExchanger(url).connect(url,handler);}publicstaticExchanger getExchanger(URL url){Stringtype=url.getParameter(Constants.EXCHANGER_KEY,Constants.DEFAULT_EXCHANGER
);returngetExchanger(type);}

先通過url獲取Exchanger,預設返回一個HeaderExchanger,之後通過它的connect()建立HeaderExchangeClient。

在Invoker需要傳送資料時,單程傳送使用的是ExchangeClient的send方法,需要返回結果的使用request方法

HeaderExchangerClientJava
1 2 3 4 5 6 7 8 9 10 11 12 13 14 private
finalExchangeChannelchannel; publicHeaderExchangeClient(Clientclient){ ... this.channel=newHeaderExchangeChannel(client); } publicvoidsend(Objectmessage,booleansent)throwsRemotingException{

相關推薦

Dubbo原始碼分析Exchanger

在一個框架中我們通常把負責資料交換和網路通訊的元件叫做Exchanger。Dubbo中每個Invoker都維護了一個ExchangeClient的引用,並通過它和遠端的Server進行通訊。整個與ExchangeClient相關的類圖如下 其中包含了re

Dubbo原始碼分析Dubbo之服務端Service

         如上圖所示的Dubbo的暴露服務的過程,不難看出它也和消費者端很像,也需要一個像reference的物件來維護service關聯的所有物件及其屬性,這裡的reference就是provider。由於ServiceBean實現了  Initializ

dubbo遠端呼叫原始碼分析:客戶端接收反饋後的處理

dubbo遠端呼叫的原始碼分析,分成了三篇文章地址分別如下:下面是consumer接收到provider反饋時的處理consumer接收到provider的反饋後,觸發NettyClient的事件處理器,該事件對consumer來說是上行事件,觸發的是NettyCodecAd

Android ADB 原始碼分析

前言 之前分析的兩篇文章 Android Adb 原始碼分析(一) 嵌入式Linux:Android root破解原理(二)   寫完之後,都沒有寫到相關的實現程式碼,這篇文章寫下ADB的通訊流程的一些細節 看這篇文章之前,請先閱讀 Linux的SOCKET

Flume NG原始碼分析使用Event介面表示資料流

Flume NG有4個主要的元件: Event表示在Flume各個Agent之間傳遞的資料流 Source表示從外部源接收Event資料流,然後傳遞給Channel Channel表示對從Source傳遞的Event資料流的臨時儲存 Sink表示從Channel中接收儲存的Event

GCC原始碼分析——中間語言

原文連結:http://blog.csdn.net/sonicling/article/details/7915301 一、前言   很忙,很久沒更新部落格了,繼續沒寫完的gcc分析,爭取在傳說將要用C++重寫的gcc 5出來之前初略分析完。 二、符號表(GENERI

zigbee 之ZStack-2.5.1a原始碼分析無線資料傳送和接收

前面說過SampleApp_Init和SampleApp_ProcessEvent是我們重點關注的函式,接下來分析無線傳送和接收相關的程式碼: 在SampleApp_ProcessEvent函式中: if ( events & SYS_EVENT_MSG ) {  &nbs

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

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

Volley原始碼分析

1.Volley原始碼分析(一) 2.Volley原始碼分析(二) 3.Volley原始碼分析(三) 4.XVolley-基於Volley的封裝的工具類 上一篇分析完了RequestQueue的大部分方法,add執行完後,Volley就會執行執行緒操作了,在第一篇

Spring component-scan原始碼分析 -- @Autowired等註解的處理

本篇文章分析注入註解(@Autowired、@Value等)的處理,其邏輯在AutowiredAnnotationBeanPostProcessor類中。 可以看到AutowiredAnnotationBeanPostProcessor類實現了一些增強處理的

Spring原始碼分析IoC容器的依賴注入2

protected void populateBean(String beanName, RootBeanDefinition mbd, BeanWrapper bw) { //這裡取得在BeanDefinition中設定的property值,這些property來自對BeanDefini

Spring原始碼分析IoC容器的依賴注入1

    依賴注入的過程是使用者第一次向IoC容器索要Bean時才觸發的,當然也有例外,可以在BeanDefinition資訊中通過控制lazy-init屬性來讓容器完成對Bean的預例項化。這個預例項化實際上也是一個完成依賴注入的過程,但它是在初始化的過程中完成的。

groupcache原始碼分析-- consistanthash

consistanthash.go檔案中是consistanthash模組的程式碼,這主要是提供了一致性hash的一些介面。一致性hash演算法,通常是用在查詢一個合適的下載節點時,使負載更平均,同時也使得某個節點故障不會導致大量的重新對映成本s,要了解一致性h

Java多執行緒之AQSAbstractQueuedSynchronizer 實現原理和原始碼分析

章節概覽、 1、回顧 上一章節,我們分析了ReentrantLock的原始碼: 2、AQS 佇列同步器概述 本章節我們深入分析下AQS(AbstractQueuedSynchronizer)佇列同步器原始碼,AQS是用來構建鎖或者其他同步元件的基礎框架。

libev原始碼分析---ev_timer

ev_timer結構體: typedef struct ev_timer { int active; /* 是否已經啟用 */ int pending; /* 是否事件易產生,需要執行回撥 *

dubbo原始碼分析:超時原理以及應用場景

本篇主要記錄dubbo中關於超時的常見問題,實現原理,解決的問題以及如何在服務降級中體現作用等。 超時問題 為了檢查對dubbo超時的理解,嘗試回答如下幾個問題,如果回答不上來或者不確定那麼說明此處需要再多研究研究。 我只是針對個人的理解提問題,並不代表我理解的就是全面深入的,但我的問題如果也回答不

YOLOv2原始碼分析

文章全部YOLOv2原始碼分析 接著上一講沒有講完的make_convolutional_layer函式 0x01 make_convolutional_layer //make_convolutional_laye

EventBus原始碼分析:post方法釋出事件【獲取事件的所有訂閱者,反射呼叫訂閱者事件處理方法】2.4版本

EventBus維護了一個重要的HashMap,這個HashMap的鍵是事件,值是該事件的訂閱者列表,因此post事件的時候就能夠從此HashMap中取出事件的訂閱者列表,對每個訂閱者反射呼叫事件處理方法。 private final Map<Cla

OkHttp 3.7原始碼分析——任務佇列

前面的部落格已經提到過,OkHttp的一個高效之處在於在內部維護了一個執行緒池,方便高效地執行非同步請求。本篇部落格將詳細介紹OkHttp的任務佇列機制。 1. 執行緒池的優點 OkHttp的任務佇列在內部維護了一個執行緒池用於執行具體的網路請求。而執行緒池

Muduo網路庫原始碼分析執行緒間使用eventfd通訊和EventLoop::runInLoop系列函式

先說第一點,執行緒(程序)間通訊有很多種方式(pipe,socketpair),為什麼這裡選擇eventfd? eventfd 是一個比 pipe 更高效的執行緒間事件通知機制,一方面它比 pipe