SOA框架中,能夠根據需求經過網絡對鬆散耦合的粗粒度應用組件進行分佈式部署、組合和使用。服務層是SOA的基礎,能夠直接被應用調用,從而有效控制系統中與軟件代理交互的人爲依賴性。算法
dubbo能作爲咱們作什麼? 提供服務註冊中心,動態的註冊和發現服務,使服務的位置透明。並經過在消費方獲取服務提供方地址列表,實現軟負載均衡和Failover,下降對F5硬件負載均衡器的依賴,也能減小部分紅本。簡單來講,就是提供一個基於集羣的RPC框架(包括負載均衡,服務動態註冊和發現等)spring
節點角色說明:緩存
調用關係說明:網絡
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接口。