【Dubbo】SpringBoot 整合 Dubbo 示例
阿新 • • 發佈:2021-01-19
因為 Dubbo 的依賴中引入了 Spring 相關 Jar 包,所以使用 Dubbo 預設是基於 Spring 的,在前面的文章我們介紹瞭如何 Dubbo 進行遠端通訊和服務治理,那麼,本篇我們就來看看如何使用 SpringBoot 整合。
建立三個單獨模組,分別表示 api,provider,consumer。
1.dubbo-api
/**
*要暴露的服務
*/
public interface ISayHelloService {
String sayHello();
}
2.dubbo-provider
1)引入依賴
<dependencies >
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</ artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions >
</dependency>
<!-- 服務介面 -->
<dependency>
<groupId>com.xupt.yzh</groupId>
<artifactId>dubbo-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.2</version>
</dependency>
<!-- dubbo 自動裝配相關內容-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.1</version>
</dependency>
<!-- 註冊中心Zk客戶端 -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.0.1</version>
</dependency>
</dependencies>
2)實現服務
// 這個@Service是dubbo的提供的,表示暴露服務Bean
// 也可以在@Service(loadbalance=)進行相關配置
@Service
public class SayHelloServiceImpl implements ISayHelloService {
@Override
public String sayHello() {
return "Hello Dubbo...";
}
}
3)配置服務內容
dubbo.scan.base-packages=com.xupt.yzh.dubboprovider
dubbo.application.name=dubbo-springboot
dubbo.registry.address=zookeeper://43.107.136.120:2181
幾點注意:
- SpringBoot 預設採用dubbo協議與20880埠,所以 dubbo.protocol.name 與 dubbo.protocol.port 可以不顯式配置
- dubbo.application.name 必須配置,其作用在於多節點提供同一服務時起標識作用
- 在註冊中心 zookeeper 中,服務節點的名稱仍然是介面全類名,application.name 儲存在臨時節點的 url 中(通過&拼接)
- 如果在 com…ISayHelloService 下有多個節點(代表多種服務實現),那麼 applicaiton.name 可以在呼叫方的@Reference(application=“ ‘)進行指定
- dubbo.scan.base-packages 必須配置了才能掃描
4)啟動服務
啟動服務後可以在 zookeeper 中看相關服務是否已經註冊
3.dubbo-client
1)引入依賴
這裡同 provider,但一般還會引入 web-starter,因為消費端一般會包含 Controller,提供 web 訪問
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.xupt.yzh</groupId>
<artifactId>dubbo-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.2</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.0.1</version>
</dependency>
</dependencies>
2)遠端呼叫服務
@RestController
public class DubboController {
// Dubbo提供的註解,標識根據服務名獲取相應服務Bean
// 也可以在@Reference(loadbalance=)進行相關配置
@Reference
ISayHelloService sayHelloService;
@GetMapping("/sayHello")
public String sayHello() {
// 呼叫服務提供方法
return sayHelloService.sayHello();
}
}
3)配置服務內容
與provider相同
dubbo.registry.address=zookeeper://43.107.136.120:2181
dubbo.scan.base-packages=com.xupt.yzh.dubboclient
dubbo.application.name=dubbo-springboot-client
4.啟動服務
啟動後可以在web端進行訪問
本篇相關程式碼我放到 GitHub 上了,有需要參考的同學點選這裡跳轉…