spring?boot配置dubbo方式(properties)
dubbo和zookeeper配合使用,具體的它們之間的配置這里不說了。
spring boot與dubbo配置有兩種方式
1)spring boot在自己的配置文件application.properties 配置dubbo。(本篇主要說這個(gè))
2)spring boot結(jié)合傳統(tǒng)spring dubbo配置文件xml形式。(請(qǐng)看下一篇文章)
本篇主要說在自己配置文件里配置dubbo的步驟
1) dubbo接口發(fā)布者配置
1.首先需要引入如下依賴:
<!-- Spring Boot Dubbo 依賴--> <dependency> <groupId>io.dubbo.springboot</groupId> <artifactId>spring-boot-starter-dubbo</artifactId> <version>1.0.0</version> </dependency>
2.在application.properties
文件里配置如下內(nèi)容:
#dubbo提供者的別名,只是個(gè)標(biāo)識(shí) spring.dubbo.application.name=provider #zk地址 spring.dubbo.registry.address=zookeeper://192.168.1.160:2181 #dubbo協(xié)議 spring.dubbo.protocol.name=dubbo #duboo端口號(hào) spring.dubbo.protocol.port=20880 #這是你要發(fā)布到dubbo的接口所在包位置 spring.dubbo.scan=test.spring.dubboService
3.創(chuàng)建一個(gè)要發(fā)布的dubbo接口和其實(shí)現(xiàn)類,具體如下:
package test.spring.dubboService; public interface TestDubboService { public String getName(String name); }
package test.spring.dubboService.impl; import com.alibaba.dubbo.config.annotation.Service; import test.spring.dubboService.TestDubboService; @Service public class TestDubboServiceImpl implements TestDubboService { @Override public String getName(String name) { // TODO Auto-generated method stub return "姓名:"+name; } }
接口上什么都不加,但是其實(shí)現(xiàn)類上要加上一個(gè)注解@Service
注意該注解是com.alibaba.dubbo.config.annotation.Service
如果引入錯(cuò)誤,發(fā)布也不會(huì)成功的。
4.如果發(fā)布的接口需要加入版本號(hào),就可以寫為這樣@Service(version="1.0.0.1")
具體的包位置接口請(qǐng)看下圖:
我在前幾篇里說過,spring boot默認(rèn)掃描是從啟動(dòng)類開始依次向下級(jí)包掃描,如果被調(diào)用方在調(diào)用的時(shí)候還沒有初始化,就肯定會(huì)找不到的,上圖的接口為什么會(huì)放在實(shí)現(xiàn)類的上層,應(yīng)該就能理解了吧。
到此配置dubbo的發(fā)布方就完成了,直接運(yùn)行啟動(dòng)類,查看dubbo接口的發(fā)布情況。如下:
2) dubbo接口消費(fèi)者配置
1、首先依然要引入spring boot的依賴:
<!-- Spring Boot Dubbo 依賴--> <dependency> <groupId>io.dubbo.springboot</groupId> <artifactId>spring-boot-starter-dubbo</artifactId> <version>1.0.0</version> </dependency>
2.在application.properties
文件里填些dubbo的配置:
spring.dubbo.application.name=consumer-1 #zk地址 spring.dubbo.registry.address=zookeeper://192.168.1.160:2181 #dubbo協(xié)議 spring.dubbo.protocol.name=dubbo #duboo端口號(hào) spring.dubbo.protocol.port=20880 #這是要掃描使用的dubbo接口所在包位置 spring.dubbo.scan=test.spring.dubboService
3.由于消費(fèi)者和發(fā)布者不在同一項(xiàng)目里,上邊的test.spring.dubboService
包里,已發(fā)布接口TestDubboService
也需要復(fù)制一份到消費(fèi)者這邊,并且包結(jié)構(gòu)都必須與發(fā)布的一樣。
注意上邊,這里我說的復(fù)制,具體在項(xiàng)目開發(fā)里不會(huì)這么干的,比如我們是這樣來做的。
我們是項(xiàng)目里建了三個(gè)項(xiàng)目(springboot-facade、springboot-rest、springboot-service),springboot-facade里放了接口的結(jié)構(gòu),即service和bean,springboot-rest項(xiàng)目和springboot-service項(xiàng)目分別引用springboot-facade項(xiàng)目,將來就算別人來調(diào)用我們的接口,只要引入一下springboot-facade包,配置一下dubbo,就可以了。
當(dāng)然就算webservice那種遠(yuǎn)程調(diào)用,也是需要通過wsdl去生成service結(jié)構(gòu)在消費(fèi)者這邊。
關(guān)于單項(xiàng)目需要拷貝的話,具體請(qǐng)看下圖,主要是提示一下,復(fù)制的接口在項(xiàng)目所處的路徑必須要與發(fā)布的路徑相同:
4.最后在調(diào)用的地方,我是在TestController
引入的接口,在引入的地方需要加一個(gè)注解,該注解為alibaba的 @Reference
,同理如果想加入版本號(hào),則加上version即可,值要與發(fā)布接口的版本號(hào)對(duì)應(yīng)。
例如:@Reference(version="1.0.0.1")
,具體如下:
package test.spring.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import com.alibaba.dubbo.config.annotation.Reference; import test.spring.dubboService.TestDubboService; @RestController @RequestMapping("/springboot") public class TestController { @Reference TestDubboService testDubboService; @RequestMapping(value="abc/akf",method=RequestMethod.GET) public String abc(String name){ return testDubboService.getName(name); } }
5.依次啟動(dòng)dubbo發(fā)布方項(xiàng)目和調(diào)用方項(xiàng)目。
訪問以上controller,如果這么運(yùn)行下來,不出意外的話,就會(huì)報(bào)空指針異常,發(fā)布的這個(gè)接口在調(diào)用方調(diào)不到,修改如下即可。
修改后的項(xiàng)目結(jié)構(gòu),如下:
也就是說,需要把controller的位置放到dubboService下一級(jí),這里就算你在引入的地方加上@Lazy
延遲加載注解也調(diào)用不到,我反正都是調(diào)整包結(jié)構(gòu)解決的空指針異常。
6.再次啟動(dòng)項(xiàng)目,訪問controller,就會(huì)訪問成功的:
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決Nacos集群?jiǎn)?dòng)失敗:java版本問題
這篇文章主要介紹了解決Nacos集群?jiǎn)?dòng)失敗:java版本問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06Springboot實(shí)現(xiàn)過濾器的兩種方式
今天通過本文給大家分享Springboot實(shí)現(xiàn)過濾器的兩種方式,第一種是spring容器注冊(cè)filter,第二種方式是通過@WebFilter 注解來配置,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2023-10-10Spring Security OAuth 自定義授權(quán)方式實(shí)現(xiàn)手機(jī)驗(yàn)證碼
這篇文章主要介紹了Spring Security OAuth 自定義授權(quán)方式實(shí)現(xiàn)手機(jī)驗(yàn)證碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02