1. 程式人生 > >Dubbo的使用及原理淺析.

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的&#39;+&#39;的性能原理

變量 height 操作 通過 效率 調用 java -h 方法 逛了幾個論壇。不少人在討論String的“+”,StringBuilder與StringBuffer等一系列的問題。先不多說了了 現分類詳述: 1、String的‘+’,底層運行。