SpringCloud Day11---SpringCloud Alibaba Nacos 服务注册和配置中心(二)

简介: SpringCloud Day11---SpringCloud Alibaba Nacos 服务注册和配置中心(二)

14.3.4 服务注册中心对比


  • Nacos全景图所示


image.png


  • Nacos和CAP

image.jpeg

9324814dce3c28e76e9874acaef1fb65.jpg


Nacos 支持AP和CP模式的切换


C是所有节点在同一时间看到的数据是一致的;而A的定义是所有的请求都会收到响应。


何时选择使用何种模式?

一般来说,如果不需要存储服务级别的信息且服务实例是通过nacos-client注册,并能够保持心跳上报,那么就可以选择AP模式。当前主流的服务如 Spring cloud 和 Dubbo 服务,都适用于AP模式,AP模式为了服务的可能性而减弱了一致性,因此AP模式下只支持注册临时实例。


如果需要在服务级别编辑或者存储配置信息,那么 CP 是必须,K8S服务和DNS服务则适用于CP模式。

CP模式下则支持注册持久化实例,此时则是以 Raft 协议为集群运行模式,该模式下注册实例之前必须先注册服务,如果服务不存在,则会返回错误。


curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'


14.4 Nacos作为服务配置中心演示


14.4.1 Nacos作为配置中心-基础配置


1.代码实现


  • 建Module—cloudalibaba-config-nacos-client3377
  • POM
<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>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
  • YML


bootstrap.yml

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

application.yml


spring:
 profiles:
   active: dev # 表示开发环境

why配置两个


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


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


  • 主启动
@EnableDiscoveryClient
@SpringBootApplication
public class NacosConfigClientMain3377
{
    public static void main(String[] args) {
            SpringApplication.run(NacosConfigClientMain3377.class, args);
    }
}
  • 业务类
@RestController
@RefreshScope //在控制器类加入@RefreshScope注解使当前类下的配置支持Nacos的动态刷新功能。
public class ConfigClientController
{
    @Value("${config.info}")
    private String configInfo;
    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }
}

14.4.2 在Nacos中添加配置信息


1.Nacos中的匹配规则理论


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


官网: https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html


843a5397c7b3efd92ce9a6280c7478b9.png


最后公式:


s p r i n g . a p p l i c a t i o n . n a m e − {spring.application.name}-


2.实操


配置新增 nacos-config-client-dev.yaml


917ef720ad7e0a4a795fec7db45ad16a.png


  • Nacos界面配置对应

2121d0fe60c99f14217b014727ac5b94.png

总结:


f59d186da34299c9a467604d5ca0c785.png


  • 历史配置

Nacos会记录配置文件的历史版本默认保留30天,此外还有一键回滚功能,回滚操作将会触发配置更新

回滚:

7cbe6cae09b4f9b376f560d72e3d2a1e.png


14.4.3 测试


启动前需要在nacos客户端-配置管理-配置管理栏目下有对应的yaml配置文件

运行cloud-config-nacos-client3377的主启动类

访问:http://localhost:3377/config/info , 调用接口查看配置信息,可以正常访问。

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


14.4.4 Nacos作为配置中心-分类配置


1.问题:多环境多项目管理


问题1:


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

dev开发环境

test测试环境

prod生产环境。

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


问题2:

一个大型分布式微服务系统会有很多微服务子项目,

每个微服务项目又都会有相应的开发环境、测试环境、预发环境、正式环境…

那怎么对这些微服务配置进行管理呢?


2.Nacos的图形化管理界面


配置管理3b1c29b49b88a85d72390de506f9ceeb.png


命名空间


8e8ebc6332b6b758c663d65227a0a5a5.png


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


  • 1 是什么
    类似Java里面的package名和类名
    最外层的namespace是可以用于区分部署环境的,Group和DataID逻辑上区分两个目标对象。
  • 2 三者情况

9856b5504f1ed356aac4cc4c5fa290af.png


  • 默认情况:


Namespace=public,Group=DEFAULT_GROUP, 默认Cluster是DEFAULT


Nacos默认的命名空间是public,Namespace主要用来实现隔离。

比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的。


Group默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去


Service就是微服务;一个Service可以包含多个Cluster(集群),Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分。

比方说为了容灾,将Service微服务分别部署在了杭州机房和广州机房,这时就可以给杭州机房的Service微服务起一个集群名称(HZ),给广州机房的Service微服务起一个集群名称(GZ),还可以尽量让同一个机房的微服务互相调用,以提升性能。


最后是Instance,就是微服务的实例。


3.三种方案加载配置


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


默认空间+默认分组+新建dev和test两个DataID


新建dev配置DataID


f96484b43fe5c93fcccd7bb182c4ed5d.jpg

  • 新建test配置DataID


f235590a477c38ca098e1aeda2aba164.png

  • 测试

访问:http://localhost:3377/config/info ,配置是什么就加载什么

Group方案:通过Group实现环境区分

  • 新建Group


ad6b1c8c1293f527310a33401d8dc7b1.png


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



306d5c9b3177311ad345b5e57c367d9c.png


  • bootstrap+application

在config下增加一条group的配置即可,可配置为DEV_GROUP或TEST_GROUP


78c5754f6d9515efb3af0820f58c79d3.png


Namespace方案

  • 新建dev/test的Namespace

8afd00a5de80a51cbab817a162ace13f.png


  • 回到服务管理-服务列表查看

23718cb2058bf3cc9b49fb198cfed619.png

  • 按照域名配置填写

53a409a0168f90246ec22e6ba49662ab.png

相关文章
|
2月前
|
存储 网络协议 Nacos
高效搭建Nacos:实现微服务的服务注册与配置中心
Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的一款动态服务发现、配置管理和服务管理平台。它旨在帮助开发者更轻松地构建、部署和管理分布式系统,特别是在微服务架构中。
352 81
高效搭建Nacos:实现微服务的服务注册与配置中心
|
20天前
|
人工智能 安全 Java
AI 时代:从 Spring Cloud Alibaba 到 Spring AI Alibaba
本次分享由阿里云智能集团云原生微服务技术负责人李艳林主讲,主题为“AI时代:从Spring Cloud Alibaba到Spring AI Alibaba”。内容涵盖应用架构演进、AI agent框架发展趋势及Spring AI Alibaba的重磅发布。分享介绍了AI原生架构与传统架构的融合,强调了API优先、事件驱动和AI运维的重要性。同时,详细解析了Spring AI Alibaba的三层抽象设计,包括模型支持、工作流智能体编排及生产可用性构建能力,确保安全合规、高效部署与可观测性。最后,结合实际案例展示了如何利用私域数据优化AI应用,提升业务价值。
|
2月前
|
SpringCloudAlibaba 负载均衡 Dubbo
【SpringCloud Alibaba系列】Dubbo高级特性篇
本章我们介绍Dubbo的常用高级特性,包括序列化、地址缓存、超时与重试机制、多版本、负载均衡。集群容错、服务降级等。
【SpringCloud Alibaba系列】Dubbo高级特性篇
|
2月前
|
存储 SpringCloudAlibaba Java
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论。
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
|
1月前
|
人工智能 自然语言处理 Java
Spring Cloud Alibaba AI 入门与实践
本文将介绍 Spring Cloud Alibaba AI 的基本概念、主要特性和功能,并演示如何完成一个在线聊天和在线画图的 AI 应用。
282 7
|
消息中间件 监控 搜索推荐
Spring全家桶--SpringCloud(中级)(三)
Spring全家桶--SpringCloud(中级)(三)
149 0
Spring全家桶--SpringCloud(中级)(三)
|
存储 消息中间件 监控
Spring全家桶--SpringCloud(中级)(二)
Spring全家桶--SpringCloud(中级)(二)
142 0
Spring全家桶--SpringCloud(中级)(二)
|
监控 负载均衡 Java
Spring全家桶--SpringCloud(中级)(一)
Spring全家桶--SpringCloud(中级)(一)
294 0
Spring全家桶--SpringCloud(中级)(一)
|
17天前
|
XML Java 应用服务中间件
Spring Boot 两种部署到服务器的方式
本文介绍了Spring Boot项目的两种部署方式:jar包和war包。Jar包方式使用内置Tomcat,只需配置JDK 1.8及以上环境,通过`nohup java -jar`命令后台运行,并开放服务器端口即可访问。War包则需将项目打包后放入外部Tomcat的webapps目录,修改启动类继承`SpringBootServletInitializer`并调整pom.xml中的打包类型为war,最后启动Tomcat访问应用。两者各有优劣,jar包更简单便捷,而war包适合传统部署场景。需要注意的是,war包部署时,内置Tomcat的端口配置不会生效。
133 17
Spring Boot 两种部署到服务器的方式
|
17天前
|
Dart 前端开发 JavaScript
springboot自动配置原理
Spring Boot 自动配置原理:通过 `@EnableAutoConfiguration` 开启自动配置,扫描 `META-INF/spring.factories` 下的配置类,省去手动编写配置文件。使用 `@ConditionalXXX` 注解判断配置类是否生效,导入对应的 starter 后自动配置生效。通过 `@EnableConfigurationProperties` 加载配置属性,默认值与配置文件中的值结合使用。总结来说,Spring Boot 通过这些机制简化了开发配置流程,提升了开发效率。
50 17
springboot自动配置原理