1. 程式人生 > >spring boot配置dubbo(properties)

spring boot配置dubbo(properties)

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);
    }
}

5.依次啟動dubbo釋出方專案和呼叫方專案。訪問以上controller,如果這麼執行下來,不出意外的話,就會報空指標異常,釋出的這個介面在呼叫方調不到,修改如下即可。

修改後的專案結構,如下:

這裡寫圖片描述

  也就是說,需要把controller的位置放到dubboService下一級,這裡就算你在引入的地方加上@Lazy 延遲載入註解也呼叫不到,我反正都是調整包結構解決的空指標異常。

6.再次啟動專案,訪問controller,就會訪問成功的:

這裡寫圖片描述

下一篇 寫spring boot與傳統的dubbo xml配置方式