微服务架构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>-->
<!--<!– FIXME change it to the project's website –>-->
<!--<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]