SpringCloud系列(三)| 集成Nacos注册中心

好了万事具备,接下来我们就开始搭建我们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 复制代码
<?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分支上。

二、集成nacos注册中心

我们先来改造orderservice

启动类上添加注解:@EnableDiscoveryClient

java 复制代码
@SpringBootApplication
@EnableDiscoveryClient
public class OrderServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderServiceApplication.class, args);
    }
}

配置文件内容:

yml 复制代码
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上。大家好好练一练吧。

相关推荐
Victor3564 小时前
https://editor.csdn.net/md/?articleId=139321571&spm=1011.2415.3001.9698
后端
Victor3564 小时前
Hibernate(89)如何在压力测试中使用Hibernate?
后端
灰子学技术6 小时前
go response.Body.close()导致连接异常处理
开发语言·后端·golang
Gogo8167 小时前
BigInt 与 Number 的爱恨情仇,为何大佬都劝你“能用 Number 就别用 BigInt”?
后端
fuquxiaoguang7 小时前
深入浅出:使用MDC构建SpringBoot全链路请求追踪系统
java·spring boot·后端·调用链分析
毕设源码_廖学姐8 小时前
计算机毕业设计springboot招聘系统网站 基于SpringBoot的在线人才对接平台 SpringBoot驱动的智能求职与招聘服务网
spring boot·后端·课程设计
野犬寒鸦9 小时前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
indexsunny9 小时前
互联网大厂Java面试实战:Spring Boot微服务在电商场景中的应用与挑战
java·spring boot·redis·微服务·kafka·spring security·电商
逍遥德10 小时前
如何学编程之01.理论篇.如何通过阅读代码来提高自己的编程能力?
前端·后端·程序人生·重构·软件构建·代码规范
MX_935910 小时前
Spring的bean工厂后处理器和Bean后处理器
java·后端·spring