Nacos之服务配置中心

news/2024/11/30 9:42:44/

1.基础配置

1.1.新建模块cloudalibaba-config-nacos-client3377

1.1.1.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"><parent><artifactId>springcloud-alibaba</artifactId><groupId>com.tianxia</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>cloudalibaba-config-nacos-client3377</artifactId><dependencies><!--nacos-config--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!--nacos-discovery--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--web + actuator--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!--日常通用组件--><dependency><groupId>com.tianxia</groupId><artifactId>api-commons</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies>
</project>

1.1.2.YML

Nacosspringcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。

springboot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application

bootstrap

server:port: 3377spring:application:name: nacos-config-clientcloud:nacos:discovery:server-addr: localhost:8848 #Nacos服务注册中心地址config:server-addr: localhost:8848 #Nacos作为配置中心地址file-extension: yaml #指定yaml格式的配置# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
# nacos-config-client-dev.yaml

application

spring:profiles:active: dev

1.1.3.主启动

package com.tianxia.alibaba;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;/*** 配置中心启动类* @author liqb* @date: 2023-05-20 21:21*/
@EnableDiscoveryClient
@SpringBootApplication
public class NacosConfigClientMain3377 {public static void main(String[] args) {SpringApplication.run(NacosConfigClientMain3377.class, args);}
}

1.1.4.业务类

package com.tianxia.alibaba.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;/*** 配置中心控制器* @author liqb* @date 2023-05-20 21:22*/
@RestController
@RefreshScope //支持Nacos的动态刷新功能。
public class ConfigClientController {@Value("${config.info}")private String configInfo;@GetMapping("/config/info")public String getConfigInfo() {return configInfo;}
}

1.2.在Nacos中添加配置信息

Nacos中的dataid的组成格式及与SpringBoot配置文件中的匹配规则

官方文档

说明:之所以需要配置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 Boot文档。注意:当spring.profile.active为空时,对应的连接符 - 也将不存在,datald 的拼接格式变成${prefix}.${file-extension}
  • file-exetension为配置内容的数据格式,可以通过配置项spring .cloud.nacos.config.file-extension来配置。目前只支持propertiesyaml类型
  • 通过Spring Cloud 原生注解**@RefreshScope**实现配置自动更新。

最后公式:

${spring.application.name)}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

1.3.配置新增

在这里插入图片描述

在这里插入图片描述

1.4.配置小结

在这里插入图片描述

1.5.测试

  • 启动前需要在nacos客户端-配置管理-配置管理栏目下有对应的yaml配置文件
  • 运行cloud-config-nacos-client3377的主启动类
  • 调用接口查看配置信息 - http://localhost:3377/config/info

在这里插入图片描述

1.6.自带动态刷新

修改下Nacos中的yaml配置文件,再次调用查看配置的接口,就会发现配置已经刷新。

在这里插入图片描述

在这里插入图片描述

2.分类配置

2.1.Nacos之命名空间分组和DataID三者关系

问题 - 多环境多项目管理

问题1:

实际开发中,通常一个系统会准备

  1. dev开发环境
  2. test测试环境
  3. prod生产环境

如何保证指定环境启动时服务能正确读取到Nacos上相应环境的配置文件呢?

问题2:

一个大型分布式微服务系统会有很多微服务子项目,每个微服务项目又都会有相应的开发环境、测试环境、预发环境、正式环境…那怎么对这些微服务配置进行管理呢?

在这里插入图片描述

在这里插入图片描述

2.1.1.Namespace+Group+Data lD三者关系?为什么这么设计?

1.是什么

类似Java里面的package名和类名最外层的namespace是可以用于区分部署环境的,Group和DatalD逻辑上区分两个目标对象。

2.三者情况
在这里插入图片描述

默认情况:Namespace=public,Group=DEFAULT_GROUP,默认Cluster是DEFAULT

  • Nacos默认的NamespacepublicNamespace主要用来实现隔离。
    • 比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的。
  • Group默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去
  • Service就是微服务:一个Service可以包含多个Cluster (集群),Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分。
    • 比方说为了容灾,将Service微服务分别部署在了杭州机房和广州机房,这时就可以给杭州机房的Service微服务起一个集群名称(HZ) ,给广州机房的Service微服务起一个集群名称(GZ),还可以尽量让同一个机房的微服务互相调用,以提升性能。
  • 最后是Instance,就是微服务的实例。

2.2.Nacos之DataID配置

指定spring.profile.active和配置文件的DatalD来使不同环境下读取不同的配置

默认空间+默认分组+新建devtest两个DatalD

  • 新建dev配置DatalD

在这里插入图片描述

  • 通过spring.profile.active属性就能进行多环境下配置文件的读取

在这里插入图片描述

测试

  • http://localhost:3377/config/info
  • 配置是什么就加载什么 test/dev

2.3.Nacos之Group分组方案

通过Group实现环境区分 - 新建Group

在这里插入图片描述

在nacos图形界面控制台上面新建配置文件DatalD

在这里插入图片描述

bootstrap+application

config下增加一条group的配置即可。可配置为DEV_GROUPTEST_GROUP

在这里插入图片描述

测试结果:

在这里插入图片描述

2.4.Nacos之Namespace空间方案

2.4.1.新建dev/test的Namespace

在这里插入图片描述

2.4.2.回到服务管理-服务列表查看

在这里插入图片描述

2.4.3.按照环境配置填写

在这里插入图片描述

2.4.4.YML

在这里插入图片描述

2.4.5.测试结果输出如下:

在这里插入图片描述


http://www.ppmy.cn/news/71966.html

相关文章

如何利用Jmeter从0到1做一次完整的压测

压测&#xff0c;在很多项目中都有应用&#xff0c;是测试小伙伴必备的一项基本技能&#xff0c;刚好最近接手了一个小游戏的压测任务&#xff0c;一轮压测下来&#xff0c;颇有收获&#xff0c;赶紧记录下来&#xff0c;与大家分享一下&#xff0c;希望大家能少踩坑。 一、压测…

基于SSM的书画拍卖网站

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

Java并发基础理论

Java并发基础理论 进程与线程 进程 ​ 进程是程序的一次执行过程&#xff0c;是系统运行程序的基本单位&#xff0c;因为进程是动态的。系统运行一个程序就是一个进程从创建运行到消亡的过程。 ​ 我们启动main方法其实就是启动了一个JVM进程&#xff0c;而main方法所在的线…

工作线程快速优雅退出方式探讨

本文我们不用定时器。定时器会阻塞消息循环。先看需求&#xff1a; 我们先看第一种&#xff0c;有一个任务&#xff0c;要求每1秒钟执行一次&#xff0c;最常见的写法如下两种 bool bExitThread false; DWORD WorkThread1(LPVOID param) {while (false bExitThread){//// to…

Ansible 自动化运维工具(二)——Ansible 的脚本(playbook 剧本)

Ansible 自动化运维工具—Ansible 的脚本playbook 剧本 playbooks 概述以及实例操作playbooks 的组成操作示例一&#xff1a;编写yaml文件也就是playbook修改配置文件并放入/opt/目录下运行playbook 操作实例二&#xff1a;定义、引用变量操作示例三&#xff1a;指定远程主机su…

SpringBoot——IOC与AOP

文章目录 IOC AOP一、 分层解耦1.1 IOC - 控制反转 详细1.2 DI - 依赖注入 详解 二、AOP2.1 了解2.2 快速入门 - AOP 开发步骤2.2.1 Maven依赖2.2.2 代码实现2.2.3 AOP 应用场景及优势 2.3 核心概念2.3.1 连接点 - JoinPoint2.3.2 AOP执行流程 2.4 通知2.4.1 通知类型2.4.2 通知…

软件设计师考试笔记,已通过

目录 系统可靠度 外部实体 内聚类型 编译过程 逆波兰式 前驱图 scrum框架模型 编译和解释 有限自动机 聚簇索引和非聚簇索引 二叉树的前序,中序,后序遍历 动态规划贪心算法 算法 01背包问题 系统可靠度 1. 串联部件可靠度 串联部件想要这条路走通&#xff0c;只有…

八. WMS原理分析

文章目录 WMS帧缓冲区分析屏幕卡顿的原因VSyncGPU作用举例SurfaceFlinger面试题 WMS帧缓冲区 屏幕刷新率(HZ):代表屏幕在1秒内刷新的次数,Android手机一般是60Hz(也即是1s刷新60帧,大约16.67ms刷新1帧) 系统帧速率(FPS):代表系统在1秒内合成的帧数,这个值的大小由系统算法和硬…