Dubbo的使用及原理淺析.
前面幾個博文中關於SSM 框架已經搭建完成, 這裡來講下專案中使用到的Dubbo以及自己瞭解到的關於Dubbo的一些知識.
Dubbo是什麼?
Dubbo是阿里巴巴SOA服務化治理方案的核心框架,每天為2,000+個服務提供3,000,000,000+次訪問量支援,並被廣泛應用於阿里巴巴集團的各成員站點。 Dubbo[]是一個分散式服務框架,致力於提供高效能和透明化的RPC遠端服務呼叫方案,以及SOA服務治理方案。其核心部分包含:
- 遠端通訊: 提供對多種基於長連線的NIO框架抽象封裝,包括多種執行緒模型,序列化,以及“請求-響應”模式的資訊交換方式。
- 叢集容錯: 提供基於介面方法的透明遠端過程呼叫,包括多協議支援,以及軟負載均衡,失敗容錯,地址路由,動態配置等叢集支援。
- 自動發現: 基於註冊中心目錄服務,使服務消費方能動態的查詢服務提供方,使地址透明,使服務提供方可以平滑增加或減少機器。
Dubbo能做什麼?
- 透明化的遠端方法呼叫,就像呼叫本地方法一樣呼叫遠端方法,只需簡單配置,沒有任何API侵入。
- 軟負載均衡及容錯機制,可在內網替代F5等硬體負載均衡器,降低成本,減少單點。
- 服務自動註冊與發現,不再需要寫死服務提供方地址,註冊中心基於介面名查詢服務提供者的IP地址,並且能夠平滑新增或刪除服務提供者。
Spring整合
Dubbo採用全Spring配置方式,透明化接入應用,對應用沒有任何API侵入,只需用Spring載入Dubbo的配置即可,Dubbo基於Spring的Schema擴充套件進行載入。上面簡單介紹了Dubbo的一些概念, 這裡再給一張圖來形象的形容下:
我們用這張圖來形容 , 那麼對映到 專案中:
當我們在多個Tomcat部署不同的系統時, 例如A系統(TomcatA)想呼叫B系統(TomcatB)中的服務, 這時Dubbo就有了用武之地. 首先我們需要B系統在註冊中心將自己的Url註冊進去, 然後註冊中心將Url返還給系統A, 那麼系統A就可以呼叫了. 當然了我這裡說的只是Dubbo的一種用法, 在這個專案中使用的也是Dubbo的遠端呼叫功能. (感覺真的和webservice有點像)
下面就步入正題, 看看Dubbo在專案中的使用例項:
1, 在linux下安裝Zookeeper
這個地方就不詳細概述Zookeeper的安裝了, 前面關於Linux的博文已經有講過在Linux下軟體的安裝了, 這裡安裝好後直接啟動 Zookeeper.
2, 使用需求
在這裡 當我們有一種需求, 我們需要在後臺(console)去對商品(product)做一些操做, 而這裡我們只能夠使用到公共的service方法, 那麼怎麼呼叫product中service的實現呢?
專案結構:
公共service方法:
TestTbService.java:
package cn.itcast.core.service; 2 3 import cn.itcast.core.bean.TestTb; 4 5 public interface TestTbService { 6 public void insertTestTb(TestTb testTb); 7 }
product中的service實現類:
TestTbService.java:
package cn.itcast.core.service; 2 3 import org.springframework.beans.factory.annotation.Autowired; 4 import org.springframework.stereotype.Service; 5 import org.springframework.transaction.annotation.Transactional; 6 7 import cn.itcast.core.bean.TestTb; 8 import cn.itcast.core.dao.TestTbDao; 9 10 @Service("testTbService") 11 @Transactional 12 public class TestTbServiceImpl implements TestTbService { 13 14 @Autowired 15 private TestTbDao testTbDao; 16 17 //儲存 18 public void insertTestTb(TestTb testTb){ 19 testTbDao.insertTestTb(testTb); 20 } 21 }
在contoller中使用product中的service實現類:
CenterController.java:
package cn.itcast.core.controller; 2 3 import java.util.Date; 4 5 import org.junit.runners.model.TestTimedOutException; 6 import org.springframework.beans.factory.annotation.Autowired; 7 import org.springframework.stereotype.Controller; 8 import org.springframework.ui.Model; 9 import org.springframework.web.bind.annotation.RequestMapping; 10 11 import cn.itcast.core.bean.TestTb; 12 import cn.itcast.core.service.TestTbService; 13 14 @Controller 15 public class CenterController { 16 17 @Autowired 18 private TestTbService testTbService; 19 20 //測試 21 @RequestMapping(value = "/test/index.do") 22 public void index(Model model){ 23 24 TestTb testTb = new TestTb(); 25 testTb.setName("范冰冰"); 26 testTb.setBirthday(new Date()); 27 28 testTbService.insertTestTb(testTb); 29 30 } 31 }
如果這樣直接呼叫能夠行的通嗎? 當然是不行的, 在controller裡面定義的只是service方法, 那麼這裡是怎麼直接呼叫到了product中的service實現類呢?
當然了, 這裡就需要一些配置檔案了:
首先是需要在product中註冊服務:
dubbo-provider.xml:
<beans xmlns="http://www.springframework.org/schema/beans" 2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" 3 xmlns:context="http://www.springframework.org/schema/context" 4 xmlns:aop="http://www.springframework.org/schema/aop" 5 xmlns:tx="http://www.springframework.org/schema/tx" 6 xmlns:task="http://www.springframework.org/schema/task" 7 xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" 8 xsi:schemaLocation="http://www.springframework.org/schema/beans 9 http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 10 http://www.springframework.org/schema/mvc 11 http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd 12 http://www.springframework.org/schema/context 13 http://www.springframework.org/schema/context/spring-context-4.0.xsd 14 http://www.springframework.org/schema/aop 15 http://www.springframework.org/schema/aop/spring-aop-4.0.xsd 16 http://www.springframework.org/schema/tx 17 http://www.springframework.org/schema/tx/spring-tx-4.0.xsd 18 http://www.springframework.org/schema/task 19 http://www.springframework.org/schema/task/spring-task-4.0.xsd 20 http://code.alibabatech.com/schema/dubbo 21 http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> 22 23 24 <!-- 整合Dubbo --> 25 <!-- 第一步:Dubbo起名稱 計算用此名稱來區分 --> 26 <dubbo:application name="babasport-service-product"/> 27 <!-- 第二步:中介 註冊中心: zookeeper redis ... --> 28 <!-- <dubbo:registry address="192.168.200.128:2181,192.168.200.129:2181,192.168.200.130:2181" protocol="zookeeper"/> --> 29 <dubbo:registry address="192.168.200.128:2181" protocol="zookeeper"/> 30 <!-- 第三步:設定dubbo的埠號 192.168.40.88:20880/介面 --> 31 <dubbo:protocol name="dubbo" port="20880"/> 32 <!-- 第四步:設定服務提供方 提供的介面 --> 33 <dubbo:service interface="cn.itcast.core.service.TestTbService" ref="testTbService"/> 34 35 </beans>
接下來就是在controller中使用了:
服務消費方:
dubbo-cusmer.xml:
<beans xmlns="http://www.springframework.org/schema/beans" 2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" 3 xmlns:context="http://www.springframework.org/schema/context" 4 xmlns:aop="http://www.springframework.org/schema/aop" 5 xmlns:tx="http://www.springframework.org/schema/tx" 6 xmlns:task="http://www.springframework.org/schema/task" 7 xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" 8 xsi:schemaLocation="http://www.springframework.org/schema/beans 9 http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 10 http://www.springframework.org/schema/mvc 11 http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd 12 http://www.springframework.org/schema/context 13 http://www.springframework.org/schema/context/spring-context-4.0.xsd 14 http://www.springframework.org/schema/aop 15 http://www.springframework.org/schema/aop/spring-aop-4.0.xsd 16 http://www.springframework.org/schema/tx 17 http://www.springframework.org/schema/tx/spring-tx-4.0.xsd 18 http://www.springframework.org/schema/task 19 http://www.springframework.org/schema/task/spring-task-4.0.xsd 20 http://code.alibabatech.com/schema/dubbo 21 http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> 22 23 <!-- 整合Dubbo --> 24 <!-- 第一步:Dubbo起名稱 計算用此名稱來區分 --> 25 <dubbo:application name="babasport-console"/> 26 <!-- 第二步:中介 註冊中心 zookeeper redis ... --> 27 <!--<dubbo:registry address="192.168.200.128:2181,192.168.200.129:2181,192.168.200.130:2181" protocol="zookeeper"/> --> 28 <dubbo:registry address="192.168.200.128:2181" protocol="zookeeper"/> 29 <!-- 第三步:呼叫服務提供方 提供的介面 --> 30 <dubbo:reference interface="cn.itcast.core.service.TestTbService" id="testTbService"/> 31 32 </beans>
剩下的就是啟動服務了:
注意先啟動服務提供方, 然後再啟動服務消費方.
相關推薦
Dubbo解析及原理淺析
一、Duboo基本概念解釋 Dubbo是一種分散式服務框架。 Webservice也是一種服務框架,但是webservice並不是分散式的服務框架,他需要結合F5實現負載均衡。因此,dubbo除了可以提供服務之外,還可以實現軟負載均衡。它還提供了兩個功能Mon
Dubbo的使用及原理淺析.
前面幾個博文中關於SSM 框架已經搭建完成, 這裡來講下專案中使用到的Dubbo以及自己瞭解到的關於Dubbo的一些知識. Dubbo是什麼? Dubbo是阿里巴巴SOA服務化治理方案的核心框架,每天為2,000+個服務提供3,000,000,000+次訪問量支援,並被廣泛應用於阿里巴巴集團的各成員站點。
hashMap 1.8 原始碼及原理淺析
這裡主要講原始碼流程,原理只做簡單介紹 hashMap原理淺析 hashMap 的結構是由陣列+連結串列構成,陣列為Node[] table,連結串列節點為Node。 map.put(key,value),根據(table.length - 1)
Dubbo+Spring原理淺析
Dubbo是一個分散式服務框架,致力於提供高效能和透明化的RPC遠端服務呼叫方案,以及SOA服務治理方案 特點: 遠端通訊:提供對多種基於長連線的NIO框架抽象封裝,包括多種縣城模型,序列化,以及"請求-響應"模式的資訊交換方式 叢集容錯:提供基於介面方法的透明遠端過程嗲用,
Dubbo效能調優引數及原理
Dubbo呼叫模型 常用效能調優引數 原始碼及原理分析 threads FixedThreadPool.java public Executor getExecutor(URL url) { Stri
HDFS(NameNode)聯盟的搭建及原理的淺析
一、搭建HDFS聯盟 1、為什麼引入HDFS(NameNode)聯盟? 引入Federation的最主要原因是簡單,其簡單性是與真正的分散式Namenode相比而言的。Federation能夠快速的解決了大部分單Namenode HDFS的問題。 Federation是簡單魯棒的設計,由
解讀Dubbo原始碼之ZooKeeper——主要功能及原理
本文轉自:https://blog.csdn.net/weijifeng_/article/details/79775738 一 、Zookeeper功能簡介 ZooKeeper是一個開源的分散式協調服務,由雅虎建立,是Google Chubby的開源實現。分散式應用程式可以基於ZooKee
淺析RxJava 1.x&2.x版本使用區別及原理(一):Observable、Flowable等基本元素原始碼解析
RxJava開源框架的風靡程度在Github上無需多言,它帶來的響應式程式設計模式和執行緒隨意切換、巢狀請求、背壓等功能給了開發者耳目一新的體驗,更是成為了大多數APP中常用的RxJava+Okhttp/Retrofit+MVP/MVVM/Clean黃金組合中的
OCR原理淺析及應用場景
OCR原理淺析 從整體上來說,OCR一般分為兩個大步驟:影象處理以及文字識別。 參考:OCR 技術淺析 OCR應用場景 OCR是技術,基於OCR的應用場景就非常多了。比如:ocr綜合文
【備忘】2018年8月新Dubbo視訊基礎入門高可用搭建及原理講解
dubbo是目前分散式系統開發裡面使用非常多的一個RPC框架。本套視訊從分散式系統的基本概念出發,由淺入深,講解了RPC原理,Dubbo基本使用,Dubbo高可用場景以及Dubbo原理,涉及了分散式系統中服務註冊、服務發現、負載均衡、灰度釋出、叢集容錯、服務降級等核心概念的
Dubbo 服務呼叫原理淺析
dubbo概念dubbo原理dubbo應用場景 Dubbo概念: Dubbo是一個分散式服務框架,致力於提供高效能和透明化的RPC遠端服務呼叫方案,以及SOA服務治理方案。簡單的說,du
spring事務原理淺析及相關屬性分析(轉)
一、事務的基本原理Spring事務的本質其實就是資料庫對事務的支援,沒有資料庫的事務支援,spring是無法提供事務功能的。對於純JDBC操作資料庫,想要用到事務,可以按照以下步驟進行:獲取連線 Connection con = DriverManager.getConnec
Tomcat的概念及啟動原理淺析
Tomcat概念及原理 Servlet(server applet 服務端小程式)是一種國際組織的協議、約定. Tomcat只是針對Servlet協議的規範做了封裝,其他這樣的軟體還有jetty等. Tomcat總體結構 Server –> S
mysql線程池的實現原理淺析
new one lose clear pre turn logs color 否則 今天抽空主要看了一下mysql線程池(cached threads)的實現原理,總體並不那麽復雜,也學到了一些設計原理,值得記錄一下。為了簡化代碼,讓思路更清晰,我刪去了不少錯誤處理,線程同
一個實驗搞定華為hybrid-vlan基本配置及原理
華為 hybrid-vlan實驗拓撲:2. 實驗需求:PC1和PC3屬於VLAN10 PC2和PC4屬於VLAN20 PC5和PC6屬於VLAN30。VLAN10和20的成員都可以和VLAN30中PC5通信,但是VLAN10和VLAN20的成員之間不能通信(通過二層技術實現此需求,就是華為Hybrid
async源碼學習 - waterfall函數的使用及原理實現
color logs 這一 per () create was ret ray waterfall函數會連續執行數組中的函數,每次通過數組下一個函數的結果。然而,數組任務中的任意一個函數結果傳遞失敗,那麽該函數的下一個函數將不會執行,並且主回調函數立馬把錯誤作為參數執行。以
常用 JavaScript 小技巧及原理詳解
this lin slice pen global 轉化 script lis fun 善於利用JS中的小知識的利用,可以很簡潔的編寫代碼 1. 使用!!模擬Boolean()函數 原理:邏輯非操作一個數據對象時,會先將數據對象轉換為布爾值,然後取反,兩個!!重復取反,就實
JS對象創建常用方式及原理分析
原型模式 這樣的 前言 values 一句話 開始 creat 動態原型 1-1 ====此文章是稍早前寫的,[email protected]/* */==== 前言 俗話說“在js語言中,一切都對象”,而且創建對象的方式也有很多種,所以今天我們做一下梳理 最
solr搜索之入門及原理(一)
solr solr入門 1 solr簡介solr官方文檔:http://wiki.apache.org/solr/DataImportHandler 下載地址:http://www.apache.org/dyn/closer.cgi/lucene/solr/2 solr入門我們使
String的'+'的性能及原理
變量 height 操作 通過 效率 調用 java -h 方法 逛了幾個論壇。不少人在討論String的“+”,StringBuilder與StringBuffer等一系列的問題。先不多說了了 現分類詳述: 1、String的‘+’,底層運行。