Dubbo分散式服務框架入門(附工程)
要想了解Dubbo是什麼,我們不防先了解它有什麼用。
使用場景:比如我想開發一個網上商城專案,這個網上商城呢,比較複雜,分為pc端web管理後臺,微信端銷售公眾號,那麼我們分成四個專案,pc端網站,微信端網站,還有一個後臺服務專案,介面服務專案。
對資料庫的操作的相關介面放到介面服務專案,這些介面的實現放在後臺服務專案,pc端網站和微信端網站都依賴介面服務專案,呼叫後臺資料庫資料。在這種場景下就是應該使用Dubbo這種分散式服務框架了。當然這只是Dubbo的一個最淺顯的功能。
有些猿友可能會問到了,為什麼搞那麼多各專案啊,不是自找麻煩麼。當你一個專案越來越複雜的時候,是必須要怎麼幹的,至於為什麼,慢慢會有體會。
下面我們馬上介紹Dubbo:
一、Dubbo概念介紹(必須看!)
1.1、Dubbo是什麼?
Dubbo是一個分散式服務框架,致力於提供高效能和透明化的RPC遠端服務呼叫方案,以及SOA服務治理方案。簡單的說,dubbo就是個服務框架,如果沒有分散式的需求,其實是不需要用的,只有在分散式的時候,才有dubbo這樣的分散式服務框架的需求,並且本質上是個服務呼叫的東東,說白了就是個遠端服務呼叫的分散式框架
其核心部分包含:
1》遠端通訊: 提供對多種基於長連線的NIO框架抽象封裝,包括多種執行緒模型,序列化,以及“請求-響應”模式的資訊交換方式。
2》叢集容錯: 提供基於介面方法的透明遠端過程呼叫,包括多協議支援,以及軟負載均衡,失敗容錯,地址路由,動態配置等叢集支援。
3》自動發現: 基於註冊中心目錄服務,使服務消費方能動態的查詢服務提供方,使地址透明,使服務提供方可以平滑增加或減少機器。
1.2. Dubbo能做什麼?
1.透明化的遠端方法呼叫,就像呼叫本地方法一樣呼叫遠端方法,只需簡單配置,沒有任何API侵入。
2.軟負載均衡及容錯機制,可在內網替代F5等硬體負載均衡器,降低成本,減少單點。
3. 服務自動註冊與發現,不再需要寫死服務提供方地址,註冊中心基於介面名查詢服務提供者的IP地址,並且能夠平滑新增或刪除服務提供者。
1.3. dubbo的架構
dubbo架構圖如下所示:
節點角色說明:
Provider: 暴露服務的服務提供方。
Consumer: 呼叫遠端服務的服務消費方。
Registry: 服務註冊與發現的註冊中心。
Monitor: 統計服務的呼叫次調和呼叫時間的監控中心。
Container: 服務執行容器。
對於這些角色來說,其他都還好,Monitor可能猿友們前期使用會把它忽略,但是後期會發現它的作用十分明顯哦,如服務的呼叫量越來越大,服務的容量問題就暴露出來,這個服務需要多少機器支撐?什麼時候該加機器?為了解決這個問題,第一步,要將服務現在每天的呼叫量,響應時間,都統計出來,作為容量規劃的參考指標。其次,要可以動態調整權重,在線上,將某臺機器的權重一直加大,並在加大的過程中記錄響應時間的變化,直到響應時間到達閥值,記錄此時的訪問量,再以此訪問量乘以機器數反推總容量。
呼叫關係說明:
0 服務容器負責啟動,載入,執行服務提供者。
1 服務提供者在啟動時,向註冊中心註冊自己提供的服務。
2 服務消費者在啟動時,向註冊中心訂閱自己所需的服務。
3 註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將基於長連線推送變更資料給消費者。
4 服務消費者,從提供者地址列表中,基於軟負載均衡演算法,選一臺提供者進行呼叫,如果呼叫失敗,再選另一臺呼叫。
5 服務消費者和提供者,在記憶體中累計呼叫次數和呼叫時間,定時每分鐘傳送一次統計資料到監控中心。
1.4. dubbo使用方法
Dubbo採用全Spring配置方式,透明化接入應用,對應用沒有任何API侵入,只需用Spring載入Dubbo的配置即可,Dubbo基於Spring的Schema擴充套件進行載入。如果不想使用Spring配置,而希望通過API的方式進行呼叫(不推薦)
Dubbo採用全Spring配置方式,透明化接入應用,對應用沒有任何API侵入,只需用Spring載入Dubbo的配置即可,Dubbo基於Spring的Schema擴充套件進行載入。
二、註冊中心、消費者、提供者搭建例項
只看理論不動手實踐好意思說自己是程式設計師麼?!!!必須搭建起來看看到底是什麼樣的!
或許你在公司有人搭建好給你使用,但是如果你不自己搭建一次,那麼很難去理解它的架構,而且一些配置檔案你不知道是什麼,那麼你一旦遇到一些問題,自己很難去解決。因此,十分建議猿友自己動手實踐一下。
更好的檢視目前釋出的介面的消費者和提供者,因此一般都會配置dubbo-admin,方便監控。一般企業使用dubbo也會搭建一個dubbo-admin的,因此建議猿友們也嘗試去搭建一下,流程是比較簡單的。關於dubbo-admi的搭建請看博文:http://blog.csdn.net/u013142781/article/details/50396621,寫的也是非常的詳細。
2.1、Zookeeper的搭建
2.2、配置提供者
2.2.1、建立provider專案如下:
2.2.2、配置pom.xml,如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.luo</groupId>
<artifactId>provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<spring.version>3.2.8.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<!-- spring相關 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</project>
2.2.3、新增配置檔案、介面和介面實現
src/main/java下新增包:com.luo.service,然後裡面新增介面TestService.java:
package com.luo.service;
public interface TestService {
public String getName();
}
src/main/java下新增包:com.luo.service.impl,然後裡面新增介面實現類TestServiceImpl.java:
package com.luo.service.impl;
import com.luo.service.TestService;
public class TestServiceImpl implements TestService {
public String getName() {
return "luoguohui";
}
}
src/main/resources下新增配置檔案application.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 ">
<!-- 具體的實現bean -->
<bean id="testService" class="com.luo.service.impl.TestServiceImpl" />
<!-- 提供方應用資訊,用於計算依賴關係 -->
<dubbo:application name="provider" />
<!-- 使用zookeeper註冊中心暴露服務地址 -->
<dubbo:registry address="zookeeper://127.0.0.1:2181" />
<!-- 用dubbo協議在20880埠暴露服務 -->
<dubbo:protocol name="dubbo" port="29014" />
<!-- 宣告需要暴露的服務介面 -->
<dubbo:service interface="com.luo.service.TestService" ref="testService" />
</beans>
src/test/java下新增包com.luo.service,然後裡面新增服務測試類TestServiceTest.java:
package com.luo.service;
import java.io.IOException;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestServiceTest {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
new String[]{"application.xml"});
context.start();
System.out.println("提供者服務已註冊成功");
try {
System.in.read();//讓此程式一直跑,表示一直提供服務
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.2.4、執行,注意順序,一定嚴格安照下面的順序
1、執行zookeeper
不要關閉黑框,讓它開啟著,zookeeper 2、執行dubbo-admin,這裡博主之前已經把它的war包放到tomcat的webapps下了,因此只需要執行tomcat(記得執行tomcat之前一定要把其啟動埠改成8090,原因請看博文http://blog.csdn.net/u013142781/article/details/50396621),好啟動tomcat:
然後訪問localhost:8090/dubbo-admin-2.5.4-SNAPSHOT,結果如下(使用者名稱/密碼:root/root),說明啟動dubbo-admin成功了
3、執行TestServiceTest,Run As –>Java Application,會看到控制檯如下:
保持這個provider一直啟動著。 同時在duubo-admin上搜索:com.luo.service.TestService,會看到如下結果:
ok,提供者完成!
2.3、配置消費者
2.3.1、建立maven專案,流程跟provider一樣,這裡我起的專案名為consumer,配置pom.xml檔案,如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.luo</groupId>
<artifactId>consumer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<spring.version>3.2.8.RELEASE</spring.version>
</properties>
<dependencies>
<!-- 新增provider的jar包 -->
<dependency>
<groupId>com.luo</groupId>
<artifactId>provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- 新增dubbo依賴 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 新增zk客戶端依賴 -->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<!-- spring相關 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</project>
其實就是在provider的基礎上添加了如下依賴(provider的依賴):
<!-- 新增provider的jar包 -->
<dependency>
<groupId>com.luo</groupId>
<artifactId>provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
2.3.2、新增如下兩個檔案
application.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" />
<!-- 使用multicast廣播註冊中心暴露發現服務地址 -->
<dubbo:registry protocol="zookeeper" address="zookeeper://127.0.0.1:2181" />
<!-- 生成遠端服務代理,可以和本地bean一樣使用demoService -->
<dubbo:reference id="testService" interface="com.luo.service.TestService" />
</beans>
ConsumerServiceTest.java的內容如下:
package com.luo.service;
import java.io.IOException;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class ConsumerServiceTest {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "application.xml" });
context.start();
TestService testService = (TestService) context.getBean("testService");
System.out.println(testService.getName());
try {
System.in.read();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.3.3、執行 在保持zookeeper、dubbo-admin和provider執行著的基礎上,執行ConsumerServiceTest.java,Run As –> Java Application,會看到控制檯如下:
控制檯內容luoguohui就是提供者打印出來的 另外也會看到dubbo-admin中com.luo.service.TestService有消費者了:
ok,完成!
3、原始碼下載(本人自己打的war包)
可用tomcat直接啟動
相關推薦
Dubbo分散式服務框架入門(附工程)
要想了解Dubbo是什麼,我們不防先了解它有什麼用。 使用場景:比如我想開發一個網上商城專案,這個網上商城呢,比較複雜,分為pc端web管理後臺,微信端銷售公眾號,那麼我們分成四個專案,pc端網站,微信端網站,還有一個後臺服務專案,介面服務專案。 對資料庫的操作的相關
Dubbo分散式服務框架入門(附工程)
要想了解Dubbo是什麼,我們不防先了解它有什麼用。 使用場景:比如我想開發一個網上商城專案,這個網上商城呢,比較複雜,分為pc端web管理後臺,微信端銷售公眾號,那麼我們分成四個專案,pc端網站,微信端網站,還有一個後臺服務專案,介面服務專案。 對資料庫的
Dubbo分散式服務框架入門實戰(附原始碼)
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Maven聚合工程,Dubbo分散式服務框架,SpringMVC,前後端分離專案
<!--spring載入--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/
一篇文章帶你深入瞭解Dubbo分散式服務框架
一、產生的背景 隨著網際網路的發展,網站應用的規模不斷擴大,常規的垂直應用架構已無法應對,分散式服務架構以及流動計算架構勢在必行,亟需一個治理系統確保架構有條不紊的演進。下面我們用一個圖來具體說明架構和開發框架的演進過程。單一應用架構當網站流量很小時,只需一個應用,將所有功能都部署在一起,以減少部署節點和成
Dubbo分散式服務框架搭建
一、zookeeper安裝與啟動 1.前往https://www.apache.org/dyn/closer.cgi/zookeeper/下載zookeeper。 2.將路徑zookeeper-3.5.2-alpha\conf下zoo_sample.cfg 改名為 zoo.cfg。 3.
阿里P8“架構師”帶你深入瞭解Dubbo分散式服務框架
一、產生的背景 隨著網際網路的發展,網站應用的規模不斷擴大,常規的垂直應用架構已無法應對,分散式服務架構以及流動計算架構勢在必行,亟需一個治理系統確保架構有條不紊的演進。下面我們用一個圖來具體說明架構和開發框架的演進過程。 單一應用架構 當網站流量很小時,只需一個
第五十四章:Dubbo分散式服務框架
Dubbo官網 什麼是Dubbo? 它有什麼特點?它的優點是什麼? 為什麼要使用它?有什麼功能?Dubbo能做什麼? 什麼是Dubbo? 1.Dubbo是一個分散式服務框架。 說明:如果沒有分散式的需求,其實是不需要用的,只有在分散式的時候,才有dubbo這
Maven多模組,Dubbo分散式服務框架,SpringMVC,前後端分離專案,基礎搭建,搭建過程出現的問題
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apac
【Dubbo分散式服務框架】2.基於配置的服務提供者和消費者
一個使用Dubbo的系統架構圖如下: 可分為以下幾個角色: (1)Provider:暴露服務的服務提供方。 (2)Consumer:呼叫遠端服務的服務消費方。 (3)Registry:服務註冊與發現的註冊中心。 (4)Monitor:統計服務的呼叫次調和呼叫時間的監控中心。
阿里巴巴分散式服務框架dubbo學習筆記
Dubbo是什麼? Dubbo是一個分散式服務框架,致力於提供高效能和透明化的RPC遠端服務呼叫方案,以及SOA服務治理方案。簡單的說,dubbo就是個服務框架,如果沒有分散式的需求,其實是不需要用的,只有在分散式的時候,才有dubbo這樣的分散式服務框架的需求,並且本質上是個服務呼叫的東東,說
Dubbo阿里Alibaba開源的分散式服務框架
Dubbo是什麼? Dubbo是阿里巴巴SOA服務化治理方案的核心框架,每天為2,000+個服務提供3,000,000,000+次訪問量支援,並被廣泛應用於阿里巴巴集團的各成員站點。 Dubbo是一個分散式服務框架,致力於提供高效能和透明化的RPC遠端服務呼叫方案,以及SOA服務治理方案。 其
Dubbo(x)相關(分散式服務框架)
Dubbo Dubbo是阿里的分散式服務框架,基於zookeeper實現,已於12年底停止維護升級 Dubbox是噹噹團隊基於dubbo升級的一個版本 與zookeeper的關係:Dubbo將註冊中心進行抽象,使得它可以外接不同的儲存媒介給註冊中心提供服務,有ZooKeeper,Memc
dubbo(開源分散式服務框架)-demo
dubbo-demo-api 提供服務者和消費者都需要介面名和方法名才能呼叫 dubbo-demo-consumer 服務消費者(消費者) dubbo-demo-provider 服務提供者(生產者) dubbo-demo-parent maven父版本提供者
dubbo(開源分散式服務框架)1---------Dubbo需要四大基本元件
Dubbo需要四大基本元件:Registry、Monitor、Provider、Consumer。 Provider:提供者 Consumer:消費者 registry:註冊中心(相當於中介) monitor:監控中心(dubbo自己的監控專案,直接解壓在tomcat下就
高可用分散式服務框架搭建(Dubbo、ZooKeeper)
以下是官方例項部署方法。此處涉及四個服務: zookeeper:註冊中心 dubbo-admin:服務管理後臺 dubbo-demo-provider:生產者(服務提供者) dubbo-demo-consumer:消費者(服務使用者) 需要注意的是,必
《分散式服務框架原理與實踐李林鋒著》pdf附網盤下載連結送給還在迷茫的你
Detect languageAfrikaansAlbanianAmharicArabicArmenianAzerbaijaniBasqueBelarusianBengaliBosnianBulgarianCatalanCebuanoChichewaChinese (Simplified)Chines
Dubbo-一個分散式服務框架
Dubbo的簡單介紹 Dubbo是一個分散式服務框架,致力於提供高效能和透明化的RPC遠端服務呼叫方案,說的簡單點,其最最最基本作用就是:高效的應用程式之間的通訊。如果服務越來越多,容量的評估,小服務資源的浪費等問題,這時Dubbo就是資源排程和治理中心的管理
分散式服務框架Dubbo的配置
一、Dubbo常用配置 dubbo:service 服務配置,用於暴露一個服務,定義服務的元資訊,一個服務可以用多個協議暴露,一個服務也可以註冊到多個註冊中心。 eg、<dubbo:service ref=“demoService” interface=
分散式服務框架-Dubbo
Dubbo是什麼 Dubbo是: 一款分散式服務框架 高效能和透明化的RPC遠端服務呼叫方案 SOA服務治理方案 每天為2千多個服務提供大於30億次訪問量支援,並被廣泛應用於阿里巴巴集團的各成員站點以及別的公司的業務中。 Dubbo架構 Provider: 暴