开发环境: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)
<?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>
b. 创建接口及方法
创建示例:IEatService,提供方法:eatFood()
package me.gary.edas.boot; public interface IEatService { String eatFood(String str); }
c. 实现该接口方法
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: 前文提到的,本地已配置运行的轻量配置中心地址
# 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
e. 开发 SpringBoot 入口类,并启动
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); } }
spring boot 的 tomcat 启动失败!!"address already in use"。回忆一下,轻量注册中心是不是已经启动了8080的web页面啊?是的。
f. 修改 spring boot 配置,指定端口为非8080端口,本示例使用8081。
最终,application.properties 配置如下:
# 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
“Tomcat started on port(s): 8081 (http) with context path ''”,消费者在指定8081端口成功运行。
打开“jmenv.tbsite.net:8080”,
可以看到服务提供者里已经包含了com.alibaba.edas.boot.IEatService,且可以看到该服务的服务分组和提供者 IP。
3. 创建 dubbo-consumer
a. pom 依赖配置,同 provider
b. 创建接口及方法,同 provider
c. 此项目调用以 Controller 方式为例,创建 ConsumerController
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); } }
d. 配置 dubbo 服务
src/main/resources 路径下创建 application.properties
特别注意:同样,别忘记了 provider 中出现的问题。spring boot 默认在8080端口启动 tomcat,此例 consumer 分配8082。
dubbo.application.name=dubbo-consumer-springboot dubbo.registry.address=edas://127.0.0.1:8080 server.port=8082
e. 开发 SpringBoot 入口类,并启动
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 中指定的端口,修改以下指令。
curl http://localhost:8082/eatFood/apple
Yay! RESTful 接口 --> consumer --> provider,该流程验证通过。