dubbo原始碼學習 四 暴露服務的過程

2021-09-27 11:28:32 字數 1605 閱讀 6513

dubbo採用的nio非同步的通訊,通訊協議預設為 netty,當然也可以選擇 mina,grizzy。在服務端(provider)在啟動時主要是開啟netty監聽,在zookeeper上註冊服務節點,處理消費者請求,返回處理後的訊息給消費者,消費者使用服務時主要是訂閱服務的節點,監聽zookeeper節點目錄,服務端的變化時zookeeper會推送給消費者,消費者重新快取服務位址等。服務者、消費者、zookeeper三者之間都是長連線。

下面看dubbo原始碼來看服務暴露的過程,服務暴露的入口為:com.alibaba.dubbo.config.serviceconfig#export 方法,**如下:

//是否延時暴露  

if (delay != null && delay > 0) catch (throwable e) else else catch (classnotfoundexception e)  

將配置資訊轉化成 url ,主要根據之前map裡的資料組裝成url 

呼叫 url#buildstring方法 

dubbo: 

&inte***ce=cn.eoncloud.account.sdk.export.accountservice 

&methods=getaccountname,getalltest&pid=7236&revision=1.0.0&side=provider 

&threadpool=fixed&threads=100&timeout=500×tamp=1462347843960&version=1.0.0 

url url = new url(name, host, port, (contextpath == null || contextpath.length() == 0 ? "" : contextpath + "/") + path, map);  

if (extensionloader.getextensionloader(configurato***ctory.class)  

.ha***tension(url.getprotocol())) catch (throwable t) catch (throwable t) catch (throwable t) else catch (remotingexception e) finally catch (throwable e) {  

throw new rpcexception("failed to register " + url + " to zookeeper " + geturl() + ", cause: " + e.getmessage(), e);  

其實從上面已經可以看到 在zookeeper上面建立 節點了,預設不分組的情況下,服務結構如下:/dubbo/***xservice/consumers、providers

至此,dubbo的暴露基本上已經完成,開啟了netty服務,註冊了zookeeper的節點,就等著消費者連線上來使用了。下一節將介紹dubbo的訊息傳送和接收,nio非同步通訊的實現。

Dubbo原始碼解析 服務暴露原理

服務發布和服務的引用到底什麼實現的呢?我們追蹤這個問題進行下面的學習?首先我們通過控制台檢視服務啟動過程中,日誌記錄了什麼?通過日誌看出發布的過程 暴露本地服務 暴露遠端服務 啟動netty 連線zookeeper 註冊到zookeeper 監聽zookeeper the service ready...

dubbo原始碼分析8 服務暴露概述

從上文中可知,com.alibaba.dubbo.config.spring.servicebean類是負責解析的配置的,下面是它的類圖 從outline檢視中可以發現,servicebean類並沒做什麼儲存配置的工作,儲存配置的工作主要是由它的父類在承擔。結合原始碼可以看到servicebean類...

dubbo服務暴露 本地暴露(二)

serviceconfig類 private void doexporturlsfor1protocol protocolconfig protocolconfig,list registryurls 我們進入這個方法 我們先看proxyfactory.getinvoker 方法,它是生成乙個inv...