Dubbo框架詳解

来源:http://www.cnblogs.com/nothing18/archive/2017/08/14/7359841.html
-Advertisement-
Play Games

概覽 Dubbo是阿裡巴巴SOA服務化治理方案的核心框架,每天為2,000+個服務提供3,000,000,000+次訪問量支持,並被廣泛應用於阿裡巴巴集團的各成員站點(Alibaba.com、1688.com、Aliexpress.com、阿裡雲、阿裡學院等等),自開源後,已有不少非阿裡系公司在使用 ...


概覽

Dubbo是阿裡巴巴SOA服務化治理方案的核心框架,每天為2,000+個服務提供3,000,000,000+次訪問量支持,並被廣泛應用於阿裡巴巴集團的各成員站點(Alibaba.com、1688.com、Aliexpress.com、阿裡雲、阿裡學院等等),自開源後,已有不少非阿裡系公司在使用Dubbo。我們公司在此次的內網項目中則加入了Dubbo框架來實現分散式架構。

那麼,Dubbo是什麼?

Dubbo 是一個分散式服務框架,致力於提供高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。 其核心部分包含:

  • 遠程通訊: 提供對多種基於長連接的NIO框架抽象封裝,包括多種線程模型,序列化,以及“請求-響應”模式的信息交換方式。
  • 集群容錯: 提供基於介面方法的透明遠程過程調用,包括多協議支持,以及軟負載均衡,失敗容錯,地址路由,動態配置等集群支持。
  • 自動發現: 基於註冊中心目錄服務,使服務消費方能動態的查找服務提供方,使地址透明,使服務提供方可以平滑增加或減少機。

Dubbo能做什麼?

  • 透明化的遠程方法調用,就像調用本地方法一樣調用遠程方法,只需簡單配置,沒有任何API侵入。
  • 軟負載均衡及容錯機制,可在內網替代F5等硬體負載均衡器,降低成本,減少單點。
  • 服務自動註冊與發現,不再需要寫死服務提供方地址,註冊中心基於介面名查詢服務提供者的IP地址,並且能夠平滑添加或刪除服務提供者。

示例DEMO

通過一個簡單的demo從代碼層面介紹瞭如何使用dubbo開發一個遠程通信服務。快速啟動&源碼下載,參見Github
通過這個例子,你將學會:

  • 定義一個遠程服務介面
  • provider發佈遠程服務到註冊中心
  • consumer自動發現遠程服務並完成服務調用

定義介面

定義服務介面: (該介面需單獨打包,在服務提供方和消費方共用)

DemoService.java

1 package com.alibaba.dubbo.demo;
2 
3 public interface DemoService {
4     String sayHello(String name);
5 }

Provider實現

服務提供方實現介面(對服務消費方隱藏實現):

DemoServiceImpl.java

1 package com.alibaba.dubbo.demo.provider;
2 import com.alibaba.dubbo.demo.DemoService;
3 
4 public class DemoServiceImpl implements DemoService {
5     public String sayHello(String name) {
6         return "Hello " + name;
7     }
8 }

用Spring配置聲明暴露服務:

duboo-demo-provider.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
 5     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">
 6 
 7     <!-- 提供方應用信息,用於計算依賴關係 -->
 8     <dubbo:application name="demo-provider"  />
 9 
10     <!-- 使用multicast廣播註冊中心暴露服務地址 -->
11     <dubbo:registry address="multicast://224.5.6.7:1234" />
12 
13     <!-- 用dubbo協議在20880埠暴露服務 -->
14     <dubbo:protocol name="dubbo" port="20880" />
15 
16     <!-- 聲明需要暴露的服務介面 -->
17     <dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService" />
18 
19     <!-- 和本地bean一樣實現服務 -->
20     <bean id="demoService" class="com.alibaba.dubbo.demo.provider.DemoServiceImpl" />
21 
22 </beans>

載入Spring配置:

Provider.java

 1 import org.springframework.context.support.ClassPathXmlApplicationContext;
 2 
 3 public class Provider {
 4     public static void main(String[] args) throws Exception {
 5         ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"META-INF/spring/dubbo-demo-provider.xml"});
 6         context.start();
 7 
 8         System.in.read(); // 按任意鍵退出
 9     }
10 }

Consumer實現

通過Spring配置引用遠程服務:

dubbo-demo-consumer.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
 5     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">
 6 
 7     <!-- 消費方應用名,用於計算依賴關係,不是匹配條件,不要與提供方一樣 -->
 8     <dubbo:application name="demo-consumer"  />
 9 
10     <!-- 使用multicast廣播註冊中心暴露發現服務地址 -->
11     <dubbo:registry address="multicast://224.5.6.7:1234" />
12 
13     <!-- 生成遠程服務代理,可以和本地bean一樣使用demoService -->
14     <dubbo:reference id="demoService" interface="com.alibaba.dubbo.demo.DemoService" />
15 
16 </beans>

載入Spring配置,並調用遠程服務:(也可以使用IoC註入)

Consumer.java

 1 import org.springframework.context.support.ClassPathXmlApplicationContext;
 2 import com.alibaba.dubbo.demo.DemoService;
 3 
 4 public class Consumer {
 5     public static void main(String[] args) throws Exception {
 6         ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"META-INF/spring/dubbo-demo-consumer.xml"});
 7         context.start();
 8 
 9         DemoService demoService = (DemoService)context.getBean("demoService"); // 獲取遠程服務代理
10         String hello = demoService.sayHello("world"); // 執行遠程方法
11 
12         System.out.println( hello ); // 顯示調用結果
13     }
14 }

轉載自Dubbo官網。                                                                                                                                                                                                                                                           回到頂部


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 177761 Accepted Submission(s): 44124 Problem Desc ...
  • 放假以來,伺服器Apache二次崩掉了,不能再拖了,找bug解決; <! more 崩掉的具體狀況是,伺服器出現彈框顯示:Apache停止工作; 順手關掉這個可惡的小彈框,世界就清靜了,伺服器正常運行; 具體問題: lxx__lxx__lxx__lxx__lxx__lxx__lxx__lxx____ ...
  • 關於python正則表達式學習小結: 1.首先推薦學習網站: 菜鳥學習:http://www.runoob.com/python/python-reg-expressions.html 慕課網:http://www.imooc.com/learn/550 自強學堂:http://code.ziqia ...
  • 首先瞭解Statement和PreparedStatement的區別: 由此可見,一般使用PreparedStatement。 操作資料庫SU(Course表),其中Course屬性有Cno,Cname,Cpno,Ccredit。 運行程式,控制台輸出符合條件的數據。 最後總結如下: * Prepa ...
  • 什麼是函數 函數是組織好的,可重覆使用的,用來實現單一,或相關聯功能的代碼段。函數能提高應用的模塊性,和代碼的重覆利用率。你已經知道Python提供了許多內建函數,比如print()。但你也可以自己創建函數,這被叫做用戶自定義函數。 python函數格式: 註意了,函數一定是有返回值,沒有返回值,就 ...
  • 題目描述 如題,現在有一個並查集,你需要完成合併和查詢操作。 輸入輸出格式 輸入格式: 第一行包含兩個整數N、M,表示共有N個元素和M個操作。 接下來M行,每行包含三個整數Zi、Xi、Yi 當Zi=1時,將Xi與Yi所在的集合合併 當Zi=2時,輸出Xi與Yi是否在同一集合內,是的話輸出Y;否則話輸 ...
  • 當資料庫中數據條數過多時,一個頁面就不能顯示,這是要設置分頁查詢,首先要使用的是資料庫sql語句的limit條件實現分組查詢sql語句大概形式為: select * from table limit 開始索引,顯示條數 用該語句就會實現分塊查詢,並且每頁顯示固定條數。首先要實現後臺分頁,我們需要知道 ...
  • php 基於socket的基本通信 1、前言 Socket是應用層與TCP/IP協議族通信的中間軟體抽象層,它是一組介面。在設計模式中,Socket其實就是一個門面模式,它把複雜的TCP/IP協議族隱藏在Socket介面後面,對用戶來說,一組簡單的介面就是全部,讓Socket去組織數據,以符合指定的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...