Dubbo使用教程


http://dubbo.apache.org/zh-cn/docs/dev/implementation.html

https://www.cnblogs.com/tiancai/p/9573912.html

1.背景

在互聯網的發展過程中,在以前,我們只需要一個服務器,將程序全部打包好就可以,但是,隨着流量的增大,常規的垂直應用架構已無法應對,所以,架構就發生了演變。

1 單一應用架構

2 應用和數據庫單獨部署

3 應用和數據庫集群部署

4 數據庫壓力變大,讀寫分離

5 使用緩存技術加快速度

6 數據庫分庫分表

7 應用分為不同的類型拆分

發展到這個階段的時候,我們發現,應用與應用之間的關系已經十分的復雜了,就會出現以下幾個問題(以下摘錄於官網):

① 當服務越來越多時,服務 URL 配置管理變得非常困難,F5 硬件負載均衡器的單點壓力也越來越大。
② 當進一步發展,服務間依賴關系變得錯蹤復雜,甚至分不清哪個應用要在哪個應用之前啟動,架構師都不能完整的描述應用的架構關系。
③ 接着,服務的調用量越來越大,服務的容量問題就暴露出來,這個服務需要多少機器支撐?什么時候該加機器?

為了解決這由於架構的演變所產生的問題幾個問題,於是,dubbo 產生了。當然,解決這個問題的技術不止 dubbo 。

二 Dubbo的結構圖

                                 

 

從上圖中我們可以看到,Dubbo結構很像生產者-消費者模型,只是在上面這個模型基礎上,加了注冊中心和監控模塊,分別用於管理服務提供方的url,以及監控管理整個流程。生產者(Provider)

整個發布,訂閱流程:

  • 啟動容器,加載,運行服務提供者
  • 服務提供者在啟動時,在注冊中心發布注冊自己提供的服務
  • 服務消費者在啟動時,在注冊中心訂閱自己所需的服務。

如果存在服務失敗或者變更的情況,Dubbo就進行如下的操作:

  • 注冊中心返回服務提供者地址列表給消費者,如果有變更,注冊中心將基於長連接推送變更數據給消費者。
  • 服務消費者,從提供者地址列表中,基於軟負載均衡算法,選一台提供者進行調用,如果調用失敗,再選另一台調用。
  • 服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鍾發送一次統計數據到監控中心。

三Dubbo實例教程

3.1導入Maven依賴

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <modelVersion>4.0.0</modelVersion>
 6 
 7     <groupId>com.ouyangsihai</groupId>
 8     <artifactId>dubbo-provider</artifactId>
 9     <version>1.0-SNAPSHOT</version>
10 
11     <dependencies>
12         <dependency>
13             <groupId>junit</groupId>
14             <artifactId>junit</artifactId>
15             <version>3.8.1</version>
16             <scope>test</scope>
17         </dependency>
18         <!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
19         <dependency>
20             <groupId>com.alibaba</groupId>
21             <artifactId>dubbo</artifactId>
22             <version>2.6.6</version>
23         </dependency>
24         <dependency>
25             <groupId>org.apache.zookeeper</groupId>
26             <artifactId>zookeeper</artifactId>
27             <version>3.4.10</version>
28         </dependency>
29         <dependency>
30             <groupId>com.101tec</groupId>
31             <artifactId>zkclient</artifactId>
32             <version>0.5</version>
33         </dependency>
34         <dependency>
35             <groupId>io.netty</groupId>
36             <artifactId>netty-all</artifactId>
37             <version>4.1.32.Final</version>
38         </dependency>
39         <dependency>
40             <groupId>org.apache.curator</groupId>
41             <artifactId>curator-framework</artifactId>
42             <version>2.8.0</version>
43         </dependency>
44         <dependency>
45             <groupId>org.apache.curator</groupId>
46             <artifactId>curator-recipes</artifactId>
47             <version>2.8.0</version>
48         </dependency>
49 
50     </dependencies>
51 </project>

3.2定義Provider接口

首先,定義Provider的接口,並實現provider接口, Dubbo 的作用簡單來說就是給消費端提供接口。Dubbo將Provider接口在服務中心注冊,Consumer端就可以調用該注冊的接口。

/**
 * 定義provider接口 
 */
public interface ProviderService {

    String SayHello(String word);
}

/**
 * 定義provider接口的實現類
 */
public class ProviderServiceImpl implements ProviderService{

    public String SayHello(String word) {
        return word;
    }
}

3.3暴露Provider接口的配置方式

包括:xml配置,api配置和注解配置。下面只介紹下xml配置的方式,這種方式比較常用。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3        xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
 4        xmlns="http://www.springframework.org/schema/beans"
 5        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
 6     http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
 7 
 8     <dubbo:application name="項目名" organization="項目部門"
 9                        owner="san.zhang"/>
10     <dubbo:protocol port="${端口號}" threadpool="dynamic.dubbo.thread.pool">
11         <dubbo:parameter key="threadname" value="dubbo.thread"/>
12         <dubbo:parameter key="corethreads" value="150"/>
13         <dubbo:parameter key="threads" value="250"/>
14         <dubbo:parameter key="queues" value="1000"/>
15     </dubbo:protocol>
16 
17   //注冊需要暴露的服務providerServiceImp,
18     <dubbo:service ref="providerServiceImp"
19                    registry="ttsi_flight_detail"
20                    interface="com.api.ProviderService"
21                    version="1.0.0"
22                    timeout="30000">
27         <dubbo:parameter key="qloglevel" value="${dubboLog.level:10}"/>
28     </dubbo:service>
29  <!--Bean bean定義-->
30     <bean id="providerServiceImp" class="com.dubbo.ProviderServiceImp"/>
31 //dubbo.zk.address一般指定zk地址,dubbo.group指定項目的組,id作為標識
32     <dubbo:registry address="${dubbo.zk.address}" group="${dubbo.group}" protocol="zookeeper"
33                     id="oag"/>
34 
35 </beans>

3.4Consumer端

3.4.1 Maven配置跟Provider端配置一樣

3.4.2 xml配置

<?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="consumer" owner="jie"/>

    <!--dubbo這個服務所要暴露的服務地址所對應的注冊中心-->
    <!--點對點的方式-->
    <!--<dubbo:registry address="N/A" />-->
    <dubbo:registry address="{zk.address}" port="{port}" check="false"/>

    <!--生成一個遠程服務的調用代理-->
    <dubbo:reference id="providerService"
                     interface="Service.ProviderService"/>

</beans>

 未完待續。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM