分佈式Dubbo快速入門

Dubbo入門
Editor:SimpleWu
Dubbo是 阿里巴巴公司開源的一個高性能優秀的服務框架使得應用可通過高性能的 RPC 實現服務的輸出和輸入功能,可以和 Spring框架無縫集成。

背景
隨着互聯網的發展,網站應用的規模不斷擴大,常規的垂直應用架構已無法應對,分佈式服務架構以及流動計算架構勢在必行,亟需一個治理系統確保架構有條不紊的演進。

單一應用架構
當網站流量很小時,只需一個應用,將所有功能都部署在一起,以減少部署節點和成本。此時,用於簡化增刪改查工作量的數據訪問框架(ORM)是關鍵。

垂直應用架構
當訪問量逐漸增大,單一應用增加機器帶來的加速度越來越小,將應用拆成互不相干的幾個應用,以提升效率。此時,用於加速前端頁面開發的Web框架(MVC)是關鍵。

分佈式服務架構
當垂直應用越來越多,應用之間交互不可避免,將核心業務抽取出來,作爲獨立的服務,逐漸形成穩定的服務中心,使前端應用能更快速的響應多變的市場需求。此時,用於提高業務複用及整合的分佈式服務框架(RPC)是關鍵。

流動計算架構
當服務越來越多,容量的評估,小服務資源的浪費等問題逐漸顯現,此時需增加一個調度中心基於訪問壓力實時管理集羣容量,提高集羣利用率。此時,用於提高機器利用率的資源調度和治理中心(SOA)是關鍵。

zookeeper安裝
官方網站

http://zookeeper.apache.org/

下載地址

http://mirrors.hust.edu.cn/apache/zookeeper/

下載好我們解壓出來直接啓動bin目錄下zkServer.bat是不行的,我們暫時將zoo_sample.cfg改成zoo.cfg然後就可以正常啓動了,啓動後我們可以看到默認的端口2181到時候我們的Dubbo就調用這個端口

發佈Dubbo服務
Dubbo下載地址

https://github.com/apache/incubator-dubbo

下載後我們參照裏面的Demo先來搞一個provider。(dubbo-provider)

1.打開eclipse新建一個maven工程(先配置個阿里雲鏡像,否則本地沒有超級慢)

nexus-aliyun * Nexus aliyun http://maven.aliyun.com/nexus/content/groups/public 2.POM.XML中添加依賴 com.alibaba dubbo 2.6.0 com.101tec zkclient 0.10 org.apache.curator curator-framework 4.0.1 com.alibaba fastjson 1.2.46 log4j log4j 1.2.17 org.slf4j slf4j-api 1.7.25 org.apache.commons commons-lang3 3.4 io.netty netty-all 4.0.35.Final 3.添加服務接口,實現服務 package com.miya.dubbo.service; /** * 服務提供者接口 * @author SimpleWu * */ public interface MyProviderService { public String sayHello(String name); } 實現接口 package com.miya.dubbo.service.impl; import com.miya.dubbo.service.MyProviderService; /** * 服務提供者接口實現類 * @author SimpleWu * */ public class MyProviderServiceImpl implements MyProviderService { @Override public String sayHello(String name) { return "服務1 : MyProviderServiceImpl 。。 sayHello "; } } 4.在resources資源文件夾中添加dubbo-provider.xml 5.創建測試類發佈服務 發佈服務之前需要先啓動zookeeper,啓動後圖示: 創建測試類發佈服務 public static void main(String[] args){ ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( new String[] { "dubbo-provider.xml" }); context.start(); System.out.println("服務提供者向zookeeper中心註冊服務成功 暴露的端口爲:20880"); try { System.in.read(); } catch (IOException e) { e.printStackTrace(); } } 發佈後圖示: 如果看到我們的服務接口後就說明服務發佈成功! Dubbo Admin管理 1.首先在Dubbo目錄裏面找到dubbo-admin將他打成WAR包不能帶項目路徑 我們需要將WAR包發佈到Tomcat裏面最好獨立運行,我們將Tomcat wepapps下的ROOT全部刪掉將WAR包解壓到裏面,然後啓動Tomcat(必須先開啓我們的zookeeper),我們直接訪問localhost:8080會彈出: 默認的賬號root密碼root登陸 我們可以看到這個頁面 我們可以在這裏管理我們的服務 目前我們點擊服務是沒有查詢到服務的,我們將我們之前的那個服務運行發佈上去可以看到 我們可以點擊服務名進去管理我們的服務 在這裏可以對應的去操作我們的服務,注意我們的服務就是在20880端口暴露的,這裏我們的服務也是20880說明我們的服務成功發佈。 消費Dubbo服務 創建一個maven項目(dubbo-consumer)開啓消費者: 1.POM.XML導入依賴 com.alibaba dubbo 2.6.0 com.101tec zkclient 0.10 org.apache.curator curator-framework 4.0.1 com.alibaba fastjson 1.2.46 log4j log4j 1.2.17 org.slf4j slf4j-api 1.7.25 org.apache.commons commons-lang3 3.4 io.netty netty-all 4.0.35.Final 2.創建消費者接口 package com.miya.dubbo.service; /** * 服務提供者接口 * @author SimpleWu * */ public interface MyProviderService { public String sayHello(String name); } 3.在resources下創建消費者配置文件(dubbo-consumer.xml) 4.創建消費者測試類 package com.miya.dubbo.test; import java.io.IOException; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.miya.dubbo.service.MyProviderService; public class ConsumerTest { public static void main(String[] args) { //讀取消費者配置文件 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"dubbo-consumer.xml"}); context.start(); //獲取消費實例 MyProviderService demoProviderService=(MyProviderService) context.getBean("myProviderService"); String result=demoProviderService.sayHello("Miya"); System.out.println("遠程調用的結果:"+result); try { System.in.read(); } catch (IOException e) { e.printStackTrace(); } context.close(); } } 5.開始消費 打開zookeeper-->Tomcat發佈Dubbo Admin管理中心-->啓動消費者測試程序 我們可以看到消費者已經有了,圖示: 抽取與依賴版本管理 抽取 在前面兩個項目中我們會發現兩個項目中有兩個相同的接口(MyProviderServiceImpl.java),這樣是不好的,我們現在參照官方demo來創建一個maven工程(dubbo-api) 我們將接口我們將這個接口放到api這個項目中去,然後將dubbo-consumer,dubbo-provider這兩個工程中的接口刪掉,這個時候我們這兩個項目會報錯因爲找不到這個接口,我們可以將這兩個項目添加依賴: com.miya dubbo-api 我們只要依賴dubbo-api就可以獲取到了嗎? 依賴版本統一管理 我們在dubbo-consumer,dubbo-provider這兩個工程中會發現POM.xml中的版本號,如果我們需要修改版本要一個一個去修改有兩個工程不是要改兩次?那誇張以點,一萬不是得改半條命? 這個時候我們還是創建一個maven工程(dubbo-parent),這個工程Packaging我們選擇POM,這個項目負責版本統一。首先我們抽取相同的依賴,然後給他們定義統一的版本管理方式。 4.0.0 com.miya dubbo-parent 0.0.1-SNAPSHOT pom 0.0.1-SNAPSHOT 2.6.0 0.10 4.0.1 1.2.46 1.2.17 1.7.25 3.4 4.0.35.Final com.miya dubbo-api ${dubbo-api.version} com.alibaba dubbo ${dubbo.version} com.101tec zkclient ${zkclient.version} org.apache.curator curator-framework ${curator-framework.version} com.alibaba fastjson ${fastjson.version} log4j log4j ${log4j.version} org.slf4j slf4j-api ${slf4j-api.version} org.apache.commons commons-lang3 ${commons-lang3.version} io.netty netty-all ${netty-all.version}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章