dubbo,相信做後端的同學應該都用過,或者有所耳聞。沒錯,我就是那個有所耳聞中的一員。
公司在好幾年前實現了一套自己的rpc框架,所以也就沒有機會使用市面上琳琅滿目的rpc框架產品。
之所以想好好看看dubbo,有以下幾個原因
dubbo是alibaba開源的分布式服務框架,它最大的特點是按照分層的方式來架構,使用這種方式可以使各個層之間解耦合(或者最大限度地鬆耦合)。
github:
官網:
中文使用者手冊:
1.沒有dubbo之前,我們是什麼樣的工作方式
dubbo代表的是一類rpc框架,類似的產品還有鼎鼎大名的grpc。
沒有dubbo之前是什麼樣的,可以回想下我們學生時代做的專案。
一台電腦既是伺服器又是客戶端,估計當時也沒有想過我呼叫的這個介面是哪台電腦上,我是不是可以多部署幾台電腦,怎麼樣充分利用這幾台電腦好讓呼叫的效率更高。
因為即使想了,也搞不了,因為沒錢!
即使我們在自己的pc上把專案做好了,需要部署到伺服器上,那麼我們只要記住那台伺服器的ip,使用socket通訊,就很簡單的實現了服務的呼叫和通訊了。
2.dubbo有什麼用
接著學生時代的專案說,那時候我們做個圖書管理系統,學籍管理系統,其訪問量和併發量一般不會太高,準確說,是非常低。
但是如果還是乙個服務端,大量的使用者請求,達到高併發的場景,那麼問題就來了,一台機子顯然承受不住,這時候需要考慮分布式。
dubbo的產生於微服務聯絡緊密,我們一方面想著借助微服務的思想,實現各個服務或者模組之間的解耦。那麼我們另一方面就不能忽視服務之間的通訊,這時候dubbo一類的rpc框架就應運而生。
我們需要考慮擴充套件性,比如為了防止訪問過載,服務所在機器需要進行水平擴充套件,同時也要考慮不斷增加的服務呼叫方。
我們需要考慮負載均衡,怎麼樣才能將服務集群的威力發揮到最大。
我們需要考慮如何自動的註冊服務以及更新服務,如果做好異常情況下,比如註冊中心宕機時,服務方和呼叫方之間的服務呼叫。
如此種種,都是催生dubbo的重要因素。
相應的啟動zk和關閉zk服務的命令分別是zkserver start和zkserver stop
匯入dubbo專案並且完成編譯後,可以看到dubbo專案的目錄結構如下
今天要介紹的是dubbo-demo,該子模組包括
dubbo-demo-api
該模組最核心的類就是demoservice介面,該介面只有乙個方法sayhello
package com.alibaba.dubbo.demo;
public inte***ce demoservice
這個介面是聯絡呼叫方和提供方的紐帶。
dubbo-demo-consumer
該模組核心的類為consumer,主要是乙個main函式
public class consumer catch (throwable throwable) }}
}
其主要功能是載入配置檔案,用於尋找服務提供方所在的位置,拿到demoservice介面的實現類demoserviceimpl,並呼叫其方法實現sayhello
dubbo-demo-provider
該模組包含了demoservice的實現類demoserviceimpl,同時包含乙個服務啟動類provider
public class provider
}
啟動註冊中心因為呼叫方和服務提供方需要靠註冊中心來聯絡,提供方將自己的服務登記到註冊中心,呼叫方需要拉取可用的服務提供方的位置資訊,比較常見的關係描述如下圖所示
呼叫關係說明
鑑於dubbo原始碼中,配置檔案中的預設配置是multicast,但是我在執行的時候總是出現can't assign address的情況,所以改用zookeeper。
相應修改如下,在dubbo-demo-provider專案中,將dubbo-demo-provider.xml修改為
<?xml version="1.0" encoding="utf-8"?>
將dubbo-demo-consumer專案中的dubbo-demo-consumer.xml修改為
<?xml version="1.0" encoding="utf-8"?>
同時在命令列輸入zkserver start啟動zk
分別啟動proiver和consumer
執行provider類,將自己的服務介面對外開放
執行consumer類,尋找服務提供方,並呼叫其介面實現
至此,對於dubbo有了乙個初步的認識並通過dubbo-demo專案了解dubbo的運作模式。
網上找了乙份pdf版的原始碼閱讀心得,如果有需要,下方留下你的郵箱
dubbo原始碼 dubbo之Listener
1.exporterlistener spi public inte ce exporterlistener 使用者可以繼承該方法重寫需要的方法 public abstract class exporterlisteneradapter implements exporterlistener pub...
Dubbo原始碼分析
dubbo原始碼分析 其實已經有很多比較好的原始碼分析部落格,結合部落格和開發經驗再去分析原始碼,就能對dubbo的實現有個整體全面的理解,也能深入去深究其中的具體實現細節。dubbo裡主要用到的spi service provider inte ce netty nio 同步非阻塞多路復用框架,d...
dubbo原始碼解析(dubbo容器部分)
dubbo 解析 dubbo中也有內建的容器介面就是類 com.alibaba.dubbo.container.container 如下所示 spi spring public inte ce container 也同樣是 spi擴充套件點。而且介面非常的簡單,乾淨,在 dubbo 框架中一共出現了...