news 2026/4/25 16:24:04

手把手教你Spring Cloud Alibaba(一) 集成 Nacos 、Dubbo构建项目

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
手把手教你Spring Cloud Alibaba(一) 集成 Nacos 、Dubbo构建项目

一、背景与项目说明

Dubbo构建项目的微服务好处就是底层的服务可以集中在一块,上层代码消费者(Consumer)直接像使用本地代码一样使用服务。

我们用Nacos作为服务的注册与发现, 方便管理与调用。我们用最简单的项目来说明这个问题,项目有三个子模块:

  • api

    提供服务,与领域实体。 在真正的项目中,做好领域数据的集中管理与划分是衡量一个架构师的其中一个方面

  • provider

    真正服务的实现者,通过注解@DubboService提供对外的微服务组件的提供者(provider)

  • consumer

    服务的使用者,通过注解@DubboReference,就要调用本地服务一样方便。

本项目我们采用的技术栈如下:

  • JDK >= 17
  • Spring Boot 3.X
  • 相应的Spring Cloud Alibaba
  • Nacos 服务 2.X 版本,其默认端口是 8848。(注:Nacos 3.X已经发表,但端口与其他使用上略有些不同)

借助 AI 的提示词:

JDK版本17,Spring Cloud Alibaba 集成 Nacos 、构建一个最简单的Dubbo 服务项目,共有三个字模块:api、provider consumer。

二、模块与代码构成

  1. 父模块,取名为dubbo-demo(实际开发中其实就是你的正式项目),统一管理版本控制与常用依赖。 其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.example</groupId> <artifactId>dubbo-demo</artifactId> <version>1.0-SNAPSHOT</version> <modules> <module>api</module> <module>provider</module> <module>consumer</module> </modules> <packaging>pom</packaging> <!-- 版本管理 --> <properties> <spring.boot.version>2.7.18</spring.boot.version> <spring.cloud.alibaba.version>2021.0.5.0</spring.cloud.alibaba.version> <lombok.version>1.18.28</lombok.version> </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> <!-- Spring Cloud Alibaba 依赖管理 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${spring.cloud.alibaba.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- Lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> <optional>true</optional> </dependency> </dependencies> </dependencyManagement> <!-- 公共依赖 --> <dependencies> <!-- Lombok(编译时注解) --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring.boot.version}</version> </plugin> </plugins> </build> </project>

    api模块

    <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"> <parent> <artifactId>dubbo-demo</artifactId> <groupId>com.example</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>api</artifactId> </project>

    服务接口类:

    packagecom.example.service;publicinterfaceHelloService{StringsayHello(Stringname);}
  2. provider 模块

    <?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"> <parent> <artifactId>dubbo-demo</artifactId> <groupId>com.example</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>provider</artifactId> <dependencies> <!-- 服务接口模块 --> <dependency> <groupId>com.example</groupId> <artifactId>api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <!-- Spring Boot Web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Spring Cloud Alibaba Nacos 服务发现 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!-- Spring Cloud Dubbo --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>3.2.11</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies> </project>

    Spring配置

    server: port: 8081 spring: application: name: dubbo-provider cloud: nacos: discovery: server-addr: 127.0.0.1:8848 dubbo: scan: base-packages: com.example.service.impl # 服务实现类包路径 protocol: name: dubbo port: -1 # 随机端口 registry: address: nacos://127.0.0.1:8848

    服务实现类,注意注解@DubboService

    packagecom.example.service.impl;importcom.example.service.HelloService;importorg.apache.dubbo.config.annotation.DubboService;@DubboService// Dubbo 服务暴露publicclassHelloServiceImplimplementsHelloService{@OverridepublicStringsayHello(Stringname){return"Hello, "+name+"! 来自 Dubbo 服务提供者";}}

    启动类:

    packagecom.example.service.impl.com.example;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublicclassProviderApplication{publicstaticvoidmain(String[]args){SpringApplication.run(ProviderApplication.class,args);}}
  3. consumer 模块

    <?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"> <parent> <artifactId>dubbo-demo</artifactId> <groupId>com.example</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>consumer</artifactId> <dependencies> <!-- API模块依赖 --> <dependency> <groupId>com.example</groupId> <artifactId>api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <!-- Spring Boot Web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Spring Cloud Alibaba Nacos 服务注册发现 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>3.2.11</version> </dependency> </dependencies> </project>
    server: port: 8082 spring: application: name: dubbo-consumer cloud: nacos: discovery: server-addr: 127.0.0.1:8848 dubbo: registry: address: nacos://127.0.0.1:8848 cloud: subscribed-services: dubbo-provider # 要调用的服务名(provider的application.name)

    服务使用者类:HelloController

packagecom.example.controller;importcom.example.service.HelloService;importorg.apache.dubbo.config.annotation.DubboReference;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.PathVariable;importorg.springframework.web.bind.annotation.RestController;@RestControllerpublicclassHelloController{@DubboReference// 远程注入Dubbo服务privateHelloServicehelloService;@GetMapping("/hello/{name}")publicStringhello(@PathVariableStringname){returnhelloService.sayHello(name);}}

启动类:

packagecom.example;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublicclassConsumerApplication{publicstaticvoidmain(String[]args){SpringApplication.run(ConsumerApplication.class,args);}}

三、Nacos服务的准备

①. 去Nacos的官网下载页面 :

https://nacos.io/download/nacos-server/

选择2.x的压缩包进行下载,如图:

②. 解压缩后,在nacos\bin的目录使用命令行启动 :

startup.cmd -m standalone

③. 登录Nacos页面 : http://localhost:8848/nacos 。 如图登录成功

四、代码的功能验证

启动顺序:

启动Nacos(localhost:8848)

启动dubbo-provider

启动dubbo-consumer

浏览器访问:

http://localhost:8082/hello/world

返回:

Hello, world! 来自 Dubbo 服务提供者
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 11:38:23

语音转文字不求人:Fun-ASR WebUI完整使用指南,6大功能详解

语音转文字不求人&#xff1a;Fun-ASR WebUI完整使用指南&#xff0c;6大功能详解 1. 为什么选择Fun-ASR&#xff1f; 语音转文字工具在工作和生活中越来越重要&#xff0c;但大多数在线服务要么收费昂贵&#xff0c;要么隐私无法保障。Fun-ASR作为一款开源的语音识别系统&am…

作者头像 李华
网站建设 2026/4/15 4:23:40

没有N卡也能玩YOLOv5?CPU版Torch安装与轻量化模型实测指南

没有N卡也能玩YOLOv5&#xff1f;CPU版Torch安装与轻量化模型实测指南 在深度学习领域&#xff0c;YOLOv5作为目标检测的标杆算法&#xff0c;常被认为需要高端GPU才能运行。但现实情况是&#xff0c;许多开发者、学生和爱好者手头只有普通笔记本电脑或台式机。本文将彻底打破…

作者头像 李华
网站建设 2026/4/18 1:07:40

语音转文字新选择:清音听真Qwen3-ASR-1.7B部署与实战体验

语音转文字新选择&#xff1a;清音听真Qwen3-ASR-1.7B部署与实战体验 1. 引言&#xff1a;为什么选择Qwen3-ASR-1.7B 在日常工作和生活中&#xff0c;我们经常遇到需要将语音转换为文字的场景&#xff1a;会议记录整理、采访内容转录、视频字幕制作等。传统的人工转录方式不仅…

作者头像 李华
网站建设 2026/4/17 1:05:14

定制露营装备淡旺季租赁折旧成本简易核算表。

直接运行&#xff0c;非常适合&#xff1a;- ✅ 露营装备租赁商家- ✅ 固定资产折旧实操- ✅ Python 会计信息化案例【Python 实战】露营装备淡旺季租赁折旧成本简易核算系统标签&#xff1a;Python / 智能会计 / 固定资产折旧 / 租赁行业 / 实战项目前言&#xff1a;为什么我要…

作者头像 李华
网站建设 2026/4/16 20:52:10

设计小型装修半包主材辅材人工分项独立成本记账实操。

直接运行&#xff0c;非常适合&#xff1a;- ✅ 小型装修公司 / 施工队- ✅ 半包装修成本精细化管理- ✅ Python 会计信息化实战案例【Python 实战】小型装修半包项目主材 / 辅材 / 人工分项独立成本记账系统标签&#xff1a;Python / 智能会计 / 装修行业 / 成本管理 / 实战项…

作者头像 李华