前言
💧本文是参考 Dubbo官网案例 以及 尚硅谷Dubbo教程 的学习文档,主要是方便自己复习,也供大家学习dubbo作一定的参考,如有问题欢迎指出.
💧第一部分是 :基于SpringBoot Starter 开发微服务应用案例
💧第二部分是 :关于Dubbo的一些重要知识点
基于SpringBoot Starter 开发微服务应用案例
目标
从零上手开发基于 dubbo-spring-boot-starter 开发微服务,了解 Dubbo x Spring Boot 配置方式。
难度
低
环境要求
- 系统:Windows、Linux、MacOS
- JDK 8 及以上(推荐使用 JDK17)
- Git
- IntelliJ IDEA(可选)
- Docker (可选)
项目介绍
在本任务中,将分为 3 个子模块进行独立开发,模拟生产环境下的部署架构。
. // apache/dubbo-samples/1-basic/dubbo-samples-spring-boot ├── dubbo-samples-spring-boot-interface // 共享 API 模块 ├── dubbo-samples-spring-boot-consumer // 消费端模块 └── dubbo-samples-spring-boot-provider // 服务端模块
如上所示,共有 3 个模块,其中 interface 模块被 consumer 和 provider 两个模块共同依赖,存储 RPC 通信使用的 API 接口。
. // apache/dubbo-samples/1-basic/dubbo-samples-spring-boot ├── dubbo-samples-spring-boot-interface // 共享 API 模块 │ ├── pom.xml │ └── src │ └── main │ └── java │ └── org │ └── apache │ └── dubbo │ └── springboot │ └── demo │ └── DemoService.java // API 接口 ├── dubbo-samples-spring-boot-consumer // 消费端模块 │ ├── pom.xml │ └── src │ ├── main │ │ ├── java │ │ │ └── org │ │ │ └── apache │ │ │ └── dubbo │ │ │ └── springboot │ │ │ └── demo │ │ │ └── consumer │ │ │ ├── ConsumerApplication.java // 消费端启动类 │ │ │ └── Task.java // 消费端模拟调用任务 │ │ └── resources │ │ └── application.yml // Spring Boot 配置文件 ├── dubbo-samples-spring-boot-provider // 服务端模块 │ ├── pom.xml │ └── src │ └── main │ ├── java │ │ └── org │ │ └── apache │ │ └── dubbo │ │ └── springboot │ │ └── demo │ │ └── provider │ │ ├── DemoServiceImpl.java // 服务端实现类 │ │ └── ProviderApplication.java // 服务端启动类 │ └── resources │ └── application.yml // Spring Boot 配置文件 └── pom.xml
如上为本教程接下来会使用到的项目的文件结构。
快速部署
本章将通过几个简单的命令,一步一步教你如何部署并运行一个基于 Dubbo x Spring Boot 的用例。
注:本章部署的代码细节可以在 apache/dubbo-samples 这个仓库中 1-basic/dubbo-samples-spring-boot 中找到,在下一章中也将展开进行讲解。
1. 获取测试工程
在开始整个教程之前,我们需要先获取测试工程的代码。Dubbo 的所有测试用例代码都存储在 apache/dubbo-samples 这个仓库中,以下这个命令可以帮你获取 Samples 仓库的所有代码。
git clone --depth=1 --branch master git@github.com:apache/dubbo-samples.git • 1
2. 启动一个简易的注册中心
对于一个微服务化的应用来说,注册中心是不可或缺的一个组件。只有通过注册中心,消费端才可以成功发现服务端的地址信息,进而进行调用。
为了让本教程更易于上手,我们提供了一个基于 Apache Zookeeper 注册中心的简易启动器,如果您需要在生产环境部署注册中心,请参考生产环境初始化一文部署高可用的注册中心。
Windows: ./mvnw.cmd clean compile exec:java -pl tools/embedded-zookeeper Linux / MacOS: ./mvnw clean compile exec:java -pl tools/embedded-zookeeper Docker: docker run --name some-zookeeper -p 2181:2181 --restart always -d zookeeper
3. 本地打包 API 模块
为了成功编译服务端、消费端模块,需要先在本地打包安装 dubbo-samples-spring-boot-interface 模块。
./mvnw clean install -pl 1-basic/dubbo-samples-spring-boot ./mvnw clean install -pl 1-basic/dubbo-samples-spring-boot/dubbo-samples-spring-boot-interface
4. 启动服务提供者
在启动了注册中心之后,下一步是启动一个对外提供服务的服务提供者。在 dubbo-samples 中也提供了对应的示例,可以通过以下命令快速拉起。
Windows: ./mvnw.cmd clean compile exec:java -pl 1-basic/dubbo-samples-spring-boot/dubbo-samples-spring-boot-provider -Dexec.mainClass="org.apache.dubbo.springboot.demo.provider.ProviderApplication" Linux / MacOS: ./mvnw clean compile exec:java -pl 1-basic/dubbo-samples-spring-boot/dubbo-samples-spring-boot-provider -Dexec.mainClass="org.apache.dubbo.springboot.demo.provider.ProviderApplication" 注:需要开一个独立的 terminal 运行,命令将会保持一直执行的状态。
在执行完上述命令以后,等待一会出现如下所示的日志(Current Spring Boot Application is await)即代表服务提供者启动完毕,标志着该服务提供者可以对外提供服务了。
2023-02-08 17:13:00.357 INFO 80600 --- [lication.main()] o.a.d.c.d.DefaultApplicationDeployer : [DUBBO] Dubbo Application[1.1](dubbo-springboot-demo-provider) is ready., dubbo version: 3.2.0-beta.4, current host: 30.221.128.96 2023-02-08 17:13:00.369 INFO 80600 --- [lication.main()] o.a.d.s.d.provider.ProviderApplication : Started ProviderApplication in 9.114 seconds (JVM running for 26.522) 2023-02-08 17:13:00.387 INFO 80600 --- [pool-1-thread-1] .b.c.e.AwaitingNonWebApplicationListener : [Dubbo] Current Spring Boot Application is await...
5. 启动服务消费者
最后一步是启动一个服务消费者来调用服务提供者,也即是 RPC 调用的核心,为服务消费者提供调用服务提供者的桥梁。
Windows: ./mvnw.cmd clean compile exec:java -pl 1-basic/dubbo-samples-spring-boot/dubbo-samples-spring-boot-consumer -Dexec.mainClass="org.apache.dubbo.springboot.demo.consumer.ConsumerApplication" Linux / MacOS: ./mvnw clean compile exec:java -pl 1-basic/dubbo-samples-spring-boot/dubbo-samples-spring-boot-consumer -Dexec.mainClass="org.apache.dubbo.springboot.demo.consumer.ConsumerApplication"
在执行完上述命令以后,等待一会出现如下所示的日志(Hello world),打印出的数据就是服务提供者处理之后返回的,标志着一次服务调用的成功。
2023-02-08 17:14:33.045 INFO 80740 --- [lication.main()] o.a.d.s.d.consumer.ConsumerApplication : Started ConsumerApplication in 11.052 seconds (JVM running for 31.62) Receive result ======> Hello world 2023-02-08 17:14:33.146 INFO 80740 --- [pool-1-thread-1] .b.c.e.AwaitingNonWebApplicationListener : [Dubbo] Current Spring Boot Application is await... Wed Feb 08 17:14:34 CST 2023 Receive result ======> Hello world Wed Feb 08 17:14:35 CST 2023 Receive result ======> Hello world Wed Feb 08 17:14:36 CST 2023 Receive result ======> Hello world Wed Feb 08 17:14:37 CST 2023 Receive result ======> Hello world
动手实践(从零代码开发版)
本章将通过手把手的教程一步一步教你如何从零开发一个微服务应用。
1. 启动注册中心
对于一个微服务化的应用来说,注册中心是不可或缺的一个组件。只有通过注册中心,消费端才可以成功发现服务端的地址信息,进而进行调用。
为了让本教程更易于上手,我们提供了一个基于 Apache Zookeeper 注册中心的简易启动器,如果您需要在生产环境部署注册中心,请参考生产环境初始化一文部署高可用的注册中心。
Windows: git clone --depth=1 --branch master git@github.com:apache/dubbo-samples.git cd dubbo-samples ./mvnw.cmd clean compile exec:java -pl tools/embedded-zookeeper Linux / MacOS: git clone --depth=1 --branch master git@github.com:apache/dubbo-samples.git cd dubbo-samples ./mvnw clean compile exec:java -pl tools/embedded-zookeeper Docker: docker run --name some-zookeeper -p 2181:2181 --restart always -d zookeeper
2. 初始化项目
从本小节开始,将基于 IntelliJ IDEA 进行工程的搭建以及测试。
如上图所示,可以建立一个基础的项目。
搭建了基础项目之后,我们还需要创建 dubbo-spring-boot-demo-interface 、dubbo-spring-boot-demo-provider 和 dubbo-spring-boot-demo-consumer 三个子模块。
创建了三个子模块之后,需要创建一下几个文件夹:
在 dubbo-spring-boot-demo-consumer/src/main/java 下创建
org.apache.dubbo.springboot.demo.consumer package
在 dubbo-spring-boot-demo-interface/src/main/java 下创建
org.apache.dubbo.springboot.demo package
在 dubbo-spring-boot-demo-provider/src/main/java 下创建
org.apache.dubbo.springboot.demo.provider package
3. 添加 Maven 依赖
在初始化完项目以后,我们需要先添加 Dubbo 相关的 maven 依赖。
对于多模块项目,首先需要在父项目的 pom.xml 里面配置依赖信息。
编辑 ./pom.xml 这个文件,添加下列配置。
<properties> <dubbo.version>3.2.0-beta.4</dubbo.version> <spring-boot.version>2.7.8</spring-boot.version> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencyManagement> <dependencies> <!-- Spring Boot --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- Dubbo --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-bom</artifactId> <version>${dubbo.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-dependencies-zookeeper-curator5</artifactId> <version>${dubbo.version}</version> <type>pom</type> </dependency> </dependencies> </dependencyManagement> <build> <pluginManagement> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring-boot.version}</version> </plugin> </plugins> </pluginManagement> </build>
然后在 dubbo-spring-boot-consumer 和 dubbo-spring-boot-provider 两个模块 pom.xml 中进行具体依赖的配置。
编辑 ./dubbo-spring-boot-consumer/pom.xml 和 ./dubbo-spring-boot-provider/pom.xml 这两文件,都添加下列配置。
<dependencies> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-samples-spring-boot-interface</artifactId> <version>${project.parent.version}</version> </dependency> <!-- dubbo --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-dependencies-zookeeper-curator5</artifactId> <type>pom</type> <exclusions> <exclusion> <artifactId>slf4j-reload4j</artifactId> <groupId>org.slf4j</groupId> </exclusion> </exclusions> </dependency> <!-- spring boot starter --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> </dependencies>
在这份配置中,定义了 dubbo 和 zookeeper(以及对应的连接器 curator)的依赖。
添加了上述的配置以后,可以通过 IDEA 的 Maven - Reload All Maven Projects 刷新依赖。