国产免费观看青青草原网站_久久精品视频色悠悠_影音先锋激情5566_日本一區二區三區免費高清在線_麻豆精品一区综合av_丰满的大屁股一区二区_男女啪啪免费网站_草莓视频app在线观看下载_午夜寂寞少妇AA片_混乱的生物课月老师后续视频

 
您現(xiàn)在的位置:首頁 ? 知識庫 ? 軟件開發(fā) 軟件開發(fā)
Dubbo分布式服務(wù)框架
發(fā)布日期:2018-04-11

Dubbo是是一個(gè)高性能,基于Java的RPC框架,由阿里巴巴開源。一個(gè)分布式的服務(wù)框架??梢詫?shí)現(xiàn)SOA(面向服務(wù)的架構(gòu))架構(gòu)。 Dubbo使用的公司:京東、當(dāng)當(dāng)、阿里巴巴、中國電信等等。

分布式服務(wù)架構(gòu)的由來

以下式架構(gòu)演變過程(以下案例純粹為了說明問題,跟業(yè)務(wù)本身無關(guān)):

早期,電信只有座機(jī)的時(shí)候,系統(tǒng)只有一個(gè)打電話的功能和一個(gè)計(jì)費(fèi)的功能。因?yàn)闃I(yè)務(wù)單一,所以只有一個(gè)系統(tǒng)。

  • 單一業(yè)務(wù)的單體式架構(gòu)

后來,電信業(yè)務(wù)豐富起來了。新增了“短信”、“寬帶”、“手機(jī)流量”等業(yè)務(wù)功能。按照常規(guī)做法,也只會在原有的“打電話”單一業(yè)務(wù)系統(tǒng)的基礎(chǔ)上,多添加幾個(gè)業(yè)務(wù)功能模塊而已。所有的業(yè)務(wù)功能(““電話”、“短信”、“寬帶”、“手機(jī)流量””)都還是在一個(gè)項(xiàng)目內(nèi)部。如下圖:

  • 多業(yè)務(wù)單體式架構(gòu)

多業(yè)務(wù)模式下的單體架構(gòu),當(dāng)業(yè)務(wù)不斷擴(kuò)張、系統(tǒng)內(nèi)部的業(yè)務(wù)功能模塊越來越多,會導(dǎo)致如下問題:

1、會導(dǎo)致業(yè)務(wù)功能模塊的耦合度太高、不利于擴(kuò)展和維護(hù),以及推廣。

2、再者程序中存在一個(gè)魔性的數(shù)字:65535(16bit最大值)限制,(因?yàn)檎{(diào)用方法的指令容量只有16bit,65535正好是16bit能容納的最大數(shù)字)。重復(fù)的方法數(shù)太多,會加速達(dá)到這個(gè)上限。(比如Android 應(yīng)用65535很容易就上限了)。

比如淘寶、天貓、阿里巴巴三個(gè)項(xiàng)目都需要用到支付,設(shè)想,將淘寶、天貓、阿里巴巴三個(gè)項(xiàng)目整合成一個(gè)項(xiàng)目的三個(gè)業(yè)務(wù)功能模塊,將會比較雜亂。所以,出現(xiàn)了淘寶、天貓、阿里巴巴三個(gè)獨(dú)立的項(xiàng)目,類似下圖:

  • 垂直架構(gòu)

通過一步一步演變,架構(gòu)已經(jīng)成為如圖所示的垂直式架構(gòu)。但是大家都發(fā)現(xiàn)了其中的計(jì)費(fèi)功能出現(xiàn)了4次。這樣肯定不利于項(xiàng)目的維護(hù)和統(tǒng)一配置。(并且上圖的計(jì)費(fèi)只是眾多可能重復(fù)模塊中的一員)。所以不得不將多個(gè)項(xiàng)目都要使用的相同模塊獨(dú)立出來,共享給業(yè)務(wù)功能使用。這樣,就演變成如下圖架構(gòu):

如圖所示,計(jì)費(fèi)被單獨(dú)提煉出來成為一個(gè)獨(dú)立的app,共其他app共同使用。圖中“其他”模塊用來代替千千萬萬類似計(jì)費(fèi)的模塊。

這樣一來,每一個(gè)方塊就是一個(gè)獨(dú)立的應(yīng)用。這樣解決了業(yè)務(wù)復(fù)雜度,將業(yè)務(wù)模塊化、獨(dú)立化,方便共享和擴(kuò)展。這樣的架構(gòu)帶給我們需要解決的問題如下:

1、各個(gè)獨(dú)立app之間的通信問題怎么解決?

2、怎么做到統(tǒng)一調(diào)度、協(xié)調(diào)處理。

3、如果計(jì)費(fèi)模塊是并發(fā)最大的模塊,但是其他模塊并發(fā)不是很大。則需要對計(jì)費(fèi)進(jìn)行負(fù)載均衡,怎么實(shí)現(xiàn)?

架構(gòu)演變過程

什么是RPC?

RPC(Remote Procedure Call Protocol)遠(yuǎn)程過程調(diào)用協(xié)議。服務(wù)器A調(diào)用服務(wù)器B上的方法的一種技術(shù)。Dubbo就是一個(gè)RPC框架,實(shí)現(xiàn)了遠(yuǎn)程過程調(diào)用。

Dubbo的原理圖

dubbo主要的三個(gè)要素:1、接口的遠(yuǎn)程調(diào)用2、負(fù)載均衡。3、服務(wù)自動注冊和發(fā)現(xiàn)

Dubbo的使用

1、說明

Dubbo框架需要有注冊中心,本案例中使用Redis作為Dubbo的注冊中心。除了Redis外,Zookeeper等也可以作為Dubbo的注冊中心。

2、環(huán)境要求

JDK 1.6以上。

3、添加依賴

<dependencies> <!-- https://mvnrepository.com/artifact/com.alibaba/dubbo --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.5</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.8.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.11.RELEASE</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>4.3.11.RELEASE</version> </dependency> </dependencies>

4、定義Dubbo服務(wù)接口

其實(shí)就是創(chuàng)建一個(gè)獨(dú)立的module(并且在pom.xml導(dǎo)入以上依賴),在module中創(chuàng)建一些接口和方法(也叫服務(wù))。比如在dubbo_service_interface中創(chuàng)建一個(gè)接口IDubboService,代碼如下:

package com.javen.dubbo.service;import java.util.List;/*** Dubbo的服務(wù)* @author yangjw*/public interface IDubboService { List<String> getData(String data);}

5、定義服務(wù)提供者(接口具體實(shí)現(xiàn)者)

創(chuàng)建另外一個(gè)module,命名dubbo_provider1(并且在pom.xml導(dǎo)入以上依賴)。將dubbo_service_interface作為依賴添加進(jìn)來。

1、在其中創(chuàng)建類DubboService,并且繼承IDubboService接口。代碼如下:

package com.javen.dubbo.provider;import com.javen.dubbo.service.IDubboService;import org.springframework.stereotype.Component;import java.util.ArrayList;import java.util.List;/*** 服務(wù)提供者* @author yangjw*/@Component("dubboService")public class DubboService implements IDubboService{ public List<String> getData(String data) { ArrayList<String> list = new ArrayList<String>(); list.add("這是Dubbo中Provider返回的數(shù)據(jù):" + data); return list; }}

2、配置spring-dubbo.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:context="http://www.springframework.org/schema/context" 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://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <context:annotation-config/> <context:component-scan base-package="com.javen.dubbo.provider"/> <!--配置dubbo服務(wù)的唯一名稱 --> <dubbo:application name="dubbo_provider1"/> <!--將服務(wù)注冊到redis中,并且配置協(xié)議和端口為20880--> <dubbo:registry address="redis://192.168.72.188:6379"/> <dubbo:protocol name="dubbo" port="20880"/> <!--配置服務(wù)接口,ref關(guān)聯(lián)到服務(wù)實(shí)現(xiàn)類--> <dubbo:service interface="com.javen.dubbo.service.IDubboService" ref="dubboService"/></beans>

3、啟動Provider,代碼如下:

package com.javen.dubbo.provider;import org.springframework.context.support.ClassPathXmlApplicationContext;import java.io.IOException;public class StartProvider { public static void main(String[] args) throws IOException { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( new String[] {"spring-dubbo.xml"}); System.out.println("服務(wù)1啟動~~~"); context.start(); //線程阻塞:保證服務(wù)一直存在,如果線程結(jié)束,服務(wù)終止 System.in.read(); // press any key to exit }}

6、定義服務(wù)消費(fèi)者(接口的具體調(diào)用者)

再創(chuàng)建一個(gè)module,命名dubbo_consumer(并且在pom.xml導(dǎo)入以上依賴)。將dubbo_service_interface作為依賴添加進(jìn)來。

1、配置spring-dubbo.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="demo-consumer"/> <dubbo:registry address="redis://192.168.72.188:6379"/> <dubbo:reference id="demoService" interface="com.javen.dubbo.service.IDubboService"/></beans>

2、測試

package com.test;import com.javen.dubbo.service.IDubboService;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import javax.annotation.Resource;import java.util.List;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath:spring-dubbo.xml")public class DubboTest { @Resource(name = "demoService") private IDubboService dubboService; @Test public void testDubbo(){ List<String> haha = dubboService.getData("haha"); System.out.println(haha.get(0)); }}

Dubbo、MyCat、主從配置讀寫分離、redis分布式、JTA分布式事務(wù)的關(guān)系。

dubbo默認(rèn)每次只訪問一個(gè)服務(wù)器,需要主從配合完成數(shù)據(jù)同步。

<!--replicate可以實(shí)現(xiàn)所有服務(wù)器同步寫,但是只讀取單臺服務(wù)器。默認(rèn)是failover,讀寫都是單臺服務(wù)器--> <dubbo:registry cluster="replicate" address="redis://192.168.72.188:6379"/>
  • 1.公司登記注冊于2003年1月27日,清遠(yuǎn)市桑達(dá)電子網(wǎng)絡(luò)媒體有限公司
    2.公司2006年起成為清遠(yuǎn)市政府定點(diǎn)協(xié)議供貨商,電子采購供貨商
    3.公司2007年被清遠(yuǎn)市相關(guān)政府部門評為安防行業(yè)狀元
    4.公司2007年起成為長城電腦清遠(yuǎn)如意服務(wù)站(SP368)
    5.公司2007年承建清遠(yuǎn)市橫河路口電子警察工程,開創(chuàng)清遠(yuǎn)電子警察先河。
  • 6.公司2007年起成為IBM合作伙伴、公司2010年底成為金蝶軟件清遠(yuǎn)金牌代理(伙伴編號:30030013)
    7.公司組團(tuán)隊(duì)參加南方都市報(bào)組織的創(chuàng)富評選,獲廣東80強(qiáng)。公司申請多項(xiàng)軟件著作權(quán)、專利權(quán)
    8.2016年起公司成為粵東西北地區(qū)為數(shù)不多的雙軟企業(yè),確立“讓軟件驅(qū)動世界,讓智能改變生活!"企業(yè)理想
    9.2016-01-29更名為廣東互動電子網(wǎng)絡(luò)媒體有限公司
    10.2021-01-13更名為廣東互動電子有限公司
  • 投資合作咨詢熱線電話:0763-3391888 3323588
  • 做一個(gè)負(fù)責(zé)任的百年企業(yè)! 天行健,君子以自強(qiáng)不息;地勢坤,君子以厚德載物;
    為用戶創(chuàng)造價(jià)值! 讓軟件驅(qū)動世界; 讓智能改變生活; 超越顧客期望,幫助顧客成功;
    對客戶負(fù)責(zé),對員工負(fù)責(zé),對企業(yè)命運(yùn)負(fù)責(zé)!幫助支持公司的客戶成功;幫助忠誠于公司的員工成功!
  • 聯(lián)系電話:0763-3391888 3323588 3318977
    服務(wù)熱線:18023314222 QQ:529623964
  • 工作QQ:2501204690 商務(wù)QQ: 602045550
    投資及業(yè)務(wù)投訴QQ: 529623964
    微信:小米哥 微信號:qysed3391888
    騰訊微博:桑達(dá)網(wǎng)絡(luò)-基石與起點(diǎn)
  • E-MAIL:222#QYSED.CN ok3391888#163.com (請用@替換#)
在線客服
  • 系統(tǒng)集成咨詢
    點(diǎn)擊這里給我發(fā)消息
  • 網(wǎng)站\微信\軟件咨詢
    點(diǎn)擊這里給我發(fā)消息
  • 售后服務(wù)
    點(diǎn)擊這里給我發(fā)消息
  • 投資合作
    點(diǎn)擊這里給我發(fā)消息