Java+SpringBoot+Dubbo+Nacos快速入门
目录
一、Dubbo基本介绍。
二、Dubbo快速入门。
(1)环境准备与了解。
(2)项目与模块搭建。
1、父 POM 工程。(dubbo-parent)
2、API 模块-接口、实体类。(dubbo-client-simple)
3、服务提供方模块。(dubbo-server-simple)
4、Web 消费方模块。(dubbo-site-simple)
三、测试。
(1)debug启动服务,查看运行情况。
(2)访问nacos本地控制台地址。
(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官方推荐)
<dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-bom</artifactId><version>3.3.0</version><type>pom</type><scope>import</scope> </dependency>
<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 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 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。
package com.hyl.client.simple;import com.hyl.client.simple.bean.User;public interface DemoService {String sayHello(String name);User getUser(Long uid); }
- 提供一个实体类User。
package com.hyl.client.simple.bean;import java.io.Serial; import java.io.Serializable;public class User implements Serializable {//编译时检查字段否符合序列化规范@Serialprivate 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;}@Overridepublic String toString() {return "User{" +"uid=" + uid +", name='" + name + '\'' +'}';} }
3、服务提供方模块。(dubbo-server-simple)
- pom文件。
<?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。
package 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 {@Overridepublic String sayHello(String name) {return "Hello "+ name;}@Overridepublic User getUser(Long uid) {User newUser = new User();newUser.setUid(uid);newUser.setName("用户"+uid);return newUser;} }
- 启动类DubboServerApplication。(开启Dubbo扫描)
package 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服务方基础配置)
spring:application:name: dubbo-server-simpledubbo:application:name: dubbo-server-simplelogger: slf4jqos-port: 22226registry:address: nacos://127.0.0.1:8848protocol:name: triport: 50051 #服务提供者heartbeat: 15000 #心跳检测间隔provider:timeout: 15000 #服务提供方超时时间retries: 0 #重试次数
4、Web 消费方模块。(dubbo-site-simple)
- pom文件。
<?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。
package 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扫描)
package 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消费方基础配置)
server:port: 8001spring:application:name: dubbo-site-simpledubbo:application:name: dubbo-site-simplelogger: slf4jqos-port: 22227registry:address: nacos://127.0.0.1:8848consumer: #消费方专属timeout: 15000check: false
三、测试。
(1)debug启动服务,查看运行情况。
(2)访问nacos本地控制台地址。
- 注:想看到消费者服务列表加:registry parameters.register-consumer-url: true 。
(3)测试controller。(验证服务的远程调用/消费)
访问:http://localhost:8001/api/hello?name=今天星期六。
访问:http://localhost:8001/api/user/888。