Linux启动nacos成功日志_微服务系列之Nacos配置中心

Nacos 介绍

17e372148c26d05fa5862cbe9ea60e3e.png

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

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

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

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

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

Nacos 官网:https://nacos.io/zh-cn/

Github:https://github.com/alibaba/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

发行包方式

您可以从 https://github.com/alibaba/nacos/releases 下载最新稳定版本的 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 运行文件。

访问

访问:http://localhost:8848/nacos/ ,默认用户名/密码是 nacos/nacos。

6bb71ace97fa9cd30ab670441864934a.png
85c78762396a761d766c6a02c12d04c7.png

关闭服务器

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源文件地址:https://github.com/alibaba/nacos/blob/master/distribution/conf/nacos-mysql.sql ,或者在 nacos-server 解压目录 conf 下,找到 nacos-mysql.sql 文件,运行该文件,结果如下:

23a73420196e2b14cacc3b113f8e78a5.png

application.properties 配置

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

9c2c3bac6be7c09e17ef93a3fa06b2d4.png

最终修改结果如下:

#*************** 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 类。

e551db331c914e6e55a7fdf9f69a8591.png

Nacos 配置入门

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

发布配置

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

52cf8cb8aa2921f26889c5b57b022961.png

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

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

8115d3ad3db4de46a949223d04503a7b.png
project:
name: SpringCloudAlibaba
org: Aliababa

获取配置

创建项目

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

36af29025228956eeb28a6c9b69b478f.png
193df713f313be59992755a92de8980f.png

添加依赖

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.0modelVersion>


<groupId>org.examplegroupId>

<artifactId>nacos-config-demoartifactId>

<version>1.0-SNAPSHOTversion>



<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.3.0.RELEASEversion>
parent>


<properties>

<spring-cloud.version>Hoxton.SR5spring-cloud.version>

<spring-cloud-alibaba.version>2.1.0.RELEASEspring-cloud-alibaba.version>
properties>


<dependencyManagement>
<dependencies>

<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-dependenciesartifactId>
<version>${spring-cloud.version}version>
<type>pomtype>
<scope>importscope>
dependency>


<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-alibaba-dependenciesartifactId>
<version>${spring-cloud-alibaba.version}version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>

project>

商品服务 product-service

创建项目

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

添加依赖

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


<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
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-demoartifactId>
<groupId>org.examplegroupId>
<version>1.0-SNAPSHOTversion>
parent>
<modelVersion>4.0.0modelVersion>

<artifactId>product-serviceartifactId>


<dependencies>

<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
dependency>

<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>

<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<scope>providedscope>
dependency>


<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
<exclusions>
<exclusion>
<groupId>org.junit.vintagegroupId>
<artifactId>junit-vintage-engineartifactId>
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 MapgetConfig() {
Map 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);
}

}
测试

访问:http://localhost:7070/config 结果如下:

18b2513a029a184f3b13618e807ec34e.png

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

project:
name: SpringCloudAlibaba-Nacos
org: Aliababa
c68a482d657145a7f7dbefc3360c4fa5.png

控制台打印信息如下:

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]

访问:http://localhost:7070/config 结果如下:

0965e927e1837fb1fa69a2e3806ece0d.png

Nacos 配置核心概念

eea4e9f186d7cef202245c26e2edc81c.png

配置

为什么需要配置?概念。

在系统开发过程中,开发者通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。目的是让静态的系统工件或者交付物(如 WAR,JAR 包等)更好地和实际的物理运行环境进行适配。配置管理一般包含在系统部署的过程中,由系统管理员或者运维人员完成。配置变更是调整系统运行时的行为的有效手段。

配置管理

对配置的多维度管理。

系统配置的编辑、存储、分发、变更管理、历史版本管理、变更审计等所有与配置相关的活动。

配置项

一个键值对 Key = Value。

一个具体的可配置的参数与其值域(一个键值对),通常以 param-key=param-value 的形式存在。例如我们常配置系统的日志输出级别(logLevel=INFO|WARN|ERROR) 就是一个配置项。

配置集

多个键值对,一般指一个配置文件。

一组相关或者不相关的配置项的集合称为配置集(多个键值对/一个配置文件)。在系统中,一个配置文件通常就是一个配置集,包含了系统各个方面的配置。例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。

配置集 ID

给这个配置文件起一个全局唯一的 ID。

Nacos 中的某个配置集的 ID。配置集 ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。

配置分组

多个配置文件放在一起,形成组,一般用于区分项目。例如,某学校多应用之间的区分,教师应用 TEACHER_GROUP,学生应用 STUDENT_GROUP。

Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和 MQ_topic 配置。

配置快照

缓存配置信息。

Nacos 的客户端 SDK 会在本地生成配置的快照。当客户端无法连接到 Nacos Server 时,可以使用配置快照显示系统的整体容灾能力。配置快照类似于 Git 中的本地 commit,也类似于缓存,会在适当的时机更新,但是并没有缓存过期(expiration)的概念。

命名空间

区分环境,比如:dev、test、prod 等等。

用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。

最佳实践

通常我们可以这样定义 Namespace,Group,DataId:

  • Namespace:代表不同的「环境」,如:开发、测试, 生产等;
  • Group:代表某个「项目」,如:XX物流项目,XX教育项目;
  • DataId:每个项目下往往有若干个「应用」,每个配置集(DataId)是一个应用的「主配置文件」
7b475f4f5f79a99844db9062dd117404.png

Namespace 命名空间

前面已经介绍过命名空间的概念,用于隔离多个环境,而每个应用在不同环境的同一个配置(如数据库数据源)的值是不一样的。因此,我们针对企业项目实际研发流程和环境进行规划。

如某软件公司拥有开发、测试、生产三套环境,那么我们应该建立三个 Namespace 进行区分。

创建命名空间

点击左侧菜单 命名空间,看到默认有一个 public(保留空间),点击右侧 新建命名空间进行创建。

c6b9698b3eaf740c06eac8f64547ec12.png

按下图的方式分别创建 dev(开发环境)test(测试环境)prod(生产环境) 三个命名空间。

f06e37716c1c8aff979708e20e30286b.png

最终结果如下:

c1f3314c5cae44757a4cf057b7e087b8.png

指定命名空间

如果 spring.cloud.nacos.config.namespace 中没有指定名称空间,则使用 Nacos 的 public(保留空间)。还可以按以下方式指定自定义名称空间:

spring.cloud.nacos.config.namespace=b3404bc0-d7dc-4855-b519-570ed34b62d7

此配置必须在 bootstrap.yml 文件中。 spring.cloud.nacos.config.namespace 的值是命名空间的 ID,可以从 Nacos 控制台中检索 ID 的值。 添加配置时,请勿选择其他名称空间。 否则,将无法正确检索配置。

发布配置

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

3c870a7afe103773e17e38f6123bc438.png

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

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

c9f292cf41f953c6b9d60b2e8208d478.png
project:
name: SpringCloudAlibaba-DEV
org: Aliababa

获取配置

配置文件

bootstrap.yml

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
namespace: 450a3f07-08ee-49f6-8213-9b04b06cd3cc # 对应 dev 环境

控制层

使用 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 MapgetConfig() {
Map configMap = new HashMap();
configMap.put("projectName", projectName);
configMap.put("projectOrg", projectOrg);return configMap;
}
}

测试

访问:http://localhost:7070/config 结果如下:

7654c8fc9f6c5816acdb738a99228e88.png

Group 组

Group 组信息可以在新建配置时进行指定,如下图:

06811ee8d8cb48bc17a3fe59d4fcb8ef.png

配置管理

这一小节我们通过大量配图演示控制台的相关操作。

新建/编辑/删除/查询

右侧 + 新建配置。单条编辑或删除选择操作栏中的编辑或删除。批量删除勾选以后选择左下角红色删除。

a47a5e03ecf0d307c4e5d4046d1bcf59.png

可以通过 Data IdGroup 查询配置,还可以将查询结果导出。

9f9d6bdcbf8036f34942d01016aaf303.png

导入/导出/克隆

前文提到命名空间用于隔离多个环境,每个应用在不同环境的同一个配置(如数据库数据源)的值是不一样的。也就是说可能大量的配置项都是相同的,个别差异的配置项需要额外修改,在这种情况下,如果一条条重新添加肯定非常不友好,我们可以通过导入导出功能实现。

比如,我们将 dev 环境下的配置先全选导出。

58d22d085981b81d4be4185e49b406e6.png

然后在 test 环境中导入,文件上传后将直接导入配置,请务必谨慎操作!

2b0d81f7ec1f64db761b963293d267d0.png

通过克隆也可以达到相同的效果,不同的是克隆可以额外修改 Data IdGroup 信息。

b750d323fb715814257a70f39c194666.png

历史/回滚

选择 配置管理历史版本 页面,通过 Data IdGroup 查询历史,可以查看每个历史版本的详情,或选择回滚至该版本。

2bea9677c4abb96c2596e1004d21ccfc.png

监听查询

Nacos 提供配置订阅者,也就是监听者查询能力,同时提供客户端当前配置的 MD5 校验值,以便帮助用户更好的检查配置变更以后是否推送到 Client 端。

选择 配置管理监听查询 页面,通过 配置或IPData IdGroup 查询。

f8e1f2b1deab70315bc97702e0cd2894.png

权限控制

Nacos 提供了基于 RBAC 的权限控制,通过左侧 权限控制 菜单的 用户列表角色管理权限管理实现,可以算是傻瓜式操作了,鼠标多点几下就会了。

ee4d4e62eac587079bee54ca6926957a.png

公共配置

每个配置集对应一个应用,但是开发时我们可能会有一些公共配置被多个应用使用,这时候就需要扩展配置集或共享配置集来实现了。

扩展配置集

我们先创建三个配置集,如下:

Data ID: ext-config-common01.yaml
Group: DEFAULT_GROUP
Configuration format: YAML
Configuration content: common.name: common-service

Data ID: ext-config-common02.yaml
Group: GLOBAL_GROUP
Configuration format: YAML
Configuration content: global.name: global-service

Data ID: ext-config-common03.yaml
Group: REFRESH_GROUP
Configuration format: YAML
Configuration content: refresh.name: refresh-service
9bff064471585da55463068c21b70d33.png

获取配置

配置文件

bootstrap.yml

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: MALL_GROUP # 组,默认为 DEFAULT_GROUP
file-extension: yaml # 配置内容的数据格式,默认为 properties
namespace: 450a3f07-08ee-49f6-8213-9b04b06cd3cc # 对应 dev 环境
# 扩展配置集
ext-config[0]:
data-id: ext-config-common01.yaml # 配置集 id
ext-config[1]:
data-id: ext-config-common02.yaml # 配置集 id
group: GLOBAL_GROUP # 组,默认为 DEFAULT_GROUP
ext-config[2]:
data-id: ext-config-common03.yaml # 配置集 id
group: REFRESH_GROUP # 组,默认为 DEFAULT_GROUP
refresh: true # 是否支持动态刷新

总结:

  • 通过配置 spring.cloud.nacos.config.ext-config[n].data-id 来支持多个配置集。
  • 通过配置 spring.cloud.nacos.config.ext-config[n].group 来定制配置组。如果未指定,则使用默认组。
  • 通过配置 spring.cloud.nacos.config. config[n].refresh 来控制该配置集是否支持配置的动态刷新。默认情况下不支持。
控制层

使用 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("${common.name:}")
private String commonName;

@Value("${global.name:}")
private String globalName;

@Value("${refresh.name:}")
private String refreshName;

@GetMapping("/extConfig")
public MapgetExtConfig() {
Map configMap = new HashMap();
configMap.put("commonName", commonName);
configMap.put("globalName", globalName);
configMap.put("refreshName", refreshName);return configMap;
}
}
测试

访问:http://localhost:7070/extConfig 结果如下:

ed8bc647d0b01f483f8e4c01200ace90.png

共享配置集

通过共享配置集的方式也可以实现公共配置的功能,唯一的区别就是共享配置集无法设置组信息,只获取 DEFAULT_GROUP。具体实现方式如下:

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: MALL_GROUP # 组,默认为 DEFAULT_GROUP
file-extension: yaml # 配置内容的数据格式,默认为 properties
namespace: 450a3f07-08ee-49f6-8213-9b04b06cd3cc # 对应 dev 环境
# 共享配置集
shared-dataids: ext-config-common01.yaml,ext-config-common02.yaml,ext-config-common03.yaml # 多个配置集逗号隔开
refreshable-dataids: ext-config-common01.yaml # 哪个配置集支持动态刷新

访问:http://localhost:7070/extConfig 结果如下:

5567365dfc14616ec1ec2fa5fd4b22ec.png

配置优先级

Spring Cloud Alibaba Nacos Config 提供了三种从 Nacos 拉取配置的功能:

  • A:通过内部相关规则(应用名、配置内容的数据格式等)自动生成相关的 Data Id 配置;
  • B:通过配置 spring.cloud.nacos.config.ext-config[n].data-id 来支持多个配置集。同时配置多个配置集时,优先级关系根据 n 的值决定,值越大,优先级越高;
  • C:通过配置 spring.cloud.nacos.config.shared-dataids 配置多个共享配置集;

当三种方式同时使用时,优先级关系为:A > B > C。

Nacos 集群环境搭建

集群模式跟我们平时进行扩容是一样的,可以通过 Nginx 转发到多个节点,如下图:

bbbc87f1b3e790281884f18d60ca183a.png

如果为了方便省事,可以使用直连 ip 模式,配置中按如下编写即可:

spring:
# 配置 Nacos 配置中心
cloud:
nacos:
config:
enabled: true # 如果不想使用 Nacos 进行配置管理,设置为 false 即可
server-addr: 192.168.10.101:8848,192.168.10.102:8848,192.168.10.103:8848 # Nacos 服务器地址

PS:如果只是为了学习的话直接在本地启动 3 个实例,通过修改端口的方式即可。本文使用三台服务器的方式带大家搭建环境,其实这种方式反而更简单。

环境准备

Nacos 单节点,也就是我们刚才使用的 standalone 模式,默认使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况,0.7 版本以后增加了支持 MySQL 数据源能力。集群搭建的时候我们需要将 Nacos 对接 Mysql 进行数据存储。如果要搭建高可用的集群环境,至少要满足以下条件:

  • JDK 1.8+;
  • Maven 3.2.x+;
  • MySQL 5.6.5+(生产使用建议至少主备模式,或者采用高可用数据库);
  • 3个或3个以上Nacos节点才能构成集群。

下载源码或者安装包

可以通过源码和发行包两种方式来获取 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

发行包方式

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

配置集群配置文件

将安装包解压。

tar -zxvf nacos-server-1.3.0.tar.gz -C /usr/local/ # 解压文件至 local 目录

在 Nacos 的解压目录 nacos/conf 目录下,复制配置文件 cluster.conf.example 并重命名为 cluster.conf,每行配置成 ip:port。(请配置3个或3个以上节点)

192.168.10.101:8848
192.168.10.102:8848
192.168.10.103:8848

配置 MySQL 数据库

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

MySQL数据源

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

初始化 MySQL 数据库

创建数据库 nacos_config

SQL源文件地址:https://github.com/alibaba/nacos/blob/master/distribution/conf/nacos-mysql.sql ,或者在 nacos-server 解压目录 conf 下,找到 nacos-mysql.sql 文件,运行该文件,结果如下:

23a73420196e2b14cacc3b113f8e78a5.png

application.properties 配置

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

9c2c3bac6be7c09e17ef93a3fa06b2d4.png

最终修改结果如下:

#*************** 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 类。

e551db331c914e6e55a7fdf9f69a8591.png

启动服务器

Linux/Unix/Mac

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

启动命令(在没有参数模式,是集群模式):

sh startup.sh

查看启动记录

可通过 /nacos/logs/nacos.log(详细日志)或 /nacos/conf/start.out(启动记录)的输出内容查看是否启动成功。

查看命令:

tail -f /usr/local/nacos/logs/start.out

启动成功输出结果:

2020-04-29 22:47:56,204 INFO Nacos is starting...

2020-04-29 22:47:56,556 INFO Nacos logs files: /usr/local/nacos/logs/

2020-04-29 22:47:56,556 INFO Nacos conf files: /usr/local/nacos/conf/

2020-04-29 22:47:56,556 INFO Nacos data files: /usr/local/nacos/data/

2020-04-29 22:47:56,556 INFO Nacos started successfully in cluster mode.

访问

访问以下链接,默认用户名/密码是 nacos/nacos :

  • http://192.168.10.101:8848/nacos/
  • http://192.168.10.102:8848/nacos/
  • http://192.168.10.103:8848/nacos/
010e3166e7f8db9963d616fe5aeb39fe.png

从下图可以看到集群节点共有三个,其中 192.168.10.101:8848leader

fafe9ffd81610a4121bfde0258a3b2fe.png

关闭服务器

Linux/Unix/Mac

sh shutdown.sh

测试

直连 ip 模式

发布配置

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

Data ID: product-service.yaml
Group: DEFAULT_GROUP
Configuration format: YAML
Configuration content: project.name: SpringCloudAlibaba
project.org: Aliababa
获取配置

bootstrap.yml

server:
port: 7070 # 端口

spring:
application:
name: product-service # 应用名称
cloud:
nacos:
config:
enabled: true # 如果不想使用 Nacos 进行配置管理,设置为 false 即可
server-addr: 192.168.10.101:8848,192.168.10.102:8848,192.168.10.103:8848 # Nacos 服务器地址,集群版直连 ip 模式
group: DEFAULT_GROUP # 组,默认为 DEFAULT_GROUP
file-extension: yaml # 配置内容的数据格式,默认为 properties

使用之前的控制层代码,访问:http://localhost:7070/config 结果如下:

18b2513a029a184f3b13618e807ec34e.png

Nginx 转发

再启动一台服务器 192.168.10.100,安装 Nginx,配置代理转发规则。

upstream nacos {
server 192.168.10.101:8848;
server 192.168.10.102:8848;
server 192.168.10.103:8848;
}
28a6f1e8de0d51b1fc914f28da99d8f1.png
获取配置

bootstrap.yml

server:
port: 7070 # 端口

spring:
application:
name: product-service # 应用名称
cloud:
nacos:
config:
enabled: true # 如果不想使用 Nacos 进行配置管理,设置为 false 即可
server-addr: 192.168.10.100:80 # Nacos 服务器地址,集群版 Nginx 转发
group: DEFAULT_GROUP # 组,默认为 DEFAULT_GROUP
file-extension: yaml # 配置内容的数据格式,默认为 properties

使用之前的控制层代码,访问:http://localhost:7070/config 结果如下:

18b2513a029a184f3b13618e807ec34e.png

至此 Nacos 配置中心所有的知识点就讲解结束了。

101b1317c7f10b41725eeb4e764f844e.gif

微信扫描二维码(长按识别)  关注我的公众号

7d1d65c4135a4791c81f445b802ca8a8.gif

933273079c8577dee7295875dbff21d5.png

bb9c9d34d8a67c00a4776374e3470741.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/350850.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu 常用快捷键、常用命令

ls 显示当前文件夹下文件 pwd 显示当前目录 history 显示以前命令 touch 创建文件 例子&#xff1a; touch 1.txt &#xff1b; touch1.py等等 mkdir 创建文件 例子&#xff1a;mkdir abc&#xff1b; mkdir abc/d; mkdir abc/123/a -p …

Apache Camel 2.19发布–新增功能

Apache Camel 2.19于2017年5月5日发布&#xff0c;大约在一段时间后&#xff0c;我做了一个小博客&#xff0c;介绍了该版本包含的值得注意的新功能和改进。 这是值得注意的新功能和改进的列表。 1. Spring Boot的改进 Camel 2.19版本已针对Spring Boot进行了许多改进。 例如…

Maven介绍,包括作用、核心概念、用法、常用命令、扩展及配置

两年半前写的关于Maven的介绍&#xff0c;现在看来都还是不错的&#xff0c;自己转下。写博客的一大好处就是方便自己以后查阅&#xff0c;自己总结的总是最靠谱的。 由浅入深&#xff0c;主要介绍maven的用途、核心概念(Pom、Repositories、Artifact、Build Lifecycle、Goal)、…

C#枚举(Enum)小结

枚举概念 枚举类型&#xff08;也称为枚举&#xff09;提供了一种有效的方式来定义可能分配给变量的一组已命名整数常量。该类型使用enum关键字声明。 示例代码1 enum Day { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; 默认情况下枚举中每个元素的基本…

用js实现导航栏shoufang效果_【读者投稿】用Github+docsify,我花了半天就搭好了个人博客...

前言“作为一个真正的码农&#xff0c;不能没有自己的个人博客”&#xff0c;这是我说的。惭愧的是&#xff0c;入行两年多了都没搞起来&#xff0c;这让我一度怀疑自己是个假程序员。昨天终于克服了心里的“犹豫”和“恐惧”&#xff0c;尝试搭建了一把&#xff0c;半天就搞好…

ubuntu 重定向

重定向 &#xff08;重新设定方向&#xff09; ls > xxx.txt 将ls显示的内容写入到xxx.txt ls -lah > xxx.txt ls >> xxx.txt 将ls显示的内容以追加方式写入到xxx.txt

IDEA快捷键及xml文件中网址报错

AltShiftTab 切换窗口(从后往前) divTab    补全为 <div></div> #boxTab   补全为 <div id"box"></div> .boxTab   补全为 <div class"box"></div> …

python随机生成数字列表_详解Python利用random生成一个列表内的随机数

首先,需要导入random模块: import random 随机取1-33之间的1个随机数&#xff0c;可能重复: random.choice(range(1,34)) print得到一系列随机数,执行一次得到一个随机数: print(random.choice(range(1,34))) 随机取1-33之间的6个随机数&#xff0c;可能重复: random.choices(r…

构建Java Web开发环境

1.1 JDK&#xff08;Java Development Kit&#xff09;的安装与配置1.1.1 下载最新的JDK&#xff08;我下载的是Java SE 6 Update 25&#xff09;下载地址&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/index.html1.1.2 JDK的安装1、双击名为“jdk-6u2…

ubuntu cd 改变路径

. 表示当前路径 cd &#xff0e;&#xff0e; 后退到上一层路径 cd ../.. 调到上上层路径,相对路径 cd /home/hjd/ 绝对路径 cd ~ 回到家目录 &#xff08;/home/hjd/&#xff09;

cloud foundry_Spring 3.1,Cloud Foundry和本地开发

cloud foundry这篇文章将帮助您在Cloud Foundry上使用MongoDB构建Spring 3.1 Web应用程序。 除了推动Cloud Foundry之外&#xff0c;您还可以使用MongoDB实例在本地环境中进行开发。 目标 此博客发布的目标是在本地构建应用程序&#xff0c;然后发布到本地Cloud Foundry实例。…

python中continue用法案例_Python continue语句实例用法

Python continue语句&#xff1a; 当执行到 continue 语句时&#xff0c;将不再执行本次循环中 continue 语句接下来的部分&#xff0c;而是继续下一次循环。 lst [7,8,9,4,5,6] for i in range(len(lst)): if lst[i] 9: continue #当运行到 continue 语句时&#xff0c;不执…

eclipse中查看某个方法(函数)被谁调用

用了好久一直不知道eclipse中如何实现vs中查找所有引用的功能&#xff0c;今天终于发现了哈哈 选中要查找的方法名&#xff0c;右键->References->Workspace 可以定位到具体的调用位置&#xff0c;快捷键CtrlShiftG&#xff0c;在Search中就会出现调用方法 或者是 右键-&…

ubuntu ln软连接硬连接

软连接:相当于windows的快捷方式 硬连接&#xff1a;又创建了一个名字指向同一个内存区&#xff0c;相当于又复制了一个同样的内容 ln -s 1.txt 2.txt 将文件1.txt建立2.txt软连接 相当于快捷方式 ln 1.txt 3.txt 将文件1.txt建立3.txt硬连接,

一个简单的Map Iterator性能测试

Java Map性能有很多方面可以衡量&#xff0c;但是关键的一个是简单的单线程扫描。 这是一些针对Iterators和Java 8 Map.forEach()简单测试代码&#xff0c;以及一些图形结果。 1.性能测试困难 性能测试是一项非常困难的工作&#xff0c;精确的可重复测试需要Java微基准测试线束…

小数点后保留2位小数的正则表达式

一、前提 整数和小数&#xff0c;保留两位小数的正则表达式&#xff1a; 具体什么意思呢  ^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$ 二、知识点 1、首先从写法上可以看出&#xff0c;使用了显式定义正则表达式的语法&#xff0c;因为其中存在对字符串"\"&…

python字符串是什么_python字符串表示什么

python的字符串就是表示一串字符&#xff0c;字符可以是中文&#xff0c;英文或者数字&#xff0c;或者混合的文本。 python字符串的几种表达方式 1 使用单引号扩起来字符串>>> my python lession #以单引号将字符串扩起来 my python lession >>> a my pyth…

PgSql备份pg_dump与还原手记pg_restore(转)

备份&#xff1a;pg_dump -h localhost -p 5432 -U tradesns -W -F c -b -v -f "/home/tradeworkwangbin/us2010.backup" us2010 恢复&#xff1a;pg_restore -h 192.168.0.100 -p 5432 -U postgres -W -d us2011 -v "/root/us2010.backup" 真没有想到&…

ubuntu ls命令

ls 显示当前文件夹下文件 ls -l 列表显示 ls -a 显示隐藏文件 ls -h 文件大小&#xff0c;自动找单位&#xff08;Kb、M、G&#xff09; 也可以 ls -l -a -h &#xff08;-l -a -h没有先后顺序&#xff0c;-a -h -l&#xff09; 也可以 ls -lah &…

vue 在 html 中自定义 tag

v-if,v-for,:key,:style,v-text,click,:src,:poster,:class,:href转载于:https://www.cnblogs.com/whm-blog/p/10718697.html