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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Dubbo的Provider配置

發(fā)布時(shí)間:2024/4/13 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Dubbo的Provider配置 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
現(xiàn)在我們按照他的一個(gè)架構(gòu)圖,注冊(cè)中心已經(jīng)配置好,現(xiàn)在只要把Provider搭建出來就可以,在Provider中需要告訴Provider的事情,第一件事情,我需要告訴它,我的注冊(cè)中心在哪,這點(diǎn)你說應(yīng)不應(yīng)告訴,你不告訴他就能找到,就在虛擬機(jī)中找到注冊(cè)中心,那他也太厲害了,這個(gè)東西也太神奇了,人工智能他就不要發(fā)展了,這是第一個(gè),告訴注冊(cè)中心在哪,第二個(gè),你得告訴它用什么協(xié)議,他不是支持三個(gè)嗎,你得告訴它用哪個(gè),然后第三件事情,要告訴注冊(cè)中心,他要告訴注冊(cè)中心,我的哪一個(gè)接口需要進(jìn)行發(fā)布,是哪一個(gè)功能需要發(fā)布,發(fā)布哪個(gè)類,主要是做這三件事情,那我現(xiàn)在做之前,Dubbo中的Provider搭建,在搭建之前,我們需要分析一些事情,我們現(xiàn)在還沒有去搭建過呢,在dubbo這塊,我們是一定需要去建一個(gè)接口的,注意看,這是咱們的大前提,咱們的總體思想,一般調(diào)用接口,會(huì)有功能嗎,沒有,是不是還要建一個(gè)實(shí)現(xiàn)類啊,這個(gè)實(shí)現(xiàn)類一般情況下,我們用完Dubbo之后,那種感覺像什么呢,就是把Service業(yè)務(wù)中的代碼,這是實(shí)現(xiàn)類,Impl,把這里面替了,現(xiàn)在在做的時(shí)候,為什么前面需要強(qiáng)調(diào)一下,就是這兩個(gè)東西不能建到一個(gè)項(xiàng)目中,接口和實(shí)現(xiàn)類必須分開建,Dubbo是不是要被consumer調(diào)用的,我們現(xiàn)在需要有個(gè)項(xiàng)目,我想要調(diào)用它的時(shí)候,比如在我的接口中有個(gè)方法,A方法,我怎么提供dubbo提供A對(duì)象啊,你在編譯的時(shí)候,比如在當(dāng)前項(xiàng)目中,沒有B這樣的一個(gè)接口,我能寫Provider B小b嗎,你想想在當(dāng)前項(xiàng)目沒有B接口或類,你能寫出這句話嗎,是不能啊,你為了讓他編譯通過,編譯通過,我是不是要保證當(dāng)前項(xiàng)目有B接口或類,所以我就需要讓當(dāng)前項(xiàng)目去依賴他,那依賴他的話,如果接口跟實(shí)現(xiàn)類都在同一個(gè)項(xiàng)目中,那我在當(dāng)前項(xiàng)目還能不能看到實(shí)現(xiàn)類,可以,那是RPC了嗎,所以就不是RPC了,那就和普通的項(xiàng)目調(diào)用有什么區(qū)別了,所以我們?cè)趧?chuàng)建的時(shí)候,一定要把接口和實(shí)現(xiàn)類拆分兩個(gè)項(xiàng)目,讓實(shí)現(xiàn)類實(shí)現(xiàn)這個(gè)接口,讓consumer消費(fèi)者也去依賴接口,具體接口對(duì)應(yīng)的實(shí)現(xiàn)類怎么實(shí)現(xiàn)的,在我的consumer中,是根本不知道的,能明白這點(diǎn)嗎,所以必須得分開建,不分開建是絕對(duì)不行的,所以我們?cè)谧龅臅r(shí)候,新建一個(gè),other,選擇一個(gè)maven project,dubbo-service就是一個(gè)jar,就是一個(gè)接口,里面也不用導(dǎo)任何包,就寫類就行,右鍵新建一個(gè)接口 <project xmlns="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.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.learn</groupId><artifactId>dubbo-service</artifactId><version>0.0.1-SNAPSHOT</version> </project> package com.learn.service;/*** 反正我們就提供一個(gè)方法,* 返回值是一個(gè)字符串* 也不用連數(shù)據(jù)庫(kù)* 就聲明我們有哪些接口* @author Leon.Sun**/ public interface DemoService {/*** 我們單獨(dú)建一個(gè)最簡(jiǎn)單的* String類型的* 假設(shè)傳入一個(gè)String類型的name* 這都認(rèn)識(shí)吧* 接口就創(chuàng)建完了*/String demo(String name);} 重點(diǎn)是怎么創(chuàng)建實(shí)現(xiàn)類項(xiàng)目,這個(gè)項(xiàng)目就是我們?cè)谠韴D中看見的Provider,Provider在代碼中的體現(xiàn),就是接口實(shí)現(xiàn)類的項(xiàng)目,Provider在代碼中的實(shí)現(xiàn),其實(shí)就是這個(gè)接口的實(shí)現(xiàn)類項(xiàng)目,右鍵新建一個(gè)項(xiàng)目,Maven Project,dubbo-service-impl,這里看清除,dubbo實(shí)現(xiàn)的這塊,不用建成war,就一個(gè)jar就行,他底層用了一個(gè)第三方的框架,叫netty框架,這是一個(gè)網(wǎng)絡(luò)框架,能夠把我們的東西發(fā)布,如果有人學(xué)過安卓的話,你就會(huì)用到他,netty框架,網(wǎng)絡(luò)框架,netty框架一定要用的,網(wǎng)卡框架你不用netty,你用誰(shuí)啊,我們現(xiàn)在這個(gè)packaging叫做jar就行,就是jar,他不用寫控制器,我們寫這個(gè)實(shí)現(xiàn)類的時(shí)候,就像我們以前寫項(xiàng)目的時(shí)候,以前寫項(xiàng)目,就dubbo的provider,就像我們以前service的實(shí)現(xiàn)類,頂多以后我們會(huì)在里面加個(gè)mapper,那我們現(xiàn)在寫完之后,我為了保證有這個(gè)接口,加一個(gè)依賴 <project xmlns="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.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.learn</groupId><artifactId>dubbo-service-impl</artifactId><version>0.0.1-SNAPSHOT</version><dependencies><dependency><groupId>com.learn</groupId><artifactId>dubbo-service</artifactId><version>0.0.1-SNAPSHOT</version></dependency></dependencies> </project> package com.learn.service.impl;import com.learn.service.DemoService;/*** 在這里我要讓他去實(shí)現(xiàn)DemoService* 添加未實(shí)現(xiàn)方法* 這里就沒有@Servcie* 這里不用寫* dubbo給我們提供了一個(gè)注解* 這個(gè)注解和我們以前的注解名字是一樣* 也叫@Service* 但是這個(gè)注解對(duì)2.5.3兼容性特別好* 在我們Spring4.1.6的時(shí)候* 如果你還用@Service* 導(dǎo)包的時(shí)候是dubbo的* dubbo的一個(gè)@Service* 他和Spring的AOP有沖突* 一定要注意哦* 這塊本質(zhì)是能用注解的* 但是由于現(xiàn)在和Spring4.1.6有沖突* 所以我們就不能夠用注解* 不用注解我們就用原始配置文件* 現(xiàn)在我們這里什么也不能寫* 我這里少點(diǎn)東西* 我現(xiàn)在想用dubbo這個(gè)框架* 做框架第一步是干什么* 導(dǎo)入jar包* 我們?nèi)?dǎo)jar包* * @Service在provider里不要用* 一用就和我們的service就沖突了* 一定要注意* 那怎么用呢* 得寫配置文件,* 配置文件怎么寫配置文件* 依賴于Spring容器* 就像SpringMVC依賴于Spring容器的* 我們寫Spring配置文件的時(shí)候* Dubbo依賴于誰(shuí)呢* 依賴于Spring容器* 那我們寫dubbo配置文件的時(shí)候* 所以我們?cè)谧龅臅r(shí)候* 在我們的resource里面新建一個(gè)xml* 隨便起個(gè)名* applicationContext-dubbo.xml* @author Leon.Sun**/ public class DemoServiceImpl implements DemoService {/*** 調(diào)方法的時(shí)候就會(huì)傳這個(gè)字符串* 寫代碼這塊就這么寫就行了*/@Overridepublic String demo(String name) {return "傳遞過來的name:" + name;}} <project xmlns="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.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.learn</groupId><artifactId>dubbo-service-impl</artifactId><version>0.0.1-SNAPSHOT</version><dependencies><dependency><groupId>com.learn</groupId><artifactId>dubbo-service</artifactId><version>0.0.1-SNAPSHOT</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.5.3</version><!-- 這里會(huì)有spring-2.5.6這是多少年前的,所以我們要想一個(gè)辦法 --><!-- 不要用它,我們知道導(dǎo)入Spring的時(shí)候 --><!-- 我昨天說過一個(gè)事情,因?yàn)镾pring從2到3是大跨版本的 --><!-- 2就一個(gè)jar包,里面包括了所有的功能 --><!-- aop,beans,context,core核心,是不是全在一個(gè)jar包里面 --><!-- 從3開始拆分很多了,所以根本就不是一個(gè)東西了,如果是一個(gè)東西,我們完全可以像昨天一樣 --><!-- 在這里面我們要告訴maven,有個(gè)叫exclusions不包含,不包含什么呢 --><!-- 他只能依賴一個(gè)spring,不可能依賴兩 --><!-- 我們就用一個(gè)exlusion就把它拿掉了 --><exclusions><!-- exclusion里面是什么呢,是坐標(biāo) --><!-- 2.5.6的artifactId就是spring --><exclusion><artifactId>spring</artifactId><groupId>org.springframework</groupId></exclusion></exclusions></dependency><!-- springmvc我們用的是4.1.6 --><!-- 粘貼進(jìn)去,你會(huì)發(fā)現(xiàn)覆蓋不掉 --><!-- 4.1.6進(jìn)來了,spring-2.5.6還在 --><!-- 其實(shí)你要注意,如果真的只是版本的迭代 --><!-- 但是2和3變化太大了,那這該怎么辦呢 --><!-- 看這個(gè)單詞netty-3.2.5是不是我剛才說的網(wǎng)絡(luò)框架 --><!-- 那我現(xiàn)在在這里面刪掉,右鍵是刪不掉的 --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.1.6.RELEASE</version></dependency><!-- 你們要明白這個(gè)包是干什么的 訪問zookeeper客戶端的jar包,--><dependency><groupId>com.101tec</groupId><artifactId>zkclient</artifactId><version>0.10</version></dependency></dependencies> </project> <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.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"><!-- 寫配置文件要導(dǎo)入schema,那這個(gè)schema怎么辦呢 --><!-- 我特意沒有去找spring的schema --><!-- xmlns:dubbo我們看到dubbo命令空間 --><!-- xmlns:context還是有的 --><!-- 依賴于spring容器,但是有自己的東西 --><!-- 根據(jù)schema特性,我們可以加命名空間 --><!-- 加了命令空間后,就是擴(kuò)展功能 --><!-- 那就是dubbo,那在寫命名空間的時(shí)候沒有 --><!-- 給當(dāng)前Provider自定義個(gè)名字 --><!-- 除了注冊(cè)中心以外還要有一個(gè)application --><!-- 給當(dāng)前的provider起個(gè)名字,這個(gè)名字有什么用呢,我們這個(gè)都是要被監(jiān)控中心所管理的他需要知道是哪一個(gè)provider,所以隨便取個(gè)名,我們就取dubbo-service除了這個(gè)以外再往下--><dubbo:application name="dubbo-service"/><!-- 首先我要告訴他的注冊(cè)中心在哪 --><!-- 配置注冊(cè)中心 --><!-- 在注冊(cè)中心這塊有個(gè)address 然后還有一個(gè)protocol協(xié)議,端口2181,協(xié)議什么協(xié)議,dubbo協(xié)議是不是剛講過的做完這個(gè)就差不多了,就差最后一件事情,還需要配一個(gè),protocolprotocol="zookeeper"這個(gè)屬性其實(shí)起的不好,name="zookeeper"如果是這樣就好了什么意思,這個(gè)東西配置的是注冊(cè)中心,localhost:2181這個(gè)是zookeeper的地址--><dubbo:registry address="localhost:2181" protocol="zookeeper"></dubbo:registry><!-- 配置端口 --><!-- 這又是個(gè)什么東西呢 然后有個(gè)name等于什么什么,然后port等于什么什么,配置這個(gè)的時(shí)候,這個(gè)標(biāo)簽是什么意思,看我們的原理,一定要明白這個(gè)標(biāo)簽的意思看清楚有個(gè)第四步,第四步干什么,我去注冊(cè)中心往下拿,拿到provider的地址之后,真實(shí)的調(diào)用一下,那我調(diào)用的話通過互聯(lián)網(wǎng),一個(gè)電腦訪問另一個(gè)電腦,一定要走端口啊,20880配置的意思表示我的provider再使用當(dāng)前計(jì)算機(jī)的端口20880那2181是什么東西,是zookeeper的端口,20880是provider在那臺(tái)計(jì)算機(jī)上發(fā)布在哪臺(tái)計(jì)算機(jī)上運(yùn)行,就用哪個(gè)端口,必須20880嗎,不是,你隨便寫,隨便寫,只要不寫1024之前的不寫哪些經(jīng)常被占用的,隨便寫,你這寫成什么,以后我這臺(tái)consumser在調(diào)用我這臺(tái)計(jì)算機(jī)的時(shí)候,就走哪個(gè)端口,明白啥意思嗎,就是這樣的一個(gè)意思,name就是從注冊(cè)中心dubbo:registry這獲取到我的地址 address="localhost:2181",這是個(gè)固定值,把信息注冊(cè)到注冊(cè)中心,所有的consumer獲取到我的信息,然后通過20888來訪問我的計(jì)算機(jī),name="registry"這個(gè)字符串是獲取到上面的,到此還差一個(gè)了,我們的provider一起來需要干什么,是不是要想注冊(cè)中心注冊(cè)啊注冊(cè)什么啊,注冊(cè)自己提供了什么功能,你說你什么 也沒有配置,Dubbo就知道DemoServiceImpl這個(gè)東西需要被注冊(cè)的嗎,是不是不能知道,所以我在這里面做的時(shí)候,要向注冊(cè)中心中注冊(cè)功能name="dubbo"這個(gè)是dubbo協(xié)議,--><dubbo:protocol name="dubbo" port="20888"></dubbo:protocol><!-- 注冊(cè)功能 --><!-- 要注冊(cè)一個(gè)接口 哪個(gè)接口,這個(gè)是接口,注冊(cè)只是去注冊(cè)接口,不是注冊(cè)實(shí)現(xiàn)類,接口呢,com.learn.service.DemoService這兒那他怎么知道是調(diào)哪個(gè)實(shí)現(xiàn)類呢,不要著急,還沒有寫完,還有一個(gè)ref呢,一旦ref后面要配個(gè)什么東西,bean的id--><dubbo:service interface="com.learn.service.DemoService" ref="demoServiceImpl"></dubbo:service><!-- 這里才是咱們要的實(shí)現(xiàn)類你不能向注冊(cè)中心注冊(cè)實(shí)現(xiàn)類啊,你得注冊(cè)接口,那我們把實(shí)現(xiàn)類拿過來,實(shí)現(xiàn)類呢,在這兒com.learn.service.impl.DemoServiceImpl然后把這個(gè)demoServiceImpl往ref里面放,現(xiàn)在我們所有的配置都完事了,就這5個(gè)標(biāo)簽,如果后面頻繁的寫接口和實(shí)現(xiàn)類,dubbo:service和bean這個(gè)是頻繁寫的,多寫幾份,一個(gè)接口寫一個(gè),一個(gè)接口寫兩個(gè)標(biāo)簽,這里我還必須再?gòu)?qiáng)調(diào)一下,就是這幾個(gè)標(biāo)簽,只要是這幾個(gè)東西,配置完之后就不用換了,所以這個(gè)東西根本就不用配,知道是什么意思就行了--><bean id="demoServiceImpl" class="com.learn.service.impl.DemoServiceImpl"></bean><!-- 其實(shí)還有一個(gè)dubbo:annotation 什么啊,注解是吧,package="com.learn.service.impl",其實(shí)我特別喜歡用這個(gè),用完他之后,我只需要在com.learn.service.impl.DemoServiceImpl上加上@Service導(dǎo)入的是dubbo的就完事了,import com.alibaba.dubbo.config.annotation.Service;不用配置上面dubbo:service和bean這兩個(gè)標(biāo)簽了,但是就是和聲明式AOP有沖突,他們都是采用雙向代理都對(duì)DemoServiceImpl這塊產(chǎn)生代理,兩個(gè)人就沖突了,所以沒辦法,就不能用注解了,這不可能不用聲明式事務(wù)寧可我們做的麻煩點(diǎn),也不能不用聲明式事務(wù),給他刪掉,現(xiàn)在配置功能就全部寫完了--><!-- <dubbo:annotation package="com.learn.service.impl" /> --> </beans> package com.learn.test;import java.io.IOException;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.alibaba.dubbo.container.Main;/*** 我只要把Spring啟起來,* dubbo就起來了* 配置文件起來就行了* * @author Leon.Sun**/ public class Test {public static void main(String[] args) throws Exception {/*** 怎么加載Spring配置文件* new ClassPathXmlApplicationContext()* 這個(gè)項(xiàng)目是真實(shí)的dubbo服務(wù)* 我的配置文件叫applicationContext-dubbo.xml* 這么寫完成之后* 要讓容器啟動(dòng)* 沒有start方法* 方法在ClassPathXmlApplicationContext* ApplicationContext接口中沒提供* ClassPathXmlApplicationContext實(shí)現(xiàn)類中提供了* 一定要用實(shí)現(xiàn)類接收*/ // ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext-dubbo.xml");/*** 此時(shí)就把Spring容器啟起來了* 這是手動(dòng)啟動(dòng)Spring容器* dubbo就寫在這里了* 其實(shí)本質(zhì)我們?cè)趯憇tart的時(shí)候* 是在做0start的過程* 1的register過程不需要我們做* 它是自動(dòng)做的* 這點(diǎn)我需要強(qiáng)調(diào)一下* 1這個(gè)register如果你的WIFI有共享精靈* 有什么這些東西* 可能會(huì)導(dǎo)致1register無效而且不報(bào)錯(cuò)* 可能不是一定的* 把WIFI共享精靈一關(guān)就好使了* 開開就注冊(cè)不上* 這塊需要注意一下* 現(xiàn)在有了這樣的一個(gè)功能之后* 我們只要郵件run as* 你會(huì)發(fā)現(xiàn)一個(gè)特別有意思的事情* 我們?cè)谔峁┱咧信渲玫臅r(shí)候* dubbo:protocol name="dubbo"* 這里name是寫的dubbo* dubbo:registry address="localhost:2181" protocol="zookeeper"* 這里的協(xié)議是zookeeper* 表示的這里是一個(gè)zookeeper地址* 這是一個(gè)zookeeper* 走到運(yùn)行原理是怎么走的* Registry是我們的注冊(cè)中心* 是我們的第四步* 我們?cè)谧龅谒牟降臅r(shí)候* 根據(jù)provider的地址真實(shí)的調(diào)用provider的功能* 我們dubbo中支持的協(xié)議包括幾個(gè)呢* Dubbo,RMI,Hessian* 就是我們的consumer調(diào)用provider的時(shí)候* 其實(shí)是遵守上面的協(xié)議的* 那是哪個(gè)協(xié)議* 是dubbo協(xié)議* dubbo:protocol name="dubbo" port="20888"* 這個(gè)port是我的provider在哪臺(tái)電腦上占用哪個(gè)端口* 就是我的consumer去調(diào)用我的時(shí)候* 中間通過的協(xié)議是dubbo協(xié)議* 然后訪問我的是20880端口* dubbo:registry address="localhost:2181" protocol="zookeeper"* 上面表示注冊(cè)中心的地址* 注冊(cè)中心使用的是zookeeper* 下面往下解決這個(gè)事情* NoClassDefFoundError: org/I0Itec/zkclient/exception/ZkNoNodeException* 指定是少jar包* 少了誰(shuí)啊* 少個(gè)zkclient* 這個(gè)東西是什么呢* client是客戶端* zk應(yīng)該是哪個(gè)單詞的縮寫* zk是zookeeper* 我們現(xiàn)在要做件什么事情* 是在容器啟動(dòng)的時(shí)候* 向注冊(cè)中心注冊(cè)自己的信息* 那此時(shí)我的zookeeper是一個(gè)服務(wù)* provider相當(dāng)于是zookeeper的一個(gè)客戶端* 想想是不是* 我是不是要通過provider去訪問Registry* 看能不能想明白這個(gè)事情* 相當(dāng)于你去注冊(cè)* 所以在我這個(gè)容器中* 要必須具備訪問zookeeper的能力* 這個(gè)能力就是zkclient* https://mvnrepository.com/artifact/com.101tec/zkclient* 我們導(dǎo)入0.10就行了* 拿過來放入我們的pom.xml中* 此時(shí)就具備了往注冊(cè)中心注冊(cè)的功能* 那現(xiàn)在完事了* 那現(xiàn)在又帶來了下一個(gè)問題* 怎么一下子就關(guān)了* */ // ac.start();/*** 說明我們現(xiàn)在的配置都對(duì)了* 你給我關(guān)了* 那consumer還能調(diào)用嗎* 程序關(guān)了它是絕對(duì)調(diào)不到的* 所以我們要想一個(gè)辦法* 阻止關(guān)閉* */ // System.out.println("啟動(dòng)成功");/*** 最簡(jiǎn)單的是這個(gè)* 這個(gè)什么意思* 我只要不在控制臺(tái)輸入東西* 他就會(huì)一直跑* 但是只要我隨便寫一個(gè)東西一回車* 接收到這一行就直接過去了* 能看明白啥意思嗎* 那這種方式是一種* 這么寫不太好啊* 官方給我們提供一種* 一種非常好的一種方式* */ // System.in.read();/*** 官方推薦的* 叫Main類的main()方法* 這個(gè)不是調(diào)自己* Main類是自己提供的一個(gè)類* main方法是啟動(dòng)容器的一個(gè)辦法* Dubbo service server started!* 但是至少解決剛才沒了這個(gè)問題* 是不是還在亮著呢* 現(xiàn)在還少一個(gè)事情* 少一個(gè)什么事情* 他這方法你往里進(jìn)也沒什么用* 加載默認(rèn)的擴(kuò)展名稱loader.getDefaultExtensionName()* Runtime.getRuntime()運(yùn)行時(shí)的環(huán)境* 我們的dubbo的一個(gè)運(yùn)行環(huán)境類* 下面container.start()這什么意思* 容器啟動(dòng)* 這個(gè)容器在哪呢* 這其實(shí)就是一個(gè)List<Container>* list里面有containers.add(loader.getExtension(args[i]))* 你看是中國(guó)人寫的* 其實(shí)想告訴一件事情* 如果你這么寫好像沒有指定配置文件* 那這個(gè)時(shí)候就對(duì)配置文件有個(gè)強(qiáng)制要求* 要求配置文件必須放在/META-INF/spring/*.xml* 就是你的路徑必須是這樣的* 否則你的配置文件無法被加載到* 注意這個(gè)META-INF不是下面的META-INF* 這是什么項(xiàng)目* 這是jar項(xiàng)目* 在resource下右鍵新建文件夾folder* 文件夾META-INF* 然后在META-INF下建一個(gè)文件夾spring* 然后applicationContext-dubbo.xml放在spring文件夾下就完事了* 啟動(dòng)的效果還是那樣* 你啟動(dòng)之后沒報(bào)錯(cuò)沒效果* 如果你配置文件放外面怎么也沒效果* 其實(shí)就是這點(diǎn)不太好* 這就是我們現(xiàn)在做的所有事情* 此時(shí)所有provider的東西都講完了* 那現(xiàn)在有了這個(gè)以后,我們總感覺有點(diǎn)別扭,怎么別扭,我不知道是真啟成功了* 還是假啟動(dòng)成功了* 你會(huì)發(fā)現(xiàn)配置文件放外面* 放在外面也是started* 放在里面也是started* 所以我們要有一種辦法*/Main.main(args);}}

一個(gè)項(xiàng)目中,Consumer依賴這個(gè)項(xiàng)目時(shí),就會(huì)知道實(shí)現(xiàn)類具體實(shí)現(xiàn),這就是為什么要去新建一個(gè)接口dubbo-service了,然后干什么,再去新建一個(gè)Maven Project,這個(gè)project的作用是干什么,里面其實(shí)就是寫接口的實(shí)現(xiàn)類,我們起個(gè)項(xiàng)目名吧,因?yàn)橄旅嫖覀冃枰朗窃谀睦飳?實(shí)現(xiàn)類叫dubbo-service-impl,然后下面我們需要做的事情是,在dubbo-service-impl中配置pom.xml,主要配幾個(gè)東西,我們回顧一下,首先把dubbo給引進(jìn)來,引dubbo還需要注意一個(gè)事情是,去掉老版本的spring,這是第一件事情,spring被去掉以后我們還得干什么,是不是得引個(gè)新的spring,當(dāng)我們?nèi)萜鲉?dòng)的時(shí)候,要向注冊(cè)中心注冊(cè),怎么辦,還得有個(gè)zkclient訪問zookeeper,這三個(gè)是最重要的,最后還得依賴一下接口,zkclient是向注冊(cè)中心注冊(cè)的,spring新版本,dubbo版本,以及依賴的接口,這四件事情,包含四件事情,第一件事情依賴接口,第二件事情依賴dubbo,去掉老版本的spring,第三件事情依賴新版本的spring,第四件事情依賴zookeeper客戶端工具zkclient,第四步是新建一個(gè)配置文件,叫application-dubbo,不叫這個(gè)名字也行,我們用的Main.main()方法這個(gè),他找只要是xml就行,不看名,假設(shè)我們新建這樣的一個(gè).xml,并配置,配置了5個(gè)標(biāo)簽,再?gòu)?qiáng)調(diào)一遍這5個(gè)標(biāo)簽的作用,第一件事情我們一會(huì)要建立一個(gè)管理工具,這個(gè)管理工具是專門看我們的服務(wù)是否發(fā)布成功沒,跟說到的Monitor一點(diǎn)關(guān)系也沒有,跟這個(gè)一點(diǎn)關(guān)系也沒有的,我要用一個(gè)額外的工具,就是看服務(wù)發(fā)布成功沒,那里面怎么區(qū)分是哪一個(gè)provider呢,就根據(jù)這個(gè)名字<dubbo:application name="dubbo-service"/>,然后下面這個(gè)地址是什么地址,<dubbo:registry address="localhost:2181" protocol="zookeeper"></dubbo:registry>,注冊(cè)中心的地址,zookeeper這個(gè)表示哪個(gè)注冊(cè)中心,<dubbo:protocol name="dubbo" port="20888"></dubbo:protocol>,dubbo這個(gè)表示協(xié)議名,20888這個(gè)表示consumer調(diào)用provider時(shí)的端口號(hào),我們需要知道的事情,第一步,我們?cè)賹懸槐?ubbo:application他的作用是給provider起個(gè)名字,在monitor或者管理工具中區(qū)別是哪個(gè)provider,dubbo:registry注冊(cè)中心,這個(gè)表示配置注冊(cè)中心,配置注冊(cè)中心,第一個(gè)address什么意思,注冊(cè)中心的ip和端口,還有個(gè)protocol,就是使用哪種注冊(cè)中心,dubbo:protocol這個(gè)什么意思,就是配置協(xié)議,name是使用什么協(xié)議,還有個(gè)port,這個(gè)是consumer invoke第四步調(diào)用provider時(shí)的端口號(hào),一定要注意,我配的是20888端口,就占用哪個(gè)端口,我們會(huì)把這個(gè)項(xiàng)目放在服務(wù)器上,也就占用服務(wù)器的20888端口,到這完事之后,你就配置完了,完成之后,配置完之后要新建實(shí)現(xiàn)類,并實(shí)現(xiàn)接口和方法,然后我們看一下dubbo:service,這里是干什么的,注冊(cè)接口還是實(shí)現(xiàn)類,是接口,注冊(cè)接口,<dubbo:service interface="com.learn.service.DemoService" ref="demoServiceImpl">,這是我們注冊(cè)接口,ref引用接口實(shí)現(xiàn)類,bean的id值,完事了,然后最后一步,第六步,啟動(dòng)容器,不就是這個(gè)意思,啟動(dòng)容器分為兩種,第一種方式是通過Spring方式啟動(dòng),第二種方式使用dubbo啟動(dòng)的方式啟動(dòng),我們只是說一下這種方式,其實(shí)我是不用他的,那在這種方式的時(shí)候,這樣做的話要保證我們的配置文件,什么配置文件,applicationContext-dubbo放哪,如果這么寫的話,放在哪都可以,位置沒有要求,下面這個(gè)有要求,要求applicationContext-dubbo.xml必須放入類路徑下/META-INF/spring/*.xml,你隨便去官方找一個(gè),都是這么寫的,咱們推薦使用這種方式,而且后面我們?cè)趯W(xué)其他技術(shù)的時(shí)候,就不是推薦了,就是強(qiáng)制必須

?

總結(jié)

以上是生活随笔為你收集整理的Dubbo的Provider配置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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