Dubbo的使用

博客鏈接地址:https://www.cnblogs.com/wang-meng/p/5791598.html



Dubbo是什么爷光?

Dubbo是阿里巴巴SOA服務(wù)化治理方案的核心框架,每天為2,000+個(gè)服務(wù)提供3,000,000,000+次訪問量支持澎粟,并被廣泛應(yīng)用于阿里巴巴集團(tuán)的各成員站點(diǎn)蛀序。

Dubbo[]是一個(gè)分布式服務(wù)框架,致力于提供高性能和透明化的RPC遠(yuǎn)程服務(wù)調(diào)用方案活烙,以及SOA服務(wù)治理方案徐裸。

其核心部分包含:

遠(yuǎn)程通訊: 提供對(duì)多種基于長連接的NIO框架抽象封裝,包括多種線程模型啸盏,序列化重贺,以及“請(qǐng)求-響應(yīng)”模式的信息交換方式。

集群容錯(cuò): 提供基于接口方法的透明遠(yuǎn)程過程調(diào)用,包括多協(xié)議支持檬姥,以及軟負(fù)載均衡曾我,失敗容錯(cuò),地址路由健民,動(dòng)態(tài)配置等集群支持抒巢。

自動(dòng)發(fā)現(xiàn): 基于注冊(cè)中心目錄服務(wù),使服務(wù)消費(fèi)方能動(dòng)態(tài)的查找服務(wù)提供方秉犹,使地址透明蛉谜,使服務(wù)提供方可以平滑增加或減少機(jī)器。


Dubbo能做什么崇堵?

透明化的遠(yuǎn)程方法調(diào)用型诚,就像調(diào)用本地方法一樣調(diào)用遠(yuǎn)程方法,只需簡單配置鸳劳,沒有任何API侵入狰贯。

軟負(fù)載均衡及容錯(cuò)機(jī)制,可在內(nèi)網(wǎng)替代F5等硬件負(fù)載均衡器赏廓,降低成本涵紊,減少單點(diǎn)。

服務(wù)自動(dòng)注冊(cè)與發(fā)現(xiàn)幔摸,不再需要寫死服務(wù)提供方地址摸柄,注冊(cè)中心基于接口名查詢服務(wù)提供者的IP地址,并且能夠平滑添加或刪除服務(wù)提供者既忆。


Spring集成

Dubbo采用全Spring配置方式驱负,透明化接入應(yīng)用,對(duì)應(yīng)用沒有任何API侵入患雇,只需用Spring加載Dubbo的配置即可跃脊,Dubbo基于Spring的Schema擴(kuò)展進(jìn)行加載。如果不想使用Spring配置庆亡,而希望通過API的方式進(jìn)行調(diào)用(不推薦)匾乓。

上面簡單介紹了Dubbo的一些概念, 這里再給一張圖來形象的形容下:


我們用這張圖來形容 , 那么映射到 項(xiàng)目中:? ? ? 當(dāng)我們?cè)诙鄠€(gè)Tomcat部署不同的系統(tǒng)時(shí), 例如A系統(tǒng)(TomcatA)想調(diào)用B系統(tǒng)(TomcatB)中的服務(wù), 這時(shí)Dubbo就有了用武之地. 首先我們需要B系統(tǒng)在注冊(cè)中心將自己的Url注冊(cè)進(jìn)去, 然后注冊(cè)中心將Url返還給系統(tǒng)A, 那么系統(tǒng)A就可以調(diào)用了. 當(dāng)然了我這里說的只是Dubbo的一種用法, 在這個(gè)項(xiàng)目中使用的也是Dubbo的遠(yuǎn)程調(diào)用功能. (感覺真的和webservice有點(diǎn)像)



下面就步入正題, 看看Dubbo在項(xiàng)目中的使用實(shí)例:

1, 在linux下安裝Zookeeper

這個(gè)地方就不詳細(xì)概述Zookeeper的安裝了, 前面關(guān)于Linux的博文已經(jīng)有講過在Linux下軟件的安裝了, 這里安裝好后直接啟動(dòng) Zookeeper.


zookeeper

2, 使用需求

在這里 當(dāng)我們有一種需求, 我們需要在后臺(tái)(console)去對(duì)商品(product)做一些操做, 而這里我們只能夠使用到公共的service方法, 那么怎么調(diào)用product中service的實(shí)現(xiàn)呢?

項(xiàng)目結(jié)構(gòu):


項(xiàng)目結(jié)構(gòu)

公共service方法:

TestTbService.java:

package cn.itcast.core.service;

import cn.itcast.core.bean.TestTb;

public interface TestTbService {

????? public void insertTestTb(TestTb testTb);

}


公共service方法

product中的service實(shí)現(xiàn)類:

TestTbService.java:

package cn.itcast.core.service;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import org.springframework.transaction.annotation.Transactional;

import cn.itcast.core.bean.TestTb;

import cn.itcast.core.dao.TestTbDao;

@Service("testTbService")

@Transactional

public class TestTbServiceImpl implements TestTbService {

? ? @Autowired

? ? private TestTbDao testTbDao;


? ? //保存

? ? public void insertTestTb(TestTb testTb){

? ? ? ? testTbDao.insertTestTb(testTb);

? ? }

}


product中的service實(shí)現(xiàn)類

在console中使用product中的service實(shí)現(xiàn)類:

CenterController.java:

package cn.itcast.core.controller;

import java.util.Date;

import org.junit.runners.model.TestTimedOutException;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.RequestMapping;

import cn.itcast.core.bean.TestTb;

import cn.itcast.core.service.TestTbService;

@Controller

public class CenterController {


? ? @Autowired

? ? private TestTbService testTbService;


? ? //測(cè)試

? ? @RequestMapping(value = "/test/index.do")

? ? public void index(Model model){


? ? ? ? TestTb testTb = new TestTb();

? ? ? ? testTb.setName("范冰冰");

? ? ? ? testTb.setBirthday(new Date());


? ? ? ? testTbService.insertTestTb(testTb);


? ? }

}


在console中使用product中的service實(shí)現(xiàn)類

如果這樣直接調(diào)用能夠行的通嗎? ?當(dāng)然是不行的, 在console里面定義的只是service方法, 那么這里是怎么直接調(diào)用到了product中的service實(shí)現(xiàn)類呢?

當(dāng)然了, 這里就需要一些配置文件了:

首先是需要在product中注冊(cè)服務(wù):

dubbo-provider.xml:

<beans xmlns="http://www.springframework.org/schema/beans"

? ? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"

? ? xmlns:context="http://www.springframework.org/schema/context"

? ? xmlns:aop="http://www.springframework.org/schema/aop"

? ? xmlns:tx="http://www.springframework.org/schema/tx"

? ? xmlns:task="http://www.springframework.org/schema/task"

? ? xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"

? ? xsi:schemaLocation="http://www.springframework.org/schema/beans

? ? ? ? http://www.springframework.org/schema/beans/spring-beans-4.0.xsd

? ? ? ? http://www.springframework.org/schema/mvc

? ? ? ? http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd

? ? ? ? http://www.springframework.org/schema/context

? ? ? ? http://www.springframework.org/schema/context/spring-context-4.0.xsd

? ? ? ? http://www.springframework.org/schema/aop

? ? ? ? http://www.springframework.org/schema/aop/spring-aop-4.0.xsd

? ? ? ? http://www.springframework.org/schema/tx

? ? ? ? http://www.springframework.org/schema/tx/spring-tx-4.0.xsd

? ? ? ? http://www.springframework.org/schema/task

? ? ? ? ? http://www.springframework.org/schema/task/spring-task-4.0.xsd

? ? ? ? http://code.alibabatech.com/schema/dubbo? ? ? ?

? ? ? ? http://code.alibabatech.com/schema/dubbo/dubbo.xsd">



? ? ? ? <!-- 整合Dubbo -->

? ? ? ? <!-- 第一步:Dubbo起名稱? ? 計(jì)算用此名稱來區(qū)分? -->

? ? ? ? <dubbo:application name="babasport-service-product"/>

? ? ? ? <!-- 第二步:中介? 注冊(cè)中心: zookeeper? redis ... -->

? ? ? ? <!-- <dubbo:registry address="192.168.200.128:2181,192.168.200.129:2181,192.168.200.130:2181" protocol="zookeeper"/> -->

? ? ? ? <dubbo:registry address="192.168.200.128:2181" protocol="zookeeper"/>

? ? ? ? <!-- 第三步:設(shè)置dubbo的端口號(hào)? ? 192.168.40.88:20880/接口? -->

? ? ? ? <dubbo:protocol name="dubbo" port="20880"/>

? ? ? ? <!-- 第四步:設(shè)置服務(wù)提供方 提供的接口 -->

? ? ? ? <dubbo:service interface="cn.itcast.core.service.TestTbService" ref="testTbService"/>


</beans>


在product中注冊(cè)服務(wù)

接下來就是在console中使用了:

服務(wù)消費(fèi)方:

dubbo-cusmer.xml:

<beans xmlns="http://www.springframework.org/schema/beans"

? ? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"

? ? xmlns:context="http://www.springframework.org/schema/context"

? ? xmlns:aop="http://www.springframework.org/schema/aop"

? ? xmlns:tx="http://www.springframework.org/schema/tx"

? ? xmlns:task="http://www.springframework.org/schema/task"

? ? xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"

? ? xsi:schemaLocation="http://www.springframework.org/schema/beans

? ? ? ? http://www.springframework.org/schema/beans/spring-beans-4.0.xsd

? ? ? ? http://www.springframework.org/schema/mvc

? ? ? ? http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd

? ? ? ? http://www.springframework.org/schema/context

? ? ? ? http://www.springframework.org/schema/context/spring-context-4.0.xsd

? ? ? ? http://www.springframework.org/schema/aop

? ? ? ? http://www.springframework.org/schema/aop/spring-aop-4.0.xsd

? ? ? ? http://www.springframework.org/schema/tx

? ? ? ? http://www.springframework.org/schema/tx/spring-tx-4.0.xsd

? ? ? ? http://www.springframework.org/schema/task

? ? ? ? ? http://www.springframework.org/schema/task/spring-task-4.0.xsd

? ? ? ? http://code.alibabatech.com/schema/dubbo? ? ? ?

? ? ? ? http://code.alibabatech.com/schema/dubbo/dubbo.xsd">


? ? ? ? <!-- 整合Dubbo -->

? ? ? ? <!-- 第一步:Dubbo起名稱? ? 計(jì)算用此名稱來區(qū)分? -->

? ? ? ? <dubbo:application name="babasport-console"/>

? ? ? ? <!-- 第二步:中介? 注冊(cè)中心? ? zookeeper? redis ... -->

? ? ? ? <!--<dubbo:registry address="192.168.200.128:2181,192.168.200.129:2181,192.168.200.130:2181" protocol="zookeeper"/> -->

? ? ? ? <dubbo:registry address="192.168.200.128:2181" protocol="zookeeper"/>

? ? ? ? <!-- 第三步:調(diào)用服務(wù)提供方 提供的接口 -->

? ? ? ? <dubbo:reference interface="cn.itcast.core.service.TestTbService" id="testTbService"/>


</beans>


在console中使用

剩下的就是啟動(dòng)服務(wù)了:

注意先啟動(dòng)服務(wù)提供方, 然后再啟動(dòng)服務(wù)消費(fèi)方.


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末捞稿,一起剝皮案震驚了整個(gè)濱河市又谋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌娱局,老刑警劉巖彰亥,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異衰齐,居然都是意外死亡任斋,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門耻涛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來废酷,“玉大人瘟檩,你說我怎么就攤上這事〕后。” “怎么了墨辛?”我有些...
    開封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長趴俘。 經(jīng)常有香客問我睹簇,道長,這世上最難降的妖魔是什么寥闪? 我笑而不...
    開封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任太惠,我火速辦了婚禮,結(jié)果婚禮上疲憋,老公的妹妹穿的比我還像新娘凿渊。我一直安慰自己,他們只是感情好缚柳,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開白布嗽元。 她就那樣靜靜地躺著,像睡著了一般喂击。 火紅的嫁衣襯著肌膚如雪剂癌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天翰绊,我揣著相機(jī)與錄音佩谷,去河邊找鬼。 笑死监嗜,一個(gè)胖子當(dāng)著我的面吹牛谐檀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播裁奇,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼桐猬,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了刽肠?” 一聲冷哼從身側(cè)響起溃肪,我...
    開封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎音五,沒想到半個(gè)月后惫撰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡躺涝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年厨钻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡夯膀,死狀恐怖诗充,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情诱建,我是刑警寧澤其障,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站涂佃,受9級(jí)特大地震影響励翼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜辜荠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一汽抚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧伯病,春花似錦造烁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至药磺,卻和暖如春告组,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背癌佩。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工木缝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人围辙。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓我碟,卻偏偏與公主長得像,于是被迫代替她去往敵國和親姚建。 傳聞我的和親對(duì)象是個(gè)殘疾皇子矫俺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容