日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Dubbo学习总结(4)——Dubbo基于Zookeeper实现分布式实例

發(fā)布時(shí)間:2025/3/8 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Dubbo学习总结(4)——Dubbo基于Zookeeper实现分布式实例 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

入門實(shí)例解析

第一:provider-提供服務(wù)和相應(yīng)的接口


創(chuàng)建DemoService接口

[java]?view plaincopyprint?
  • <span?style="font-size:18px;">package?com.unj.dubbotest.provider;??
  • ??
  • import?java.util.List;??
  • ??
  • /**?
  • ?*?定義服務(wù)接口,該接口需要單獨(dú)打包,在服務(wù)提供方和消費(fèi)方共享?
  • ?*??
  • ?*?@author?lishehe-2015年6月22日?
  • ?*?
  • ?*/??
  • public?interface?DemoService?{??
  • ????/*?
  • ?????*?sayHello方法?
  • ?????*/??
  • ????String?sayHello(String?name);??
  • ??
  • ????/*?
  • ?????*?獲取用戶信息方法?
  • ?????*/??
  • ????public?List?getUsers();??
  • ??
  • }</span>??

  • 創(chuàng)建本接口的實(shí)現(xiàn)類

    [java]?view plaincopyprint?
  • <span?style="font-size:18px;">package?com.unj.dubbotest.provider.impl;??
  • ??
  • import?java.util.ArrayList;??
  • import?java.util.List;??
  • ??
  • import?com.unj.dubbotest.provider.DemoService;??
  • /*?
  • ?*?實(shí)現(xiàn)類DemoServiceImpl-李社河-2015年6月22日?
  • ?*/??
  • public?class?DemoServiceImpl?implements?DemoService?{??
  • ????//聲明sayHello方法??
  • ????public?String?sayHello(String?name)?{??
  • ????????return?"Hello?"?+?name;??
  • ????}??
  • /**?
  • ?*?獲取用戶信息getUsers-李社河-2015年6月22日?
  • ?*/??
  • ????public?List?getUsers()?{??
  • ????????List?list?=?new?ArrayList();??
  • ????????User?u1?=?new?User();??
  • ????????//jack信息??
  • ????????u1.setName("jack");??
  • ????????u1.setAge(20);??
  • ????????u1.setSex("m");??
  • ??????????
  • ????????//tom信息??
  • ????????User?u2?=?new?User();??
  • ????????u2.setName("tom");??
  • ????????u2.setAge(21);??
  • ????????u2.setSex("m");??
  • ??
  • ????????//rose信息??
  • ????????User?u3?=?new?User();??
  • ????????u3.setName("rose");??
  • ????????u3.setAge(19);??
  • ????????u3.setSex("w");??
  • ??
  • ????????list.add(u1);??
  • ????????list.add(u2);??
  • ????????list.add(u3);??
  • ????????return?list;//返回?cái)?shù)據(jù)集合??
  • ????}??
  • }??
  • </span>??

  • 創(chuàng)建provider.xml文件
    [html]?view plaincopyprint?
  • <span?style="font-size:18px;"><?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??
  • ????????">??
  • ????<!--?具體的實(shí)現(xiàn)bean,李社河?-->??
  • ????<bean?id="demoService"?class="com.unj.dubbotest.provider.impl.DemoServiceImpl"?/>??
  • ??
  • ????<!--?提供方應(yīng)用信息,用于計(jì)算依賴關(guān)系,李社河??-->??
  • ????<dubbo:application?name="xixi_provider"?/>??
  • ??
  • ????<!--?使用multicast廣播注冊中心暴露服務(wù)地址?<dubbo:registry?address="multicast://224.5.6.7:1234"???
  • ????????/>?-->??
  • ??
  • ????<!--?使用zookeeper注冊中心暴露服務(wù)地址?-->??
  • ????<dubbo:registry?address="zookeeper://127.0.0.1:2181"?/>??
  • ??
  • ????<!--?用dubbo協(xié)議在20880端口暴露服務(wù)?-->??
  • ????<dubbo:protocol?name="dubbo"?port="20880"?/>??
  • ??
  • ????<!--?聲明需要暴露的服務(wù)接口?-->??
  • ????<dubbo:service?interface="com.unj.dubbotest.provider.DemoService"??
  • ????????ref="demoService"?/>??
  • ??
  • </beans></span>??


  • 創(chuàng)建啟動(dòng)類

    [java]?view plaincopyprint?
  • <span?style="font-size:18px;">public?class?Provider?{??
  • ??
  • ????public?static?void?main(String[]?args)?throws?Exception?{??
  • ????????//啟動(dòng)spring容器,把服務(wù)器啟動(dòng)之后注冊到Zookeeper??
  • ????????ClassPathXmlApplicationContext?context?=?new?ClassPathXmlApplicationContext(??
  • ????????????????new?String[]?{?"applicationContext.xml"?});??
  • ????????context.start();??
  • ????????System.in.read();?//?為保證服務(wù)一直開著,利用輸入流的阻塞來模擬??
  • ????}??
  • }</span>??



  • 創(chuàng)建dubboconsumer(消費(fèi)者)

    ?注意 provider項(xiàng)目中的DemoService接口打包demo-service-api.jar放在class path中


    創(chuàng)建consumer.xml配置文件


    applicationContext.xml

    [html]?view plaincopyprint?
  • <span?style="font-size:18px;"><?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??
  • ????????">??
  • ??
  • ????<!--?消費(fèi)方應(yīng)用名,用于計(jì)算依賴關(guān)系,不是匹配條件,不要與提供方一樣?-->??
  • ????<dubbo:application?name="hehe_consumer"?/>??
  • ??
  • ????<!--?使用zookeeper注冊中心暴露服務(wù)地址?-->??
  • ????<!--?<dubbo:registry?address="multicast://224.5.6.7:1234"?/>?-->??
  • ????<dubbo:registry?address="zookeeper://127.0.0.1:2181"?/>??
  • ??
  • ????<!--?生成遠(yuǎn)程服務(wù)代理,可以像使用本地bean一樣使用demoService?-->??
  • ????<dubbo:reference?id="demoService"??
  • ????????interface="com.unj.dubbotest.provider.DemoService"?/>??
  • ??
  • </beans></span>??


  • 創(chuàng)建consumer啟動(dòng)類

    [java]?view plaincopyprint?
  • <span?style="font-size:18px;">package?com.alibaba.dubbo.demo.pp;??
  • ??
  • import?java.util.List;??
  • ??
  • import?org.springframework.context.support.ClassPathXmlApplicationContext;??
  • ??
  • import?com.unj.dubbotest.provider.DemoService;??
  • /**?
  • ?*?Consumer執(zhí)行起始類?
  • ?*?@author?李社河-2015年6月22日?
  • ?*?
  • ?*/??
  • public?class?Consumer?{??
  • ??
  • ????public?static?void?main(String[]?args)?throws?Exception?{??
  • ????????//初始化Consumer中的spring容器??
  • ????????ClassPathXmlApplicationContext?context?=?new?ClassPathXmlApplicationContext(??
  • ????????????????new?String[]?{?"applicationContext.xml"?});??
  • ????????context.start();??
  • ????????//?獲取遠(yuǎn)程服務(wù)代理??
  • ????????DemoService?demoService?=?(DemoService)?context.getBean("demoService");??
  • ????????//執(zhí)行遠(yuǎn)程方法??
  • ????????String?hello?=?demoService.sayHello("tom");??
  • ????????//打印信息??
  • ????????System.out.println(hello);??
  • ??
  • ????????//同樣執(zhí)行遠(yuǎn)程方法,打印相關(guān)信息??
  • ????????List?list?=?demoService.getUsers();??
  • ????????if?(list?!=?null?&&?list.size()?>?0)?{??
  • ????????????for?(int?i?=?0;?i?<?list.size();?i++)?{??
  • ????????????????System.out.println(list.get(i));??
  • ????????????}??
  • ????????}??
  • ????????System.in.read();//?為保證服務(wù)一直開著,利用輸入流的阻塞來模擬??
  • ????}??
  • ??
  • }</span>??

  • 啟動(dòng)好zookeeper、tomcat之后我們執(zhí)行運(yùn)行Provider.class、Consumer.class

    成功調(diào)到遠(yuǎn)程服務(wù)-----執(zhí)行Consumer之后結(jié)果



    我們在看管理后臺的信息

    提供者


    消費(fèi)者



    實(shí)例升級--Dubbo服務(wù)集群容錯(cuò)實(shí)踐

    ?????? 手機(jī)應(yīng)用是以聊天室為基礎(chǔ)的,我們需要收集用戶的操作行為,然后計(jì)算聊天室中在線人數(shù),并實(shí)時(shí)在手機(jī)應(yīng)用端顯示人數(shù),整個(gè)系統(tǒng)的架構(gòu)如圖所示:


    ?? 上圖中,主要包括了兩大主要流程:日志收集并實(shí)時(shí)處理流程、調(diào)用讀取實(shí)時(shí)計(jì)算結(jié)果流程,我們使用基于Dubbo框架開發(fā)的服務(wù)來提供實(shí)時(shí)計(jì)算結(jié)果讀取聊天人數(shù)的功能。上圖中,實(shí)際上業(yè)務(wù)接口服務(wù)器集群也可以基于Dubbo框架構(gòu)建服務(wù),就看我們想要構(gòu)建什么樣的系統(tǒng)來滿足我們的需要。

    ?? 如果不使用注冊中心,服務(wù)消費(fèi)方也能夠直接調(diào)用服務(wù)提供方發(fā)布的服務(wù),這樣需要服務(wù)提供方將服務(wù)地址暴露給服務(wù)消費(fèi)方,而且也無法使用監(jiān)控中心的功能,這種方式成為直連。

    ?? 如果我們使用注冊中心,服務(wù)提供方將服務(wù)發(fā)布到注冊中心,而服務(wù)消費(fèi)方可以通過注冊中心訂閱服務(wù),接收服務(wù)提供方服務(wù)變更通知,這種方式可以隱藏服務(wù)提供方的細(xì)節(jié),包括服務(wù)器地址等敏感信息,而服務(wù)消費(fèi)方只能通過注冊中心來獲取到已注冊的提供方服務(wù),而不能直接跨過注冊中心與服務(wù)提供方直接連接。這種方式的好處是還可以使用監(jiān)控中心服務(wù),能夠?qū)Ψ?wù)的調(diào)用情況進(jìn)行監(jiān)控分析,還能使用Dubbo服務(wù)管理中心,方便管理服務(wù),我們在這里使用的是這種方式,也推薦使用這種方式。使用注冊中心的Dubbo分布式服務(wù)相關(guān)組件結(jié)構(gòu),如下圖所示:



    轉(zhuǎn)載于:https://www.cnblogs.com/zhanghaiyang/p/7213278.html

    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

    總結(jié)

    以上是生活随笔為你收集整理的Dubbo学习总结(4)——Dubbo基于Zookeeper实现分布式实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。