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

发布时间:2023年12月17日

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

二、集成nacos注册中心

我们先来改造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上。大家好好练一练吧。

文章来源:https://blog.csdn.net/lsqingfeng/article/details/134987111
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。