好了万事具备,接下来我们就开始搭建我们SpringCloud项目。本章节我们先来搭建我们SpringCloud项目框架,然后开发两个服务,把他们注册到Nacos注册中心中。上一章节我们已经介绍了Nacos是可以作为注册中心和配置中心的,这一章节我们重点研究Nacos作为注册中心的用法。
我们首先搭建一套SpringCloud的项目,其实所谓SpringCloud的项目就是一堆SpringBoot的项目,然后依赖了SpringCloud的相关组件而已。
为了这个项目与时俱进,并且是以学习为主,我们大部分的依赖都使用最新的版本。
环境信息:
- IDEA: 2021.3.3
- JDK: 17
- SpringBoot: 2.6.5
- SpringCloud: 2021.0.1.0
可能会有风险,因为不确定版本太高,依赖能不能兼容高版本我们先来搞一波再说。
首先我们先来搭建一套Multi-Maven项目结构。创建这么几个module:
spring-cloud-learning-parent: 用于管理依赖
spring-cloud-learning-common: 通用依赖管理
spring-cloud-learning-userservice: 用户模块微服务
spring-cloud-learning-orderservice: 订单模块微服务
接下来我们来进行项目的创建,具体的过程就不贴图了。给大家git地址:
一缕82年的清风 / spring-cloud-learning · GitCode
搭建好的项目结构如图所示:
依赖的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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lsqingfeng.springcloud</groupId>
<artifactId>spring-cloud-learning-parent</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<name>spring-cloud-learning-parent</name>
<description>项目父pom,用于被继承</description>
<properties>
<java.version>17</java.version>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<spring.boot.version>2.6.5</spring.boot.version>
<spring.cloud.alibaba.version> 2021.0.1.0</spring.cloud.alibaba.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<lombok.version>1.18.20</lombok.version>
<nacos.version>0.2.1</nacos.version>
<modelmapper.version>2.3.0</modelmapper.version>
<springfox-swagger2.version>2.9.2</springfox-swagger2.version>
<xiaoymin.swagger.version>1.9.6</xiaoymin.swagger.version>
</properties>
<repositories>
<!-- maven仓库采用阿里云-->
<repository>
<id>maven-ali</id>
<url>http://maven.aliyun.com/nexus/content/groups/public//</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</snapshots>
</repository>
</repositories>
<dependencyManagement>
<dependencies>
<!-- springBoot 版本依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<scope>import</scope>
<type>pom</type>
</dependency>
<!-- springCloud版本依赖-->
<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>
<dependency>
<groupId>com.lsqingfeng.springcloud</groupId>
<artifactId>spring-cloud-learning-common</artifactId>
<version>${project.parent.version}</version>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<!-- 实体拷贝工具 -->
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>${modelmapper.version}</version>
</dependency>
<!-- swagger -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${springfox-swagger2.version}</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>${xiaoymin.swagger.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
具体内容大家可以从git上下载查看。 就在master分支上。
我们先来改造orderservice
启动类上添加注解:@EnableDiscoveryClient
@SpringBootApplication
@EnableDiscoveryClient
public class OrderServiceApplication {
public static void main(String[] args) {
SpringApplication.run(OrderServiceApplication.class, args);
}
}
配置文件内容:
server:
port: 8081
spring:
application:
name: orderservice
profiles:
active: dev
cloud:
nacos:
server-addr: 127.0.0.1:8848
注意要把nacos的配置中心启动。
接下来改造userservice,步骤基本一样,注意端口号和应用名称要不一样。
同时启动两个服务。
同时启动了两个服务。一个端口号是8081,一个端口号是8082. 我们在nacos上观察效果。
在Nacos的服务列表中出现了两个服务。只不过实例都是1个。代表我们注册成功了。
接下来我们在不关闭服务的情况下,把orderservice的端口号改一下,再启动一个实例。相当于会有两个orderservice同时启动,我们来模拟多节点部署的情况。
一运行出现如下提示:
意思是不允许并行跑多个,这个是idea自带的设置我们可以更改一下。
老版本的idea: 勾选如下选项
新版本的idea:
选择允许多实例。
再次运行:(注意先把配置文件里的端口号改一下,否则起不来)
有两个orderService同时运行。
我们查看nacos效果:
实例数变为了2。点击详情可查看到如下:
这样在微服务以后我们调用orderservice的时候,都是使用服务名称来调,因为所有服务都注册到了同一个nacos上,就可以得到该服务的所有实例地址,调用的时候,可以自动进行负载均衡策略。这个等到后边给大家详细演示效果。
好了,今天的内容我们就到这里了。我们主要搭建了springCloud项目,并且体验了Nacos作为注册中心的实战效果,成功将我们的两个微服务注册到了Nacos上。大家好好练一练吧。