likes
comments
collection
share

Nacos配置中心

作者站长头像
站长
· 阅读数 3

Nacos 介绍

Nacos配置中心

  Nacos 是 Alibaba 公司推出的开源工具,用于实现分布式系统的服务发现与配置管理。英文全称 Dynamic Naming and Configuration Service,Na 为 Naming/NameServer 即注册中心,co 为 Configuration 即配置中心,Service 是指该注册/配置中心都是以服务为核心。服务(Service)是 Nacos 世界的一等公民。(文章转载自乐字节)

官网是这样说的:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

  Nacos 致力于发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,可以快速实现动态服务发现、服务配置、服务元数据及流量管理。

  Nacos 可以更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构的服务基础设施。

  使用 Nacos 简化服务发现、配置管理、服务治理及管理的解决方案,让微服务的发现、管理、共享、组合更加容易。

Nacos 安装

环境准备

  Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行 Nacos,还需要为此配置 Maven 环境,请确保是在以下版本环境中安装使用:

  • JDK 1.8+;
  • Maven 3.2.x+。

下载源码或者安装包

  可以通过源码和发行包两种方式来获取 Nacos。

源码方式

  从 Github 上下载源码方式。

git clone https://github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U  
ls -al distribution/target/

// change the $version to your actual path
cd distribution/target/nacos-server-$version/nacos/bin

发行包方式

  您可以从 github.com/alibaba/nac… 下载最新稳定版本的 nacos-server 包。

启动服务器

Linux/Unix/Mac

  在 Nacos 的解压目录 nacos/bin 目录下启动。

  启动命令(standalone 代表着单机模式运行,非集群模式):

sh startup.sh -m standalone

  如果您使用的是 ubuntu 系统,或者运行脚本报错提示符号找不到,可尝试如下运行:

bash startup.sh -m standalone

Windows

  启动命令:

cmd startup.cmd

  或者双击 startup.cmd 运行文件。

访问

Nacos配置中心 Nacos配置中心

关闭服务器

Linux/Unix/Mac

sh shutdown.sh

Windows

cmd shutdown.cmd

  或者双击 shutdown.cmd 运行文件。

配置 MySQL 数据库

  Nacos 在 0.7 版本之前,默认使用的是嵌入式数据库 Apache Derby 来存储数据(内嵌的数据库会随着 Nacos 一起启动,无需额外安装);0.7 版本及以后,增加了对 MySQL 数据源的支持。

MySQL数据源

  环境要求:MySQL 5.6.5+(生产使用建议至少主备模式,或者采用高可用数据库);

初始化 MySQL 数据库

  创建数据库 nacos_config

  SQL源文件地址:私信我获取,或者在 nacos-server 解压目录 conf 下,找到 nacos-mysql.sql 文件,运行该文件,结果如下:

Nacos配置中心

application.properties 配置

  修改 nacos/conf/application.properties 文件的以下内容。

Nacos配置中心

  最终修改结果如下:

#*************** Config Module Related Configurations ***************#
### If user MySQL as datasource:
# 指定数据源为 MySQL
spring.datasource.platform=mysql

### Count of DB:
# 数据库实例数量
db.num=1

# 数据库连接信息,如果是 MySQL 8.0+ 版本需要添加 serverTimezone=Asia/Shanghai
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=Asia/Shanghai
db.user=root
db.password=1234

如果你和我一样使用的是 MySQL 8.0+ 版本,那么启动 Nacos 时肯定会报错。莫慌,在 Nacos 安装目录下新建 plugins/mysql 文件夹,并放入 8.0+ 版本的 mysql-connector-java-8.0.xx.jar,重启 Nacos 即可,启动时会提示更换了 MySQL 的 driver-class 类。

Nacos配置中心

Nacos 配置入门

  nacos-config-demo 聚合工程。SpringBoot 2.3.0.RELEASESpring Cloud Hoxton.SR5

发布配置

  选择 配置管理配置列表 页面,点击最右侧 + 按钮新建配置。

Nacos配置中心

  Nacos Config 使用 Data IDGroup 来确定配置。

  下图显示 Data Idproduct-service.yaml,组使用默认组,并添加 yaml 格式的配置信息。

Nacos配置中心

project:
  name: SpringCloudAlibaba
  org: Aliababa

获取配置

创建项目

  我们创建聚合项目来讲解 Nacos,首先创建一个 pom 父工程。

Nacos配置中心 Nacos配置中心

添加依赖

  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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!-- 项目坐标地址 -->
    <groupId>org.example</groupId>
    <!-- 项目模块名称 -->
    <artifactId>nacos-config-demo</artifactId>
    <!-- 项目版本名称 快照版本SNAPSHOT、正式版本RELEASE -->
    <version>1.0-SNAPSHOT</version>

    <!-- 继承 spring-boot-starter-parent 依赖 -->
    <!-- 使用继承方式,实现复用,符合继承的都可以被使用 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.0.RELEASE</version>
    </parent>

    <!--
        集中定义依赖组件版本号,但不引入,
        在子工程中用到声明的依赖时,可以不加依赖的版本号,
        这样可以统一管理工程中用到的依赖版本
     -->
    <properties>
        <!-- Spring Cloud Hoxton.SR5 依赖 -->
        <spring-cloud.version>Hoxton.SR5</spring-cloud.version>
        <!-- spring cloud alibaba 依赖 -->
        <spring-cloud-alibaba.version>2.1.0.RELEASE</spring-cloud-alibaba.version>
    </properties>

    <!-- 项目依赖管理 父项目只是声明依赖,子项目需要写明需要的依赖(可以省略版本信息) -->
    <dependencyManagement>
        <dependencies>
            <!-- spring cloud 依赖 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- spring cloud alibaba 依赖 -->
            <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>
        </dependencies>
    </dependencyManagement>

</project>

商品服务 product-service

创建项目

  在刚才的父工程下创建一个 product-service 项目。

添加依赖

  主要添加 spring-cloud-starter-alibaba-nacos-config 依赖。

<!-- spring cloud alibaba nacos config 依赖 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

  完整依赖如下:

<?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">

    <!-- 继承父依赖 -->
    <parent>
        <artifactId>nacos-config-demo</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>product-service</artifactId>

    <!-- 项目依赖 -->
    <dependencies>
        <!-- spring cloud alibaba nacos config 依赖 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!-- spring boot web 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- lombok 依赖 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>

        <!-- spring boot test 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

</project>
配置文件

  在 bootstrap.yml 中配置 Nacos Server 的地址和应用名。

server:
  port: 7070 # 端口

spring:
  application:
    name: product-service # 应用名称
  cloud:
    nacos:
      config:
        enabled: true # 如果不想使用 Nacos 进行配置管理,设置为 false 即可
        server-addr: 127.0.0.1:8848 # Nacos Server 地址
        group: DEFAULT_GROUP # 组,默认为 DEFAULT_GROUP
        file-extension: yaml # 配置内容的数据格式,默认为 properties

说明:之所以需要配置 spring.application.name,是因为它是构成 Nacos 配置管理 dataId字段的一部分。

  在 Nacos Spring Cloud 中,dataId 的完整格式如下:

${prefix}-${spring.profile.active}.${file-extension}
  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profile.active 即为当前环境对应的 profile。注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式将变成 ${prefix}.${file-extension}
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 propertiesyaml 类型,默认为 properties
控制层

  使用 Spring 的 @Value 注解来获取配置信息,${} 中对应 Nacos 配置中心配置内容的 key,:后跟默认值。

  并且通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新。

package org.example.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

@RefreshScope
@RestController
public class ConfigController {

    @Value("${project.name:}")
    private String projectName;

    @Value("${project.org:}")
    private String projectOrg;

    @GetMapping("/config")
    public Map<String, Object> getConfig() {
        Map<String, Object> configMap = new HashMap();
        configMap.put("projectName", projectName);
        configMap.put("projectOrg", projectOrg);
        return configMap;
    }

}
启动类
package org.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ProductServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(ProductServiceApplication.class, args);
    }

}
测试

Nacos配置中心

  修改配置为以下内容,重新发布:

project:
  name: SpringCloudAlibaba-Nacos
  org: Aliababa

Nacos配置中心

  控制台打印信息如下:

c.a.c.n.c.NacosPropertySourceBuilder     : Loading nacos data, dataId: 'product-service.yaml', group: 'DEFAULT_GROUP'
b.c.PropertySourceBootstrapConfiguration : Located property source: [BootstrapPropertySource {name='bootstrapProperties-product-service.yaml'}]
o.s.boot.SpringApplication               : No active profile set, falling back to default profiles: default
o.s.boot.SpringApplication               : Started application in 3.356 seconds (JVM running for 50.676)
o.s.c.e.event.RefreshEventListener       : Refresh keys changed: [project.name]

该文章还有一半未发表出来!点击关注查看后续哟 文章转载自乐字节