国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Dubbo

2019-11-14 23:13:33
字體:
供稿:網(wǎng)友
Dubbo

Dubbo : 簡單來說,Dubbo 是一個服務(wù)治理的框架,集中管理RPC調(diào)用,并提供多種訪問策略和負載來滿足應(yīng)用系統(tǒng)之間的相互調(diào)用。

RPC遠程過程調(diào)用協(xié)議:它是一種通過網(wǎng)絡(luò)從遠程計算機程序上請求服務(wù),而不需要了解底層網(wǎng)絡(luò)技術(shù)的協(xié)議。RPC協(xié)議假定某些傳輸協(xié)議的存在,如TCP或UDP,為通信程序之間攜帶信息數(shù)據(jù)。在OSI網(wǎng)絡(luò)通信模型中,RPC跨越了傳輸層和應(yīng)用層。RPC使得開發(fā)包括網(wǎng)絡(luò)分布式多程序在內(nèi)的應(yīng)用程序更加容易。RPC采用客戶機/服務(wù)器模式。請求程序就是一個客戶機,而服務(wù)提供程序就是一個服務(wù)器。首先,客戶機調(diào)用進程發(fā)送一個有進程參數(shù)的調(diào)用信息到服務(wù)進程,然后等待應(yīng)答信息。在服務(wù)器端,進程保持睡眠狀態(tài)直到調(diào)用信息的到達為止。當(dāng)一個調(diào)用信息到達,服務(wù)器獲得進程參數(shù),計算結(jié)果,發(fā)送答復(fù)信息,然后等待下一個調(diào)用信息,最后,客戶端調(diào)用進程接收答復(fù)信息,獲得進程結(jié)果,然后調(diào)用執(zhí)行繼續(xù)進行。Dubbo架構(gòu)

  • PRovider:暴露服務(wù)的服務(wù)提供方。
  • Consumer:調(diào)用遠程服務(wù)的服務(wù)消費方。
  • Registry:服務(wù)注冊與發(fā)現(xiàn)的注冊中心。
  • Monitor:統(tǒng)計服務(wù)的調(diào)用次調(diào)和調(diào)用時間的監(jiān)控中心。
  • Container:服務(wù)運行容器。

注意:Registry 是一個很輕的東西,實際上Dubbo只是在注冊中心共享了服務(wù)的相關(guān)信息,Dubbo的主體是Provider和Consumer,這兩者都是屬于應(yīng)用范 圍內(nèi)的。Monitor也是很輕的模塊,需要有監(jiān)控服務(wù)在Registry進行了注冊應(yīng)用才能正常使用監(jiān)控,監(jiān)控宕掉不影響服務(wù)。

Dubbo 本身提供了多種協(xié)議的支持,hession協(xié)議也是其中之一。

dubbo:// dubbo缺省協(xié)議采用單一長連接和NIO異步通訊(非組撒),適合于小數(shù)據(jù)量大并發(fā)的服務(wù)調(diào)用,以及服務(wù)消費者機器數(shù)大于服務(wù)提者機器數(shù)的情況。

  • Dubbo缺省協(xié)議不適合傳送大數(shù)據(jù)量的服務(wù),比如傳文件,傳視頻等,除非請求量很低。

    • rmi://RMI協(xié)議采用JDK標(biāo)準的java.rmi.*實現(xiàn),采用阻塞式短連接和JDK標(biāo)準序列化方式。
    • hessian://Hessian協(xié)議用于集成Hessian的服務(wù),Hessian底層采用Http通訊,采用Servlet暴露服務(wù),Dubbo缺省內(nèi)嵌Jetty作為服務(wù)器實現(xiàn)。
    • http://基于http的短連接協(xié)議,基本不會去使用了。
    • webservice://webservice
    • redis://Redis是一個高效的KV存儲服務(wù)器
    • memcached://Memcached是一個高效的KV緩存服務(wù)器
    • Thrift://Thrift是Facebook捐給Apache的一個RPC框架

注冊中心介紹

Dubbo也支持多種類型的注冊中心,分別有:

    • Multicast基于組 播實現(xiàn)的注冊中心,互相發(fā)現(xiàn)
    • ZookeeperZookeeper是Apacahe Hadoop的子項目,是一個樹型的目錄服務(wù),支持變更推送,適合作為Dubbo服務(wù)的注冊中心,工業(yè)強度較高,可用于生產(chǎn)環(huán)境,并推薦使用。
    • RedisRedis是一個高效的KV存儲服務(wù)器
    • Simple注冊中心本身就是一個普通的Dubbo服務(wù),可以減少第三方依賴,使整體通訊方式一致。

<a class="external-link" rel="nofollow">User+Guide-zh</a>

接口定義
  1. 定義Maven接口項目

    pom.xml
    <projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.z</groupId><artifactId>Iexample</artifactId><version>1.0</version></project>
  2. 定義接口

    ISayHello.java
    1234packagecom.z.iexample;publicinterfaceISayHello {publicString sayHelloWaitAnswer(String s);}
服務(wù)提供方(Provider)

  1. 定義Maven服務(wù)端項目,并提供相應(yīng)依賴(Iexample,dubbo,zookeeper)。

    pom.xml
    <projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.z</groupId><artifactId>example-server</artifactId><version>1.0</version><dependencies><dependency><groupId>com.z</groupId><artifactId>Iexample</artifactId><version>1.0</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.5.3</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>3.2.1.RELEASE</version></dependency><dependency><groupId>com.github.sgroschupf</groupId><artifactId>zkclient</artifactId><version>0.1</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.6.4</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.6.4</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.16</version></dependency></dependencies></project>

    Dubbo對外的依賴是需要什么就增加什么的jar依賴,我們需要到的依賴一個是dubbo自身的依賴,另外一個是注冊中心zookeeper的依賴,需要提供zookeeper的連接客戶端,再者就是需要實現(xiàn)的接口jar了。

  2. 實現(xiàn)接口的服務(wù)類

    SayHelloImpl.java
    123456789101112131415161718192021packagecom.z.example.server.rpc;importjava.text.DateFormat;importjava.text.SimpleDateFormat;importjava.util.Date;importjava.util.concurrent.atomic.AtomicInteger;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importcom.z.iexample.ISayHello;publicclassSayHelloImplimplementsISayHello {privatefinalLogger log = LoggerFactory.getLogger(getClass());privateDateFormat dateFormat =newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");privateString template ="[%s] - %d.";privateAtomicInteger count =newAtomicInteger();publicString sayHelloWaitAnswer(String s) {log.info("Receive message {} from client", s);Date now =newDate();String answerTime = dateFormat.format(now);returnString.format(template, answerTime, count.getAndIncrement());}}
  3. 準備Spring的配置文件,因為這個示例是基于Spring Context實現(xiàn)的。

    applicationContext.xml
    <?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://code.alibabatech.com/schema/dubbohttp://code.alibabatech.com/schema/dubbo/dubbo.xsd"><!-- 提供方應(yīng)用信息,用于計算依賴關(guān)系 --><dubbo:applicationname="say-hello-server"/><!-- Group屬性指定dubbo在zookeeper中以什么路徑開始,group之間相對隔離,如果不寫,則所有服務(wù)都從根/開始 --><dubbo:registryaddress="zookeeper://10.10.110.58:2181"group="dubbo"client="zkclient"/><!-- 如果注冊中心里有監(jiān)控服務(wù)進行注冊,則可以開啟下面的配置,監(jiān)控會從注冊中心尋找監(jiān)控服務(wù)端,通過protocol="registry"指定 --><!-- <dubbo:monitor protocol="registry"/> --><!-- 服務(wù)提供方對外提供的連接數(shù)控制,connections代表與每一個消費者建立多少連接,accepts代表本服務(wù)提供方總共對外提供多少連接 --><dubbo:providerconnections="5"accepts="8"/><!-- 用dubbo協(xié)議在20880端口暴露服務(wù) --><dubbo:protocolname="dubbo"port="20880"/><!-- 聲明需要暴露的服務(wù)接口 --><dubbo:serviceinterface="com.z.iexample.ISayHello"ref="simpleServer"/><!-- 和本地bean一樣實現(xiàn)服務(wù) --><beanid="simpleServer"class="com.z.example.server.rpc.SayHelloImpl"/></beans>
  4. 提供主程序入口

    Main.java
    1234567891011121314151617packagecom.z.example.server;importjava.io.IOException;importorg.springframework.context.support.ClassPathXmlApplicationContext;publicclassMain {/*** @param args*/publicstaticvoidmain(String[] args) {ClassPathXmlApplicationContext context =newClassPathXmlApplicationContext("applicationContext.xml");context.start();try{System.in.read();}catch(IOException e) {e.printStackTrace();}}}
服務(wù)消費方(Consumer)
  1. 定義Maven項目,提供消費者的依賴

    pom.xml
    1. <projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.z</groupId><artifactId>example-client</artifactId><version>1.0</version><dependencies><dependency><groupId>com.z</groupId><artifactId>Iexample</artifactId><version>1.0</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.5.3</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>3.2.1.RELEASE</version></dependency><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.6</version></dependency><dependency><groupId>com.github.sgroschupf</groupId><artifactId>zkclient</artifactId><version>0.1</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.6.4</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.6.4</version>
      發(fā)表評論 共有條評論
      用戶名: 密碼:
      驗證碼: 匿名發(fā)表
      主站蜘蛛池模板: 宁远县| 石城县| 于都县| 徐水县| 祁连县| 司法| 阜新市| 洛隆县| 江都市| 临汾市| 扬中市| 吉安市| 左权县| 苏尼特右旗| 肥东县| 祁东县| 南溪县| 清原| 朝阳市| 兰考县| 兴安盟| 随州市| 乐至县| 陕西省| 郁南县| 诸城市| 金溪县| 星子县| 孙吴县| 灵璧县| 阳山县| 军事| 七台河市| 乌拉特后旗| 建平县| 高要市| 闻喜县| 平山县| 祁连县| 岗巴县| 阿克苏市|