RPC
- 解釋:遠程方法調用
- 影響RPC框架性能的兩個因素:
- 能否在多個服務器之間建立連接(通信)
- 序列化和反序列化的速度(序列化)
Dubbo簡介
- 高性能JAVA RPC框架
特性
- 面向接口代理的高性能RPC調用
- 智能負載均衡
- 服務自動註冊與發現
- 高度可拓展能力
- 運行期流量調度
- 灰度發佈:++漸進式發佈++
- 可視化的服務治理和運維
Dubbo設計架構
- 對象
- 服務提供者:Provider
- 註冊中心:Registry,即zookeeper
- 服務消費者:consumer
實現
- 添加Dubbo依賴
<!--dubbo--> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.6.2</version> </dependency> <!--zookeeper的客戶端--> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.12.0</version> </dependency>
Dubbo與SpringBoot整合
- 添加依賴
<!--針對spring boot在2.0版本之上-->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
-
使用的註解
- @Service (com.alibaba.dubbo.config.annotation.Service):暴露服務
- @Reference:遠程引用這個service
-
其他和之前一樣配置即可
Duboo配置dubbo.properties
- dubbo配置問價的類型
- JVM 啓動 -D 參數優先,這樣可以使用戶在部署和啓動時進行參數重寫,比如在啓動時需改變協議的端口。
- XML 次之,如果在 XML 中有配置,則 dubbo.properties 中的相應配置項無效。
- Properties 最後,相當於缺省值,只有 XML 沒有配置時,dubbo.properties 的相應配置項纔會生效,通常用於共享公共配置,比如應用名。
- -D > XML > properties
Dubbo配置超時和配置覆蓋
- 配置超時設置: 添加
timeout
屬性
timeout的默認值是1000,單位:毫秒
<dubbo:reference interface="com.lhc.provider.service.UserService" id="userService" check="false" timeout="5000"/>
- 方法級 > 接口級 > 全局配置
- 如果級別一樣,消費方優先於提供方
Dubbo配置重試次數
retries
屬性表示重試次數,不包含第一次調用,0表示不重試。增加操作不做重試操作,*表示隨機調用
<dubbo:reference interface="com.lhc.provider.service.UserService" id="userService" check="false" timeout="5000" retries="5"/>
Dubbo與SpringBoot整合的三種方式
- 使用
@Service
暴露服務,主類上使用@EnableDubbo
註解 - 添加xml配置文件,在主類上使用
@ImportResource("classpaht:provider.xml")
加載配置文件 - 使用JAVA代碼將每一個組件手動添加到容器中
Dubbo高可用 ZooKeeper宕機與Dubbozhilian
-
現象: zookeeper註冊中心宕機,還可以消費dubbo暴露服務
-
原因:
- 監控中心宕機不影響使用,只是丟失部分採樣數據
- 數據庫宕機後,註冊中心仍能通過緩存提供服務列表查詢,但不能註冊新服務
- 註冊中心對等集羣,任意一臺宕機後,將自動切換到另一臺
- 註冊中心全部宕機後,服務提供者和服務消費者仍能通過本地緩存通訊
- 提供者無狀態,任意一臺宕機後,不影響使用
- 提供者全部宕機後,消費者應用給將無法使用,並無限次重連等待提供者恢復
-
如何使用Dubbo直連:
@Service
public class OrderServiceImpl implements OrderService{
@Reference(url = "127.0.0.1:20880") // 使用url屬性,並賦予提供者的地址,實現dubbo直連
private UserService userService;
@Override
public List<UserAddress> initOrder(String userId) {
List<UserAddress> list = userService.getUserAddressList("1");
return list;
}
}
Dubbo高可用 負載均衡機制
在集羣負載均衡時,Dubbo 提供了多種均衡策略,缺省爲 random 隨機調用
- Dubbo中四種負載均衡機制
- Random LoadBalance : 隨機,按權重設置隨機概率
- RoundRobin LoadBalance :輪詢,按公約後的權重設置輪詢比率。
- LeastActive LoadBalance : 最少活躍調用數,相同活躍數的隨機,活躍數指調用前後計數差。
- ConsistentHash LoadBalance : 一致性 Hash,相同參數的請求總是發到同一提供者
Dubbo高可用 服務降級
看文檔
demo下載鏈接:https://share.weiyun.com/54L7ZuE