開發環境:InteliJ IDEA COMMUNITY
作業系統 :macOS Mojave
注冊中心:為了便于本地開發,本教程使用 EDAS 提供的輕量級配置中心,輕量級配置中心包含了 EDAS 服務注冊中心的基本功能。
1. 注冊中心安裝與配置
輕量級配置中心配置及使用請單獨參考: 輕量級配置中心驗證配置中心是否可以正常使用:
打開浏覽器,在位址欄輸入 jmenv.tbsite.net:8080,回車,可看到輕量配置中心首頁。
2. 建立 dubbo-provider
【File】->【New】->【Project】->【maven】->【Next】-> 自定義輸入GroupId, ArtifactId
a. 主要依賴: Spring Boot 2.0.6.RELEASE(starter-web, actuator),dubbo-spring-boot-starter (0.2.0),edas-dubbo-extension (1.0.1)
b. 建立接口及方法 建立示例:IEatService,提供方法:eatFood()<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.alibaba.edas.boot</groupId> <artifactId>dubbo-boot-provider</artifactId> <version>1.0-SNAPSHOT</version> <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>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.2.0</version> </dependency> <dependency> <groupId>com.alibaba.edas</groupId> <artifactId>edas-dubbo-extension</artifactId> <version>1.0.1</version> </dependency> </dependencies> </project>
c. 實作該接口方法package me.gary.edas.boot; public interface IEatService { String eatFood(String str); }
package me.gary.edas.boot; import com.alibaba.dubbo.config.annotation.Service; @Service public class EatServiceImpl implements IEatService { public String eatFood(String name) { return "Please eat " + name + " (from Dubbo with Spring Boot)"; } }
d. 配置 dubbo 服務
src/main/resources 路徑下建立 application.properties
dubbo.scan.basePackages: 接口服務實作類,@Service 注解所在的 package,若有多個,用逗号隔開
dubbo.registry.address: 前文提到的,本地已配置運作的輕量配置中心位址
e. 開發 SpringBoot 入口類,并啟動# Base packages to scan Dubbo Components (e.g @Service , @Reference) dubbo.scan.basePackages=me.gary.edas.boot dubbo.application.name=dubbo-provider-springboot dubbo.registry.address=edas://127.0.0.1:8080
spring boot 的 tomcat 啟動失敗!!"address already in use"。回憶一下, 輕量注冊中心是不是已經啟動了8080的web頁面啊package me.gary.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); } }
?是的。
f. 修改 spring boot 配置,指定端口為非8080端口,本示例使用8081。
最終,application.properties 配置如下:
“Tomcat started on port(s): 8081 (http) with context path ''”,消費者在指定8081端口成功運作。 打開“jmenv.tbsite.net:8080”, 可以看到服務提供者裡已經包含了com.alibaba.edas.boot.IEatService,且可以看到該服務的服務分組和提供者 IP。# Base packages to scan Dubbo Components (e.g @Service , @Reference) dubbo.scan.basePackages=me.gary.edas.boot dubbo.application.name=dubbo-provider-springboot dubbo.registry.address=edas://127.0.0.1:8080 server.port=8081
3. 建立 dubbo-consumer
a. pom 依賴配置,同 provider
b. 建立接口及方法,同 provider
c. 此項目調用以 Controller 方式為例,建立 ConsumerController
特别注意: 同樣,别忘記了 provider 中出現的問題。spring boot 預設在8080端口啟動 tomcat,此例 consumer 配置設定8082。package me.gary.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 ConsumerController { @Reference private IEatService eatService; @RequestMapping("/eatFood/{food}") public String eatFood(@PathVariable String food) { return eatService.eatFood(food); } }
dubbo.application.name=dubbo-consumer-springboot dubbo.registry.address=edas://127.0.0.1:8080 server.port=8082
package me.gary.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); } }
通過配置中心頁面,可以看到服務調用者 com.alibaba.edas.boot.IEatService 已經注冊成功。
f. 通過 Consumer 暴露的 RESTful 接口,調用 provider 的 eatFood() 接口。
本例 Consumer 注冊端口為:8082,讀者需根據 application.properties 中指定的端口,修改以下指令。
Yay! RESTful 接口 --> consumer --> provider,該流程驗證通過。curl http://localhost:8082/eatFood/apple