以前微服務這塊只用過SpringCloud搭建,可是最近面試會被問到dubbo框架,雖然以前也學了可是都忘了,故寫此博客加深印象。html
Dubbo是一個分佈式服務框架,以及阿里巴巴內部的SOA服務化治理方案的核心框架。其功能主要包括:高性能NIO通信及多協議集成,服務動態尋址與路由,軟負載均衡與容錯,依賴分析與降級等。java
節點說明:
1.Provider
暴露服務的生產者,向註冊中心註冊其提供的服務,並彙報調用時間到監控中心,此時間不包含網絡開銷。git
2.Container
服務運行容器github
3.Consumer
調用遠程服務的服務消費者,服務消費者向註冊中心獲取服務提供者地址列表 , 並根據負載算法直接調用提供者,同時彙報調用時間到監控中心,此時間包含網絡開銷。面試
4.Monitor
統計服務的調用次調和調用時間的監控中心,統計先在內存彙總後每分鐘一次發送到監控中心服務器,並以報表展現。算法
5.Registry
註冊中心負責服務地址的註冊與查找,至關於目錄服務,服務提供者和消費者只在啓動時與註冊中心交互,註冊中心不轉發請求,壓力較小 。spring
dubbo不一樣服務間的區別與聯繫:
(1) 註冊中心,服務提供者,服務消費者三者之間均爲長鏈接,監控中心除外
(2) 註冊中心經過長鏈接感知服務提供者的存在,服務提供者宕機,註冊中心將當即推送事件通知消費者
(3) 註冊中心和監控中心所有宕機,不影響已運行的提供者和消費者,消費者在本地緩存了提供者列表
(4) 註冊中心和監控中心都是可選的,服務消費者能夠直連服務提供者數據庫
https://www.jianshu.com/p/302001c1c21fapache
裏面就只包括實體類User和接口UserService
緩存
User.java
UserService.java
public interface UserService {
/** * 查詢全部用戶 * @return */
public List<User> queryAll();
}
項目結構如圖:
<dependency>
<groupId>cn.sp</groupId>
<artifactId>m-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
dubbo.application.name=dubbo-producer
# 註冊中心地址
dubbo.registry.address=zookeeper://ip:2181
# 指定通訊協議
dubbo.protocol.name=dubbo
# 通訊端口 這裏指的是與消費者間的通訊協議與端口
dubbo.protocol.port=12345
注意: 這裏的 @Service註解包名是 com.alibaba.dubbo.config.annotation.Service,而不是Spring的那個。
最後啓動便可。
User{id=1, username='username_1', password='xxxx'}
User{id=2, username='username_2', password='xxxx'}
User{id=3, username='username_3', password='xxxx'}
User{id=4, username='username_4', password='xxxx'}
User{id=5, username='username_5', password='xxxx'}
User{id=6, username='username_6', password='xxxx'}
User{id=7, username='username_7', password='xxxx'}
User{id=8, username='username_8', password='xxxx'}
User{id=9, username='username_9', password='xxxx'}
。。。。
參考資料:https://github.com/apache/incubator-dubbo-spring-boot-project
代碼地址:https://github.com/2YSP/dubbo-springboot-demo