目录
[1、父 POM 工程。(dubbo-parent)](#1、父 POM 工程。(dubbo-parent))
[2、API 模块-接口、实体类。(dubbo-client-simple)](#2、API 模块-接口、实体类。(dubbo-client-simple))
3、服务提供方模块。(dubbo-server-simple)
[4、Web 消费方模块。(dubbo-site-simple)](#4、Web 消费方模块。(dubbo-site-simple))
(3)测试controller。(验证服务的远程调用/消费)
一、Dubbo基本介绍。
- Dubbo是最初阿里为解决自身微服务架构问题而设计和开发的。它是基于Java 语言的高性能、轻量级的 RPC 框架。
- 主要提供:远程服务调用、服务治理、服务监控、服务容错、服务负载均衡等。
- 官方网址:https://cn.dubbo.apache.org/zh-cn/。
- Dubbo架构基本思想。
- Dubbo生产者(服务提供者)启动并暴露服务registration。
- Dubbo消费者从服务注册与发现中心订阅subscribe。
二、Dubbo快速入门。
(1)环境准备与了解。
- nacos-server-2.4.1。(dubbo3.3.0兼容nacos2.x)
- nacos-client。(dubbo-nacos-spring-boot-starter中已引入)
- 对于Spring Boot 应用。(dubbo官方推荐)
XML<dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-bom</artifactId> <version>3.3.0</version> <type>pom</type> <scope>import</scope> </dependency>
XML<dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>3.3.0</version> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-nacos-spring-boot-starter</artifactId> <version>3.3.0</version> </dependency>
- 我这里采用统一使用父工程管理依赖的版本。
- 1、<artifactId>spring-boot-dependencies</artifactId>:是 springboot官方定义的规范artifact,预定义了 Spring Boot 相关组件(各种核心依赖)的版本号,以及这些依赖之间的兼容关系。
- 2、<artifactId>dubbo-bom</artifactId>:是 Apache Dubbo 官方提供的 "依赖管理聚合 POM",作用与spring-boot-dependencies类似,核心是 "统一管理 Dubbo 生态中所有组件的版本"。
- 配合使用<scope>import</scope>。仅在<dependencyManagement>中有效。用于 "导入外部 POM 的依赖管理规则"。(不会实际引入依赖,只管理版本)
- 配合使用<type>pom</type>。它是 Maven 中标识 "配置型依赖" 的关键声明,主要用于依赖版本管理、配置继承和多模块聚合。(jar:默认类型,表示依赖是一个 Java 归档文件,war:表示依赖是一个 Web 应用归档文件)
(2)项目与模块搭建。
- 整体项目结构图。
1、父 POM 工程。(dubbo-parent)
- 具体参考学习官网(创建基于Spring Boot的微服务应用):https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/quick-start/starter/
- pom文件。
XML<?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.hyl</groupId> <artifactId>dubbo-parent</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging> <!--特别注意--> <modules> <module>CLIENT/dubbo-client-simple</module> <module>SERVER/dubbo-server-simple</module> <module>SITE/dubbo-site-simple</module> </modules> <properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <dubbo.version>3.3.0</dubbo.version> <spring-boot.version>3.5.6</spring-boot.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-bom</artifactId> <version>${dubbo.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> </project>
- 一共分子目录CLIENT、SERVER、SITE。分别对应子模块dubbo-client-simple、dubbo-server-simple、dubbo-site-simple。
2、API 模块-接口、实体类。(dubbo-client-simple)
- pom文件。
XML<?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> <parent> <groupId>com.hyl</groupId> <artifactId>dubbo-parent</artifactId> <version>1.0-SNAPSHOT</version> <relativePath>../../pom.xml</relativePath> </parent> <artifactId>dubbo-client-simple</artifactId> <packaging>jar</packaging> <!--显式打包jar供其他服务依赖--> <properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <!--<dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> </dependency>--> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> </dependency> </dependencies> </project>
- 提供一个测试接口DemoService。
javapackage com.hyl.client.simple; import com.hyl.client.simple.bean.User; public interface DemoService { String sayHello(String name); User getUser(Long uid); }
- 提供一个实体类User。
javapackage com.hyl.client.simple.bean; import java.io.Serial; import java.io.Serializable; public class User implements Serializable { //编译时检查字段否符合序列化规范 @Serial private static final long serialVersionUID = 1L; private Long uid; private String name; public Long getUid() { return uid; } public void setUid(Long uid) { this.uid = uid; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "User{" + "uid=" + uid + ", name='" + name + '\'' + '}'; } }
3、服务提供方模块。(dubbo-server-simple)
- pom文件。
XML<?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> <parent> <groupId>com.hyl</groupId> <artifactId>dubbo-parent</artifactId> <version>1.0-SNAPSHOT</version> <relativePath>../../pom.xml</relativePath> </parent> <artifactId>dubbo-server-simple</artifactId> <properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>com.hyl</groupId> <artifactId>dubbo-client-simple</artifactId> <version>${project.parent.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-nacos-spring-boot-starter</artifactId> </dependency> <!--<dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> </dependency>--> </dependencies> </project>
- 提供一个测试接口实现类DemoServiceImpl。
javapackage com.hyl.server.simple.service; import com.hyl.client.simple.DemoService; import com.hyl.client.simple.bean.User; import org.apache.dubbo.config.annotation.DubboService; //暴露服务 @DubboService public class DemoServiceImpl implements DemoService { @Override public String sayHello(String name) { return "Hello "+ name; } @Override public User getUser(Long uid) { User newUser = new User(); newUser.setUid(uid); newUser.setName("用户"+uid); return newUser; } }
- 启动类DubboServerApplication。(开启Dubbo扫描)
javapackage com.hyl.server.simple; import org.apache.dubbo.config.spring.context.annotation.EnableDubbo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @EnableDubbo //启用Dubbo注解扫描 public class DubboServerApplication { public static void main(String[] args) { SpringApplication.run(DubboServerApplication.class, args); } }
- 提供application.yml配置文件。(spring、dubbo服务方基础配置)
XMLspring: application: name: dubbo-server-simple dubbo: application: name: dubbo-server-simple logger: slf4j qos-port: 22226 registry: address: nacos://127.0.0.1:8848 protocol: name: tri port: 50051 #服务提供者 heartbeat: 15000 #心跳检测间隔 provider: timeout: 15000 #服务提供方超时时间 retries: 0 #重试次数
4、Web 消费方模块。(dubbo-site-simple)
- pom文件。
XML<?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> <parent> <groupId>com.hyl</groupId> <artifactId>dubbo-parent</artifactId> <version>1.0-SNAPSHOT</version> <relativePath>../../pom.xml</relativePath> </parent> <artifactId>dubbo-site-simple</artifactId> <properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>com.hyl</groupId> <artifactId>dubbo-client-simple</artifactId> <version>${project.parent.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-nacos-spring-boot-starter</artifactId> </dependency> </dependencies> </project>
- 提供一个测试controller类DemoSiteController。
javapackage com.hyl.site.simple.controller; import com.hyl.client.simple.DemoService; import com.hyl.client.simple.bean.User; import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/api") public class DemoSiteController { @DubboReference(check = false) //启动时不检查服务是否可用 private DemoService demoService; //Spring 6.x 不再推测参数名,必须显式指定 value 或启用 -parameters //必须使用value显示的指定参数名称 @RequestMapping("/hello") public String hello(@RequestParam(value = "name") String name) { return demoService.sayHello(name); } @RequestMapping("/user/{uid}") public User getUser(@PathVariable(value = "uid") Long uid) { return demoService.getUser(uid); } }
- 启动类DubboSiteApplication。(开启Dubbo扫描)
javapackage com.hyl.site.simple; import org.apache.dubbo.config.spring.context.annotation.EnableDubbo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @EnableDubbo // 开启dubbo功能 public class DubboSiteApplication { public static void main(String[] args) { SpringApplication.run(DubboSiteApplication.class, args); } }
- 提供application.yml配置文件。(spring、dubbo消费方基础配置)
XMLserver: port: 8001 spring: application: name: dubbo-site-simple dubbo: application: name: dubbo-site-simple logger: slf4j qos-port: 22227 registry: address: nacos://127.0.0.1:8848 consumer: #消费方专属 timeout: 15000 check: false
三、测试。
(1)debug启动服务,查看运行情况。
(2)访问nacos本地控制台地址。
- 注:想看到消费者服务列表加:registry parameters.register-consumer-url: true 。