导言
在现代软件开发中,微服务架构因其灵活性和可扩展性而备受青睐。本文将介绍如何在 Spring Boot 项目中实现微服务架构,从创建父模块到使用 Nacos 进行服务注册与发现。
一、创建父模块
1. 删除 src
目录
在创建项目时,先删除默认生成的 src
目录,以确保项目结构的整洁和规范。
2. 编写父 pom.xml
文件
配置项目的基础依赖管理,确保各个模块的版本一致性。
<properties>
<!-- Spring Cloud、Spring Boot及Spring Cloud Alibaba的版本配置 -->
<spring.cloud.version>2022.0.0</spring.cloud.version>
<spring.boot.version>3.0.2</spring.boot.version>
<spring.cloud.alibaba.version>2022.0.0.0</spring.cloud.alibaba.version>
</properties>
注意:版本号需与官方文档一致。
二、父模块添加依赖
在父 pom.xml
中添加以下依赖管理配置,以支持 Spring Cloud、Spring Boot 和 Spring Cloud Alibaba 的功能。
<dependencyManagement>
<dependencies>
<!-- Spring Cloud的依赖管理 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 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的依赖管理,用于与阿里巴巴的服务(如Nacos、Sentinel等)集成 -->
<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>
</dependencies>
</dependencyManagement>
三、创建子模块
根据项目需求创建子模块,如 movie-provider
和 movie-consumer
,用于分别提供服务和消费服务。
子模块配置示例
在子模块的 pom.xml
中配置其与父模块的关系。
<parent>
<!-- 与父pom.xml文件中的配置保持一致 -->
<groupId>org.example</groupId>
<artifactId>springclouddemo</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath> <!-- 定位父pom -->
</parent>
四、配置父子模块关系
在父 pom.xml
中声明所有子模块,以便于构建和管理。
<modules>
<module>movie-provider</module>
<module>movie-consumer</module>
</modules>
五、子模块添加依赖
为每个子模块添加所需的依赖,以实现其功能。
<dependencies>
<!-- Spring Boot Web Starter,提供构建Web应用的基础依赖(如Spring MVC、嵌入式Tomcat等) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot Test Starter,包含测试所需的依赖(如JUnit、Mockito等),用于单元测试和集成测试 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Spring Boot Actuator,提供生产级应用的监控和管理功能(如健康检查、指标监控等) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- Nacos Discovery Starter,用于服务注册和发现,将服务注册到Nacos,并从Nacos中发现其他服务 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- Spring Cloud LoadBalancer,用于客户端负载均衡,实现多个服务实例之间的负载均衡 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
</dependencies>
六、配置属性文件 application.properties
配置 Nacos 基本信息
在两个微服务包中分别配置 application.properties
文件,指定服务名称和 Nacos 地址。
# 服务提供者
server.port=8081
spring.application.name=nacos-producer
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
# 服务消费者
spring.application.name=movie-consumer
server.port=8082
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
提示:若不使用 Nacos 进行服务注册与发现,可通过将
spring.cloud.nacos.discovery.enabled
设为false
来禁用该功能。
启动 Provider
示例
编写并启动服务提供者的主应用类。
@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderDemoApplication {
public static void main(String[] args) {
SpringApplication.run(NacosProducerDemoApplication.class, args);
}
@RestController
public class EchoController {
@GetMapping(value = "/echo/{string}")
public String echo(@PathVariable String string) {
return "Hello Nacos Discovery " + string;
}
}
}
启动后,可以在 Nacos 控制台上查看注册的服务信息。
七、启动 Nacos 作为注册中心
进入 nacos-server\bin
目录,并使用以下命令启动 Nacos:
startup.cmd -m standalone
注意:此命令将在单机模式下启动 Nacos,用于开发和测试环境。