Dubbo學習筆記之一——背景、框架、快速使用

背景:

SOA框架中,能夠根據需求經過網絡對鬆散耦合的粗粒度應用組件進行分佈式部署、組合和使用。服務層是SOA的基礎,能夠直接被應用調用,從而有效控制系統中與軟件代理交互的人爲依賴性。算法

dubbo能作爲咱們作什麼? 提供服務註冊中心,動態的註冊和發現服務,使服務的位置透明。並經過在消費方獲取服務提供方地址列表,實現軟負載均衡和Failover,下降對F5硬件負載均衡器的依賴,也能減小部分紅本。簡單來講,就是提供一個基於集羣的RPC框架(包括負載均衡,服務動態註冊和發現等)spring

架構:

節點角色說明:緩存

  • Provider: 暴露服務的服務提供方。
  • Consumer: 調用遠程服務的服務消費方。
  • Registry: 服務註冊與發現的註冊中心。
  • Monitor: 統計服務的調用次調和調用時間的監控中心。
  • Container: 服務運行容器。

調用關係說明:網絡

  • 0. 服務容器負責啓動,加載,運行服務提供者。
  • 1. 服務提供者在啓動時,向註冊中心註冊本身提供的服務。
  • 2. 服務消費者在啓動時,向註冊中心訂閱本身所需的服務。
  • 3. 註冊中心返回服務提供者地址列表給消費者,若是有變動,註冊中心將基於長鏈接推送變動數據給消費者。
  • 4. 服務消費者,從提供者地址列表中,基於軟負載均衡算法,選一臺提供者進行調用,若是調用失敗,再選另外一臺調用。
  • 5. 服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心。

1.註冊中心,服務提供者,服務消費者三者之間均爲長鏈接,而且只有在服務提供者和服務消費者啓動的時候纔會與註冊中心交互。當服務提供者發生改變時,註冊中心會自動推消息給服務消費者架構

2.註冊中心,服務提供者都是以集羣的方式提供服務,而且集羣中某一臺機子宕機不會影響集羣提供服務。集羣可動態增長機器部署實例。app

3.註冊中心和監控中心都是可選的,服務消費者能夠直連服務提供者。當註冊中心所有宕機的時候,不會影響服務消費者使用,由於消費者本地緩存了服務列表(不能在感知服務提供者變化)。負載均衡

快速使用

Dubbo官方推薦使用基於Spring的配置方法,所以第一步是配置dubbo配置文件,而且在spring啓動時候加載這個配置文件:框架

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd        http://code.alibabatech.com/schema/dubbo        http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
 
    <!-- 提供方應用信息,用於計算依賴關係 -->
    <dubbo:application name="hello-world-app"  />
 
    <!-- 使用multicast廣播註冊中心暴露服務地址 -->
    <dubbo:registry address="multicast://224.5.6.7:1234" />
 
    <!-- 用dubbo協議在20880端口暴露服務 -->
    <dubbo:protocol name="dubbo" port="20880" /> 
</beans>

在Spring中,在xxxAction中注入了一個xxxService,配置一個服務Bean的方式以下:分佈式

<bean id=「xxxService」 class=「com.xxx.XxxServiceImpl」 />
 
<bean id=「xxxAction」 class=「com.xxx.XxxAction」>
    <property name=「xxxService」 ref=「xxxService」 />
</bean>

 

而使用Dubbo,因爲xxxService不在本地,而是一個遠程調用,所以配置分爲服務提供者和服務消費者配置ide

在服務提供者中,配置文件以下,

<bean id=「xxxService」 class=「com.xxx.XxxServiceImpl」 /> <!-- 和本地服務同樣實現遠程服務 -->
 
<dubbo:service interface=「com.xxx.XxxService」 ref=「xxxService」 /> <!-- 增長暴露遠程服務配置 -->

服務消費者:

<dubbo:reference id=「xxxService」 interface=「com.xxx.XxxService」 /> <!-- 增長引用遠程服務配置 -->
 
<bean id=「xxxAction」 class=「com.xxx.XxxAction」> <!-- 和本地服務同樣使用遠程服務 -->
    <property name=「xxxService」 ref=「xxxService」 />
</bean>

這樣就能夠簡單的實現一個dubbo遠程調用,雖然可使用基於註解的方式,不過我的更推薦使用xml配置方式,這樣至少在對代碼是沒有侵入。

惟一不足的是,服務消費者須要有服務提供的API接口。

相關文章
相關標籤/搜索