除了可以使用傳統的XML配置方式開發Dubbo應用,還可以使用Spring Boot開發Dubbo應用,特別對於Java技術薄弱和Maven經驗少,且又不熟悉Dubbo架構的開發人員更為適合。本文以全新開發過程,向您展示如何使用Spring Boot開發Dubbo應用,並使用SAE服務註冊中心實現服務註冊與發現。
前提條件
下載Maven並設定環境變數。
下載最新版本的Nacos Server。
啟動Nacos Server。
解壓下載的Nacos Server壓縮包
進入
nacos/bin目錄,啟動Nacos Server。Linux/Unix/Mac系統:執行命令
sh startup.sh -m standalone。Windows系統:修改
startup.cmd,配置參數set MODE="standalone",然後執行。
為什麼使用Spring Boot開發Dubbo應用
Spring Boot簡化了微服務應用的配置和部署,同時Nacos又提供了服務註冊發現和組態管理功能,兩者結合的方式能夠協助您快速搭建基於Spring的Dubbo服務,相比XML的開發方式,大幅提升開發效率。
全新情境使用Spring Boot開發Dubbo應用有兩種主要的方式:
使用XML開發。
使用Spring Boot的註解方式開發。
使用XML方式的步驟,請參見將Dubbo應用託管到SAE。本文介紹如何使用Spring Boot的註解方式開發Dubbo服務。
樣本工程
您可以按照本文的逐步搭建工程,也可以選擇直接下載本文對應的樣本工程,或者使用Git來clone:git clone https://github.com/aliyun/alibabacloud-microservice-demo.git
該專案包含了眾多的樣本工程,本文對應的樣本工程位於alibabacloud-microservice-demo/microservice-doc-demo/dubbo-samples-spring-boot。
建立服務提供者
建立命名為
spring-boot-dubbo-provider的Maven工程。在
pom.xml檔案中添加所需的依賴。這裡以Spring Boot 2.0.6.RELEASE為例。
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.0.6.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-actuator</artifactId> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.3</version> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>1.1.1</version> </dependency> </dependencies>開發Dubbo服務提供者。
Dubbo中服務都是以介面的形式提供的。
在
src/main/java路徑下建立一個packagecom.alibaba.edas.boot。在
com.alibaba.edas.boot下建立一個介面(interface)IHelloService,裡麵包含一個SayHello方法。package com.alibaba.edas.boot; public interface IHelloService { String sayHello(String str); }在
com.alibaba.edas.boot下建立一個類IHelloServiceImpl,實現此介面。package com.alibaba.edas.boot; import com.alibaba.dubbo.config.annotation.Service; @Service public class IHelloServiceImpl implements IHelloService { public String sayHello(String name) { return "Hello, " + name + " (from Dubbo with Spring Boot)"; } }說明這裡的Service註解是Dubbo提供的一個註解類,類的全名稱為:com.alibaba.dubbo.config.annotation.Service。
配置Dubbo服務。
在
src/main/resources路徑下建立application.properties或application.yaml檔案並開啟。在
application.properties或application.yaml中添加如下配置。# Base packages to scan Dubbo Components (e.g @Service , @Reference) dubbo.scan.basePackages=com.alibaba.edas.boot dubbo.application.name=dubbo-provider-demo dubbo.registry.address=nacos://127.0.0.1:8848說明以上三個配置沒有預設值,必須要給出具體的配置。
dubbo.scan.basePackages的值是開發的代碼中含有com.alibaba.dubbo.config.annotation.Service和com.alibaba.dubbo.config.annotation.Reference註解所在的包。多個包之間用逗號隔開。dubbo.registry.address的值首碼必須以nacos://開頭,後面的IP地址和連接埠指的是Nacos Server的地址。程式碼範例中為本地地址,如果您使用EDAS託管的註冊中心,無需額外調整,EDAS在運行時會自動調整為正確的註冊中心地址。如果您使用自建的Nacos註冊中心,需將dubbo.registry.address的參數值修改為正確的Nacos地址。
開發並啟動Spring Boot入口類
DubboProvider。package com.alibaba.edas.boot; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DubboProvider { public static void main(String[] args) { SpringApplication.run(DubboProvider.class, args); } }登入Nacos控制台
http://127.0.0.1:8848,在左側導覽列中單擊服務列表,查看提供者列表。可以看到服務提供者裡已經包含了
com.alibaba.edas.boot.IHelloService,且可以查詢該服務的服務分組和提供者IP。
建立服務消費者
建立一個Maven工程,命名為
spring-boot-dubbo-consumer。在
pom.xml檔案中添加相關依賴。這裡以Spring Boot 2.0.6.RELEASE為例。
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.0.6.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-actuator</artifactId> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.3</version> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>1.1.1</version> </dependency> </dependencies>如果您需要選擇使用Spring Boot 1.x的版本,請使用Spring Boot 1.5.x版本,對應的com.alibaba.boot:dubbo-spring-boot-starter版本為0.1.0。
說明Spring Boot 1.x版本的生命週期已於2019年08月結束,推薦使用新版本開發您的應用。
開發Dubbo消費者。
在
src/main/java路徑下建立packagecom.alibaba.edas.boot。在
com.alibaba.edas.boot下建立一個介面(interface)IHelloService,裡麵包含一個SayHello方法。package com.alibaba.edas.boot; public interface IHelloService { String sayHello(String str); }
開發Dubbo服務調用。
例如需要在Controller中調用一次遠程Dubbo服務,開發的代碼如下所示。
package com.alibaba.edas.boot; import com.alibaba.dubbo.config.annotation.Reference; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class DemoConsumerController { @Reference private IHelloService demoService; @RequestMapping("/sayHello/{name}") public String sayHello(@PathVariable String name) { return demoService.sayHello(name); } }說明這裡的Reference註解是com.alibaba.dubbo.config.annotation.Reference。
在
application.properties/application.yaml設定檔中新增以下配置。dubbo.application.name=dubbo-consumer-demo dubbo.registry.address=nacos://127.0.0.1:8848說明以上兩個配置沒有預設值,必須給出具體的配置。
dubbo.registry.address的值首碼必須以nacos://開頭,後面的IP地址和連接埠為Nacos Server的地址。程式碼範例中為本地地址,如果您將Nacos Server部署在其它機器上,請修改為實際的IP地址。
開發並啟動Spring Boot入口類
DubboConsumer。package com.alibaba.edas.boot; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DubboConsumer { public static void main(String[] args) { SpringApplication.run(DubboConsumer.class, args); } }登入Nacos控制台
http://127.0.0.1:8848,在左側導覽列中單擊服務列表,再在服務列表頁面查看調用者服務。可以看到包含了
com.alibaba.edas.boot.IHelloService,且可以查看該服務的服務分組和調用者IP。
結果驗證
`curl http://localhost:8080/sayHello/SAE`
`Hello, SAE (from Dubbo with Spring Boot)` 部署到SAE
本地使用Nacos作為註冊中心的應用,可以直接部署到SAE中,無需做任何修改,註冊中心會被自動替換為SAE上的註冊中心。
您可以根據實際需求選擇部署途徑(控制台或工具)。具體資訊,請參見應用部署。
使用控制台部署前,請參見如下操作將應用程式編譯為可啟動並執行JAR包、WAR包。
在
pom.xml檔案中添加以下打包外掛程式的配置。Provider
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> <configuration> <classifier>spring-boot</classifier> <mainClass>com.alibaba.edas.boot.DubboProvider</mainClass> </configuration> </execution> </executions> </plugin> </plugins> </build>Consumer
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> <configuration> <classifier>spring-boot</classifier> <mainClass>com.alibaba.edas.boot.DubboConsumer</mainClass> </configuration> </execution> </executions> </plugin> </plugins> </build>
執行mvn clean package將本地的程式打成JAR包。