3.5 Spring Cloud 使用 Nacos 作为微服务统一配置中心| 学习笔记

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 快速学习 3.5 Spring Cloud 使用 Nacos 作为微服务统一配置中心。

开发者学堂课程【Spring Cloud 微服务架构设计与开发实战 3.5 Spring Cloud 使用 Nacos 作为微服务统一配置中心】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/60/detail/1098


3.5 Spring Cloud 使用 Nacos 作为微服务统一配置中心

 

内容介绍

一、 Nacos 作为 Spring Cloud 配置中心

二、 微服务集成 Nacos 配置中心

三、 Nacos 配置中心其他功能

 

本节课讲解阿里开源的 Nacos 另外一个功能:统一配置中心。统一配置就是对于focus 集群、大规模集群里非常重要的一个共同点。这里有讲解过阿里来源的Nacos 实际是集注册中心和配置中心为一体,也就是它是一个非常全能的一个工具。

接下来就是使用它做配置中心。来看一下如何去使用 Nacos 做 Spring Cloud 配置中心,如何去改造整个的微服务架构。

 

一、Nacos 作为 Spring Cloud 配置中心

1. Nacos 配置中心

(1)Spring Cloud Alibaba Nacos Config

2Nacos 提供用于存储配置和其他元数据的 key/value 存储,

(3)为分布式系统中的外部化配置提供服务器端和客户端支持。

(4)使用 Spring Cloud Alibaba Nacos Config,

(5)可以在 Nacos Server 集中管理 Spring Cloud 的外部属性配置

(6)Alibaba Nacos Config 是 Config Server 和 Client 的替代方案,

(7)客户端和服务器上的概念与 Spring Environment 和 PropertySource 有着一致的抽象

(8)bootstrap 启动阶段,配置被加载到 spring 环境中。

(9)当应用程序通过部署管道从开发到测试再到生产时,

(10可以管理不同环境 dev\test\pro 的配置

(11并确保应用程序具有迁移时需要运行的所有内容。

Nacos比较有意思的就是在做这个配置的时候有一个启动阶段,这里之前讲解的配置文件要稍微特殊一点这里面有一个 bootstrap 文件,bootstrap 文件实际是在加载普通配置文件之前,执行了一个优先启动文件系统的动作,它就会优先读取这个文件中的配置数据。可以看到 Nacos 本身作容易过后还提供了一个 config 客服端,可以直接去通过这个 config 客户端把 Nacos 中心里面已经设置好的配置推送给客服端。当然这个推送实际是理论上的推送,并不是真正的推送。还有推模式和拉模式,实际上它们在 http 协议上都是拉,定时拉,只不过内部要默认每隔一秒会去数据中心拉这个配置,在 Dubbo 或者其他方向中协议是不一样的,会改掉,所以实验的时候要注意。

2. Nacos 配置服务

(1)Nacos 也支持配置服务

2)统一微服务集群的配置信息

3)支持配置的动态更新

4)可支持 profile 粒度的配置

5)支持自定义 namespace 的配置

6支持自定义 Group 的配置

7)支持自定义扩展的 Data ld 配置

8配置的优先级

9)可以通过 Spring 的 ${spring.profiles.active} 配置多套环境

(10微服务项目需要 spring-cloud-starter-alibaba-nacos-config

(11支持两种配置文件格式:

(12bootstrap.properties

(13bootstrap.yml

另外就是前面已经提到过的 Group,Group 主要是分组去管理服务的。而对于namespace 主要是通过限定 namespace,和 java 中的 namespace 是一样的做资源管理,配置数据可以划到开发、测试、生产环境的命名空间下,最后在里面找对应的配置数据然后进行推送、下发。主要是为了便于实现配置的更新、推送和管理。然后这里面可以直接在 bootstrap 的 properties 和 yml 文件下配置,两种文件格式都支持。正常情况下是 profile 文件稍微高一点,因为代码是先判断 property 文件,后判断 yml 文件。

 

二、微服务集成 Nacos 配置中心

1. Nacos 配置中心实战

(1)启动 Nacos 服务

(2)Nacos 添加配置参数

(3)修改客户端,连接 Nacos 配置中心

(4)注意:版本 2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本。版本2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本,版1.5.x.RELEASE 对应的是Spring Boot 1.5.x 版本。

这里是注意版本,配置中心一般用的是2.2.x版本,Spring Cloud 或者 hopes 都可以,但是2.3.x版本或者2.4.x版本需要自己做实验,应该不会有特殊的差异。

2. 微服务集成 Nacos 配置中心:

(1)bootstrap.propertie 配置 Nacos Server 地址

(2)spring.application.name=nacos-config

(3)spring.cloud.nacos.config.server-addr=127.0.0.1:8848

这里是尝试改造配置服务实现一个并列推送,这里也写了一个例子作为参考

3. Nacos 支持动态刷新配置

通过配置spring.cloud.nacos.config.refresh.enabled=false。来关闭动态刷新

当然这里也有动态更新,启用动态更新本质上就是它会自动刷新配置。这边更改完以后它就会迅速读档,迅速读档是指通过现场读取、现场拉取的操作,因为它本质上的协议并不是双通性,是单向性的。接下来演示一遍。

4. 更新配置实战效果

image.png

5. Spring Cloud 配置参数变化

image.png

以上是配置更新的界面在配置完成后在客户端的实现。接下来是实战演练。

 

三、Nacos 配置中心其他功能

实战首先要有一个配置服务,配置服务可以使用普通的微服务项,代码如下:

<dependency>

<groupId>com.alibaba.cloud</groupId>

<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>

<version>2.2.1.RELEASE</version>

</dependency>

其次是加 bootstrap.yml 的文件,这里已经更改过了,打开之后代码如下

spring:

cloud:

nacos:

config:

server-addr: 127.0.0.1:8848  //以上这一块都一样

prefix: config-server  //如果不加这一条那么默认就是应用程序名称一致

//比如应用程序名称为 orderservers,那么下面就是 orderservers.yml

file-extension: yml  #后缀名

group: DEFAULT_GROUP

# 命名空间 ID

namespace: 5f20021d-a248-41c0-943f-1d54745dedd8

接下来看一下里面的配置,代码如下:

spring:

profiles:

active: dev  

application :

name : config-server//这个应用配置中心名字是 config-server,如果不配置的话就是 config-servers.yml

main:

allow-bean-definition-overriding: true

cloud:

nacos:

discovery :

server-addr: 127.0.0.1:8848

server:

port : 8787

本地展示也比较简单,定义了一个动态变量,代码如下:

package cn.alibaba;

*import org.springframework.beans.factory.annotation.Value

@slf4j

@RestController

@Refreshscope

public class Testcontroller {

@Value("${name: java})

private String name;

@Value("${password: 1234qwer}")

private String password;

@RequestMapping(/test)

public String get() {

log.info("invoked name = " + name +",password= " + password

return "Nacos配置测试:” +name +","+password;

}

}

不同集成就完成了环境的切换,这里讲解到了统一配置的优势,这里启动使它寻找注册中心。代码如下:

package cn.alibaba;

*import org.springframework.boot.SpringApplication;

@SpringBootApplication

@EnableDiscoveryClient

public class JavaSpringCloud2000NacosConfigDemoApplication {

public static void main(String[] args) {

SpringApplication.run( JavaSpringCloud2000NacosConfigDemoAppl:

}

}

正常情况下先加载 bootstrap 再加载 application。这里面 property 也可以,两个都行,可以看见启动之后没有出错。获取默认值可以 locallhost8787,数值 test,

host 配置测试88888,1234

这里实际上已经连接上了配置中心配置中心默认的值是 88888,1234这里之所以不是 root1234是因为配置中心默认有值的

打开 Nacos 配置管理里的配置列表可以查看配置,在这里的配置已经讲解过了。因为以上配置是属于 dev 的配置,那么点击 dev 即可查看。

点开编辑,可以观察到在配置内容中 name 是 88888

此时更改配置 name 为 root,密码为123,定义的时候一定要注意个是程序的名字加上开发环境的模式,比如如果是 test 测试环境那么这里就是 test。点击发布,确认更新的值,然后确认发布,就发布成功了

接下来再在浏览器重新刷新测试,读取客户端加载的配置,对比看有没有发生变化

host 配置测试root,123

可以看到发生了变化,这里主要是为了监控、测试,正常情况下是一个微服务程序,推动完成以后直接就发生变化,直接就连接另外一台服务器了,或者连接另外一台 masql。IP 地址也可以做成一个动态参数,所以用户密码和IP地址也可以切换,这样可以动态控制编入程序连哪个环境。包括一些重要的比如熔断限流,在并发之前是10000,太大了,现在更改成为5000,是可以更改的,这就是动态调整。在生产环境下动态的调整、动态的切换,这就是最理想的状态,不停机、不当机。这就是 Nacos 比较强大的地方。

作为管理工具比较有意思的点在于可以复制配置的微服务。直接克隆,选择克隆的目标空间,这里选择克隆在 test|dba0a331-78a7-4d61-8a94-283352b480b1,修改 ID 在 test 测试环境下,然后点击开始克隆,查看test目录下有没有。

可以看到有了。可以直接复制过来,现在这里有两个参数,但是正常情况下有几十上百个,手工 copy 会很麻烦,所以切换数据库,切换中心配置就可以了,非常方便。

image.png

对比之后可以发现 Nacos 比 Eureka 方便许多,这是阿里贡献给社区比较经典、重要的一个微服务框架。也希望 Macos 能越做越好,有感兴趣的可以加入进去这次的 Java 微服务在整个生态上是非常强大的,实际上在不同的阶段上有更多的选择,下节课讲解熔断限流,把 Sentinel 加入进来。Nacos 一定要使用,实战强,操练强,功能强大。

相关文章
|
2月前
|
消息中间件 Java 开发者
【颠覆想象】Spring Boot重构未来:解耦与隔离,打造坚不可摧的微服务帝国!
【8月更文挑战第29天】本文通过构建电子商务平台的具体案例,深入探讨了如何利用 Spring Boot 实现服务间的解耦与隔离。文章详细介绍了依赖注入、模块化设计及异步通信等关键技术,并提供了具体代码示例。通过依赖注入,对象间耦合得以降低;模块化设计使各功能域独立,降低系统复杂度;异步通信则利用消息队列提升系统吞吐量与响应速度。这些方法不仅优化了系统架构,还加快了开发进程。
45 0
|
9天前
|
Java 对象存储 开发者
解析Spring Cloud与Netflix OSS:微服务架构中的左右手如何协同作战
Spring Cloud与Netflix OSS不仅是现代微服务架构中不可或缺的一部分,它们还通过不断的技术创新和社区贡献推动了整个行业的发展。无论是对于初创企业还是大型组织来说,掌握并合理运用这两套工具,都能极大地提升软件系统的灵活性、可扩展性以及整体性能。随着云计算和容器化技术的进一步普及,Spring Cloud与Netflix OSS将继续引领微服务技术的发展潮流。
23 0
|
2月前
|
Java UED Sentinel
微服务守护神:Spring Cloud Sentinel,让你的系统在流量洪峰中稳如磐石!
【8月更文挑战第29天】Spring Cloud Sentinel结合了阿里巴巴Sentinel的流控、降级、熔断和热点规则等特性,为微服务架构下的应用提供了一套完整的流量控制解决方案。它能够有效应对突发流量,保护服务稳定性,避免雪崩效应,确保系统在高并发下健康运行。通过简单的配置和注解即可实现高效流量控制,适用于高并发场景、依赖服务不稳定及资源保护等多种情况,显著提升系统健壮性和用户体验。
59 1
|
2月前
|
Cloud Native Java Nacos
微服务时代的新宠儿!Spring Cloud Nacos实战指南,带你玩转服务发现与配置管理,拥抱云原生潮流!
【8月更文挑战第29天】Spring Cloud Nacos作为微服务架构中的新兴之星,凭借其轻量、高效的特点,迅速成为服务发现、配置管理和治理的首选方案。Nacos(命名和配置服务)由阿里巴巴开源,为云原生应用提供了动态服务发现及配置管理等功能,简化了服务间的调用与依赖管理。本文将指导你通过五个步骤在Spring Boot项目中集成Nacos,实现服务注册、发现及配置动态管理,从而轻松搭建出高效的微服务环境。
134 0
|
2月前
|
Dubbo Java 应用服务中间件
💥Spring Cloud Dubbo火爆来袭!微服务通信的终极利器,你知道它有多强大吗?🔥
【8月更文挑战第29天】随着信息技术的发展,微服务架构成为企业应用开发的主流模式,而高效的微服务通信至关重要。Spring Cloud Dubbo通过整合Dubbo与Spring Cloud的优势,提供高性能RPC通信及丰富的生态支持,包括服务注册与发现、负载均衡和容错机制等,简化了服务调用管理并支持多种通信协议,提升了系统的可伸缩性和稳定性,成为微服务通信领域的优选方案。开发者仅需关注业务逻辑,而无需过多关心底层通信细节,使得Spring Cloud Dubbo在未来微服务开发中将更加受到青睐。
69 0
|
7天前
|
负载均衡 Java 网络架构
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
21 5
|
9天前
|
Java API 对象存储
微服务魔法启动!Spring Cloud与Netflix OSS联手,零基础也能创造服务奇迹!
这段内容介绍了如何使用Spring Cloud和Netflix OSS构建微服务架构。首先,基于Spring Boot创建项目并添加Spring Cloud依赖项。接着配置Eureka服务器实现服务发现,然后创建REST控制器作为API入口。为提高服务稳定性,利用Hystrix实现断路器模式。最后,在启动类中启用Eureka客户端功能。此外,还可集成其他Netflix OSS组件以增强系统功能。通过这些步骤,开发者可以更高效地构建稳定且可扩展的微服务系统。
25 1
|
28天前
|
缓存 Java 应用服务中间件
随着微服务架构的兴起,Spring Boot凭借其快速开发和易部署的特点,成为构建RESTful API的首选框架
【9月更文挑战第6天】随着微服务架构的兴起,Spring Boot凭借其快速开发和易部署的特点,成为构建RESTful API的首选框架。Nginx作为高性能的HTTP反向代理服务器,常用于前端负载均衡,提升应用的可用性和响应速度。本文详细介绍如何通过合理配置实现Spring Boot与Nginx的高效协同工作,包括负载均衡策略、静态资源缓存、数据压缩传输及Spring Boot内部优化(如线程池配置、缓存策略等)。通过这些方法,开发者可以显著提升系统的整体性能,打造高性能、高可用的Web应用。
58 2
|
29天前
|
Cloud Native 安全 Java
Micronaut对决Spring Boot:谁是微服务领域的王者?揭秘两者优劣,选对框架至关重要!
【9月更文挑战第5天】近年来,微服务架构备受关注,Micronaut和Spring Boot成为热门选择。Micronaut由OCI开发,基于注解的依赖注入,内置多种特性,轻量级且启动迅速;Spring Boot则简化了Spring应用开发,拥有丰富的生态支持。选择框架需考虑项目需求、团队经验、性能要求及社区支持等因素。希望本文能帮助您选择合适的微服务框架,助力您的软件开发项目取得成功!
97 2
|
9天前
|
Java 对象存储 开发者
微服务世界的双雄争霸:Spring Cloud与Netflix OSS——谁将引领下一次企业级应用变革的风暴?
Spring Cloud与Netflix OSS是微服务架构的核心组件集,分别以其与Spring Boot的紧密集成及为大规模分布式系统设计的特性,在Java开发社区中广受青睐。前者通过Eureka提供服务发现机制,简化服务注册与定位;后者借助Hystrix增强系统弹性和可靠性,避免雪崩效应。此外,二者还包含负载均衡(Ribbon)、声明式HTTP客户端(Feign)及API网关(Zuul)等功能,共同构建强大微服务体系,助力开发者聚焦业务逻辑,提升系统灵活性与性能。
24 0
下一篇
无影云桌面