吴旭华 发表于 2025-1-20 07:40:03

微服务架构spring cloud+nacos举行配置管理(傻瓜教程 适合小白 避坑指南

https://i-blog.csdnimg.cn/direct/b22624122df0436e8d95a07b8249a992.png
最近不停在折腾架构的事儿,之前开发的本领在逐步的恢复,今天给各人分享一下我在认识的过程一些技巧和遇到的一些坑
Nacos先容

Nacos各人想必都不会很陌生,他是alibaba开源的一个微服务中心件,支持服务注册和配置管理,相较于Eureka来说,nacos在性能和使用方面照旧比力合适国内开发者的,包括它的组件工具也比力全。
Nacos在做服务提供者(比方一个微服务实例)在启动时,会将自己的服务信息(如服务名称、IP 地址、端口号、服务的健康状态等)发送给 Nacos 服务器举行注册。比方,一个用户服务启动后,它会通过 Nacos 提供的客户端 SDK 大概相关的集成插件(如在 Spring Cloud Alibaba 中使用@EnableDiscoveryClient注解)将自身的信息注册到 Nacos 中,Nacos 会将这些信息存储在其服务注册表中。
Nacos 可以作为配置中心,集中存储应用程序的各种配置信息。这些配置可以是差别环境(如开发环境、测试环境、生产环境)下的配置文件,包括但不限于数据库连接信息、日志级别、服务的各种参数等。比方,将数据库连接的 URL、用户名和暗码等配置信息存储在 Nacos 中,配置文件可以是properties格式或yaml格式。
Nacos Server是 Nacos 的焦点折务器组件,负责处置处罚服务注册与发现、配置管理等焦点功能。它存储了服务注册表和配置信息,并且提供了相应的接口用于客户端的访问和操作。
Nacos Client是集成在应用程序中的客户端组件。它负责与 Nacos Server 举行通讯,将服务注册信息发送给服务器,从服务器获取服务发现信息和配置信息,并且接收服务器发送的配置更新通知等。比方,在 Java 应用中,通过引入 Nacos 的客户端依赖,使用相关的 API 来实现与 Nacos Server 的交互。
控制台(Dashboard)是Nacos 提供的一个可视化的控制台,通过浏览器访问控制台可以方便地对服务和配置举行管理。在控制台上,可以检察服务的注册信息、实例状态,举行配置的编辑、发布和管理等操作。比方,管理员可以在控制台上轻松地添加新的服务、修改配置文件,以及监控各个服务的运行状态。
https://i-blog.csdnimg.cn/direct/e6958f56f3564b05881b7cfe09aaf9db.png
安装Nacos

安装Nacos其实很简单,发起通过官网下载并安装,官网先容的步调非常过细,这里我就不过多先容。
官网地址: https://nacos.io/docs/next/quickstart/quick-start/
使用Nacos注册服务

我这里是创建了一个简单的微服务项目
https://i-blog.csdnimg.cn/direct/c2b916b8e359498389b55d6a5b31a0b7.png#pic_center
因为微服务项目会有一个总的工程项目,以是我创建了一个父级的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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.leon.store</groupId>
    <artifactId>store-examples</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>

    <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.4.2</version>
    </parent>

    <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <maven.compiler.source>1.8</maven.compiler.source>
      <maven.compiler.target>1.8</maven.compiler.target>
      <java.version>1.8</java.version>
    </properties>

    <!--依赖版本控制-->
    <dependencyManagement>
      <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2021.1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2020.0.1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
      </dependencies>
    </dependencyManagement>

    <modules>
      <module>store-loginserver</module>
      <module>store-core</module>
    </modules>
</project>
上面的POM文件是主工程的POM配置信息,下面的是我的store-loginserver服务的配置信息:
<?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>

<parent>
    <groupId>com.leon.store</groupId>
    <artifactId>store-examples</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>

<!--项目描述信息-->
<artifactId>store-loginserver</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>store-loginserver</name>

<!--<name>SpringBootProject Maven Webapp</name>-->
<!--&lt;!&ndash; FIXME change it to the project's website &ndash;&gt;-->
<!--<url>http://www.example.com</url>-->

<!--项目中的一些属性变量,具有传递性-->



<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13.1</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>

<!--    hystrix服务降级服务熔断-->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
      <version>2.0.1.RELEASE</version>
      <exclusions>
      <exclusion>
          <groupId>com.google.guava</groupId>
          <artifactId>guava</artifactId>
      </exclusion>
      <exclusion>
          <groupId>com.google.code.findbugs</groupId>
          <artifactId>jsr305</artifactId>
      </exclusion>
      <exclusion>
          <groupId>com.netflix.archaius</groupId>
          <artifactId>archaius-core</artifactId>
      </exclusion>
      </exclusions>
    </dependency>

<!--    微服务依赖-->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-bootstrap</artifactId>
      <version>3.0.1</version>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-configuration-processor</artifactId>
      <optional>true</optional>
    </dependency>

    <!--redis引用-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>

    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-pool2</artifactId>
    </dependency>

    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
    </dependency>

<!--    FastJson 引用-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.83</version>
    </dependency>

<!--    Mybatis-plus引用-->
    <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-boot-starter</artifactId>
      <version>3.5.9</version>
    </dependency>


    <!--    数据库驱动-->
    <dependency>
      <groupId>org.postgresql</groupId>
      <artifactId>postgresql</artifactId>
      <version>42.7.4</version>
    </dependency>

<!--   HikariCP 连接池-->
    <dependency>
      <groupId>com.zaxxer</groupId>
      <artifactId>HikariCP</artifactId>
      <version>3.4.5</version>
      <scope>compile</scope>
    </dependency>

<!--    log4j2-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>


    <!--nacos配置中心-->
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
    <!--nacos服务注册与发现中心-->
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>

    <dependency>
      <groupId>com.alibaba.nacos</groupId>
      <artifactId>nacos-client</artifactId>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.11</version>
    </dependency>

    <dependency>
      <groupId>com.alibaba.nacos</groupId>
      <artifactId>nacos-spring-context</artifactId>
      <version>1.1.2</version>
    </dependency>


</dependencies>

<build>
    <finalName>store-loginserver</finalName>
      <plugins>
      <plugin>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-maven-plugin</artifactId>
          <configuration>
            <executable>true</executable>
            <mainClass>com.manage.project.ManageProject</mainClass>
          </configuration>
      </plugin>
      </plugins>
    <resources>
      <resource>
      <directory>src/main/java</directory>
      <includes>
          <include>**/*.xml</include>
      </includes>
      </resource>
      <resource>
      <directory>src/main/resources</directory>
      <includes>
          <include>**/*.yml</include>
      </includes>
      </resource>
    </resources>
</build>
</project>

使用nacos作为注册中心时,肯定要留意不要忘记引用这两个pom,这是最为关键的,而且要留意版本,版本不合适的话会出现很多意想不到的问题
    <!--nacos服务注册与发现中心-->
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>

    <dependency>
      <groupId>com.alibaba.nacos</groupId>
      <artifactId>nacos-client</artifactId>
    </dependency>
各组件间版本关系我截图放在这里了,各人自行对比https://i-blog.csdnimg.cn/direct/6858c25fac8b4896ab3ad549bbc6bd8f.png#pic_center
接下来配置应用服务store-loginserver的配置信息,重要是配置nacos的注册信息
server:
port: 8081
spring:
application:
    name: manageproject
cloud:
    nacos:
      discovery:
      server-addr: 127.0.0.1:8848
      namespace: 2fa09388-6a71-45df-870b-a910b159ce21
    discovery:
      enabled: true
末了在主启动类加上@EnableDiscoveryClient 注解,在应用服务启动后,就能看到这个服务的注册环境啦
package com.manage.project;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;

@SpringBootApplication
@EnableDiscoveryClient
@EnableHystrix
@MapperScan("com.manage.project.mapper")
public class ManageProject {

    public static void main(String[] args){
      try{
            SpringApplication.run(ManageProject.class,args);
      }catch(Exception e){
            e.printStackTrace();
      }

    }
}
当服务启动后,可以看到我的服务已经正常在Nacos服务列表里发现了。这里有的同学可能要问为什么服务名不是store-loginserver而是manageproject,这是因为在项目工程目录的application.yml文件中spring:application:name对应的值为managerproject,Nacos client发起注册时取的是该配置信息。
https://i-blog.csdnimg.cn/direct/6364ca0b38494f92a081861b0d1fd65f.png
使用Nacos做配置中心

我不知道各人在实际工作中是否会将全部配置都放到配置中心,我的风俗是尽可能的将配置都放在配置中心,如许更便于配置管理,也不会出现测试环境打包的时候误将测试环境配置打到生产上(以前框架中没有使用配置中心的时候,已经被这个问题坑了很多多少次
页: [1]
查看完整版本: 微服务架构spring cloud+nacos举行配置管理(傻瓜教程 适合小白 避坑指南