spring boot配置dubbo(properties)
阿新 • • 發佈:2019-01-02
spring boot與dubbo配置(properties)
dubbo和zookeeper配合使用,具體的它們之間的配置這裡不說了。
一、spring boot與dubbo配置有兩種方式:
1)spring boot在自己的配置檔案application.properties
配置dubbo。(本篇主要說這個)
2)spring boot結合傳統spring dubbo配置檔案xml形式。(請看下一篇文章)
二、本篇主要說在自己配置檔案裡配置dubbo的步驟:
1)dubbo介面釋出者配置
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
檔案裡配置如下內容:
#dubbo提供者的別名,只是個標識
spring.dubbo.application.name=provider
#zk地址
spring.dubbo .registry.address=zookeeper://192.168.1.160:2181
#dubbo協議
spring.dubbo.protocol.name=dubbo
#duboo埠號
spring.dubbo.protocol.port=20880
#這是你要釋出到dubbo的介面所在包位置
spring.dubbo.scan=test.spring.dubboService
3.建立一個要釋出的dubbo介面和其實現類,具體如下:
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;
}
}
介面上什麼都不加,但是其實現類上要加上一個註解@Service
注意該註解是com.alibaba.dubbo.config.annotation.Service
如果引入錯誤,釋出也不會成功的。
4.如果釋出的介面需要加入版本號,就可以寫為這樣@Service(version="1.0.0.1")
具體的包位置介面請看下圖:
我在前幾篇裡說過,spring boot預設掃描是從啟動類開始依次向下級包掃描,如果被呼叫方在呼叫的時候還沒有初始化,就肯定會找不到的,上圖的介面為什麼會放在實現類的上層,應該就能理解了吧。
到此配置dubbo的釋出方就完成了,直接執行啟動類,檢視dubbo介面的釋出情況。如下:
2)dubbo介面消費者配置
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協議
spring.dubbo.protocol.name=dubbo
#duboo埠號
spring.dubbo.protocol.port=20880
#這是要掃描使用的dubbo介面所在包位置
spring.dubbo.scan=test.spring.dubboService
3.由於消費者和釋出者不在同一專案裡,上邊的test.spring.dubboService
包裡,已釋出介面TestDubboService
也需要複製一份到消費者這邊,並且包結構都必須與釋出的一樣。
注意上邊,這裡我說的複製,具體在專案開發裡不會這麼幹的,比如我們是這樣來做的。
我們是專案裡建了三個專案(springboot-facade、springboot-rest、springboot-service),springboot-facade裡放了介面的結構,即service和bean,springboot-rest專案和springboot-service專案分別引用springboot-facade專案,將來就算別人來呼叫我們的介面,只要引入一下springboot-facade包,配置一下dubbo,就可以了。
當然就算webservice那種遠端呼叫,也是需要通過wsdl去生成service結構在消費者這邊。
關於單專案需要拷貝的話,具體請看下圖,主要是提示一下,複製的介面在專案所處的路徑必須要與釋出的路徑相同:
4.最後在呼叫的地方,我是在TestController
引入的介面,在引入的地方需要加一個註解,該註解為alibaba的 @Reference
,同理如果想加入版本號,則加上version即可,值要與釋出介面的版本號對應。例如:@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);
}
}