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

打印 上一主题 下一主题

主题 888|帖子 888|积分 2664


最近不停在折腾架构的事儿,之前开发的本领在逐步的恢复,今天给各人分享一下我在认识的过程一些技巧和遇到的一些坑
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 提供的一个可视化的控制台,通过浏览器访问控制台可以方便地对服务和配置举行管理。在控制台上,可以检察服务的注册信息、实例状态,举行配置的编辑、发布和管理等操作。比方,管理员可以在控制台上轻松地添加新的服务、修改配置文件,以及监控各个服务的运行状态。

安装Nacos

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

我这里是创建了一个简单的微服务项目

因为微服务项目会有一个总的工程项目,以是我创建了一个父级的pom文件用来限定各个子项目使用的组件版本
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5.     <modelVersion>4.0.0</modelVersion>
  6.     <groupId>com.leon.store</groupId>
  7.     <artifactId>store-examples</artifactId>
  8.     <packaging>pom</packaging>
  9.     <version>1.0-SNAPSHOT</version>
  10.     <parent>
  11.         <groupId>org.springframework.boot</groupId>
  12.         <artifactId>spring-boot-starter-parent</artifactId>
  13.         <version>2.4.2</version>
  14.     </parent>
  15.     <properties>
  16.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  17.         <maven.compiler.source>1.8</maven.compiler.source>
  18.         <maven.compiler.target>1.8</maven.compiler.target>
  19.         <java.version>1.8</java.version>
  20.     </properties>
  21.     <!--  依赖版本控制-->
  22.     <dependencyManagement>
  23.         <dependencies>
  24.             <dependency>
  25.                 <groupId>com.alibaba.cloud</groupId>
  26.                 <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  27.                 <version>2021.1</version>
  28.                 <type>pom</type>
  29.                 <scope>import</scope>
  30.             </dependency>
  31.             <dependency>
  32.                 <groupId>org.springframework.cloud</groupId>
  33.                 <artifactId>spring-cloud-dependencies</artifactId>
  34.                 <version>2020.0.1</version>
  35.                 <type>pom</type>
  36.                 <scope>import</scope>
  37.             </dependency>
  38.         </dependencies>
  39.     </dependencyManagement>
  40.     <modules>
  41.         <module>store-loginserver</module>
  42.         <module>store-core</module>
  43.     </modules>
  44. </project>
复制代码
上面的POM文件是主工程的POM配置信息,下面的是我的store-loginserver服务的配置信息:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4.   <modelVersion>4.0.0</modelVersion>
  5.   <parent>
  6.     <groupId>com.leon.store</groupId>
  7.     <artifactId>store-examples</artifactId>
  8.     <version>1.0-SNAPSHOT</version>
  9.   </parent>
  10. <!--  项目描述信息-->
  11.   <artifactId>store-loginserver</artifactId>
  12.   <version>1.0-SNAPSHOT</version>
  13.   <packaging>jar</packaging>
  14.   <name>store-loginserver</name>
  15. <!--  <name>SpringBootProject Maven Webapp</name>-->
  16. <!--  &lt;!&ndash; FIXME change it to the project's website &ndash;&gt;-->
  17. <!--  <url>http://www.example.com</url>-->
  18. <!--  项目中的一些属性变量,具有传递性-->
  19.   <dependencies>
  20.     <dependency>
  21.       <groupId>junit</groupId>
  22.       <artifactId>junit</artifactId>
  23.       <version>4.13.1</version>
  24.       <scope>test</scope>
  25.     </dependency>
  26.     <dependency>
  27.       <groupId>org.springframework.boot</groupId>
  28.       <artifactId>spring-boot-starter-web</artifactId>
  29.     </dependency>
  30.     <dependency>
  31.       <groupId>org.springframework.boot</groupId>
  32.       <artifactId>spring-boot-starter-jdbc</artifactId>
  33.     </dependency>
  34. <!--    hystrix服务降级服务熔断-->
  35.     <dependency>
  36.       <groupId>org.springframework.cloud</groupId>
  37.       <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
  38.       <version>2.0.1.RELEASE</version>
  39.       <exclusions>
  40.         <exclusion>
  41.           <groupId>com.google.guava</groupId>
  42.           <artifactId>guava</artifactId>
  43.         </exclusion>
  44.         <exclusion>
  45.           <groupId>com.google.code.findbugs</groupId>
  46.           <artifactId>jsr305</artifactId>
  47.         </exclusion>
  48.         <exclusion>
  49.           <groupId>com.netflix.archaius</groupId>
  50.           <artifactId>archaius-core</artifactId>
  51.         </exclusion>
  52.       </exclusions>
  53.     </dependency>
  54. <!--    微服务依赖-->
  55.     <dependency>
  56.       <groupId>org.springframework.cloud</groupId>
  57.       <artifactId>spring-cloud-starter-bootstrap</artifactId>
  58.       <version>3.0.1</version>
  59.     </dependency>
  60.     <dependency>
  61.       <groupId>org.springframework.boot</groupId>
  62.       <artifactId>spring-boot-configuration-processor</artifactId>
  63.       <optional>true</optional>
  64.     </dependency>
  65.     <!--redis引用-->
  66.     <dependency>
  67.       <groupId>org.springframework.boot</groupId>
  68.       <artifactId>spring-boot-starter-data-redis</artifactId>
  69.     </dependency>
  70.     <dependency>
  71.       <groupId>org.apache.commons</groupId>
  72.       <artifactId>commons-pool2</artifactId>
  73.     </dependency>
  74.     <dependency>
  75.         <groupId>org.projectlombok</groupId>
  76.         <artifactId>lombok</artifactId>
  77.     </dependency>
  78. <!--    FastJson 引用-->
  79.     <dependency>
  80.       <groupId>com.alibaba</groupId>
  81.       <artifactId>fastjson</artifactId>
  82.       <version>1.2.83</version>
  83.     </dependency>
  84. <!--    Mybatis-plus引用-->
  85.     <dependency>
  86.       <groupId>com.baomidou</groupId>
  87.       <artifactId>mybatis-plus-boot-starter</artifactId>
  88.       <version>3.5.9</version>
  89.     </dependency>
  90.     <!--    数据库驱动-->
  91.     <dependency>
  92.       <groupId>org.postgresql</groupId>
  93.       <artifactId>postgresql</artifactId>
  94.       <version>42.7.4</version>
  95.     </dependency>
  96. <!--   HikariCP 连接池-->
  97.     <dependency>
  98.       <groupId>com.zaxxer</groupId>
  99.       <artifactId>HikariCP</artifactId>
  100.       <version>3.4.5</version>
  101.       <scope>compile</scope>
  102.     </dependency>
  103. <!--    log4j2-->
  104.     <dependency>
  105.       <groupId>org.springframework.boot</groupId>
  106.       <artifactId>spring-boot-starter-log4j2</artifactId>
  107.     </dependency>
  108.     <!--nacos配置中心-->
  109.     <dependency>
  110.       <groupId>com.alibaba.cloud</groupId>
  111.       <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  112.     </dependency>
  113.     <!--nacos服务注册与发现中心-->
  114.     <dependency>
  115.       <groupId>com.alibaba.cloud</groupId>
  116.       <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  117.     </dependency>
  118.     <dependency>
  119.       <groupId>com.alibaba.nacos</groupId>
  120.       <artifactId>nacos-client</artifactId>
  121.     </dependency>
  122.     <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
  123.     <dependency>
  124.       <groupId>org.apache.commons</groupId>
  125.       <artifactId>commons-lang3</artifactId>
  126.       <version>3.11</version>
  127.     </dependency>
  128.     <dependency>
  129.       <groupId>com.alibaba.nacos</groupId>
  130.       <artifactId>nacos-spring-context</artifactId>
  131.       <version>1.1.2</version>
  132.     </dependency>
  133.   </dependencies>
  134.   <build>
  135.     <finalName>store-loginserver</finalName>
  136.       <plugins>
  137.         <plugin>
  138.           <groupId>org.springframework.boot</groupId>
  139.           <artifactId>spring-boot-maven-plugin</artifactId>
  140.           <configuration>
  141.             <executable>true</executable>
  142.             <mainClass>com.manage.project.ManageProject</mainClass>
  143.           </configuration>
  144.         </plugin>
  145.       </plugins>
  146.     <resources>
  147.       <resource>
  148.         <directory>src/main/java</directory>
  149.         <includes>
  150.           <include>**/*.xml</include>
  151.         </includes>
  152.       </resource>
  153.       <resource>
  154.         <directory>src/main/resources</directory>
  155.         <includes>
  156.           <include>**/*.yml</include>
  157.         </includes>
  158.       </resource>
  159.     </resources>
  160.   </build>
  161. </project>
复制代码
使用nacos作为注册中心时,肯定要留意不要忘记引用这两个pom,这是最为关键的,而且要留意版本,版本不合适的话会出现很多意想不到的问题
  1.     <!--nacos服务注册与发现中心-->
  2.     <dependency>
  3.       <groupId>com.alibaba.cloud</groupId>
  4.       <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  5.     </dependency>
  6.     <dependency>
  7.       <groupId>com.alibaba.nacos</groupId>
  8.       <artifactId>nacos-client</artifactId>
  9.     </dependency>
复制代码
各组件间版本关系我截图放在这里了,各人自行对比

接下来配置应用服务store-loginserver的配置信息,重要是配置nacos的注册信息
  1. server:
  2.   port: 8081
  3. spring:
  4.   application:
  5.     name: manageproject
  6.   cloud:
  7.     nacos:
  8.       discovery:
  9.         server-addr: 127.0.0.1:8848
  10.         namespace: 2fa09388-6a71-45df-870b-a910b159ce21
  11.     discovery:
  12.       enabled: true
复制代码
末了在主启动类加上@EnableDiscoveryClient 注解,在应用服务启动后,就能看到这个服务的注册环境啦
  1. package com.manage.project;
  2. import org.mybatis.spring.annotation.MapperScan;
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5. import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
  6. import org.springframework.cloud.netflix.hystrix.EnableHystrix;
  7. @SpringBootApplication
  8. @EnableDiscoveryClient
  9. @EnableHystrix
  10. @MapperScan("com.manage.project.mapper")
  11. public class ManageProject {
  12.     public static void main(String[] args){
  13.         try{
  14.             SpringApplication.run(ManageProject.class,args);
  15.         }catch(Exception e){
  16.             e.printStackTrace();
  17.         }
  18.     }
  19. }
复制代码
当服务启动后,可以看到我的服务已经正常在Nacos服务列表里发现了。这里有的同学可能要问为什么服务名不是store-loginserver而是manageproject,这是因为在项目工程目录的application.yml文件中spring:application:name对应的值为managerproject,Nacos client发起注册时取的是该配置信息。

使用Nacos做配置中心

我不知道各人在实际工作中是否会将全部配置都放到配置中心,我的风俗是尽可能的将配置都放在配置中心,如许更便于配置管理,也不会出现测试环境打包的时候误将测试环境配置打到生产上(以前框架中没有使用配置中心的时候,已经被这个问题坑了很多多少次

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

吴旭华

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表