【Spring Cloud】8.Spring Cloud Alibaba Nacos——服务注册和配置中心

news/2025/1/6 21:14:21/文章来源:https://www.cnblogs.com/luyj00436/p/18650038

之前,我已经学习过Nacos的下载和启动。

Nacos 介绍

官网说明:https://nacos.io/docs/latest/quickstart/quick-start/

github地址:https://github.com/alibaba/nacos

Nacos: Dynamic Naming And Configuration Service , 动态命名和配置服务 。一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos = 注册中心 + 配置中心,功能上等于前面学到的Consul。

各种注册中心比较

据说 Nacos 在阿里巴巴内部有超过 10 万的实例运行,已经过了类似双十一等各种大型流量的考验,Nacos默认是AP模式,

但也可以调整切换为CP,我们一般用默认AP即可。

服务注册与发现框架 CAP模型 控制台管理 社区活跃度
Eureka AP 支持 低(2.X版本闭源)
Zookeeper CP 不支持
Consul CP 支持
Nacos AP 支持

Nacos下载与安装

下载地址:https://nacos.io/download/nacos-server/#稳定版本

Nacos的下载安装和启动之前用到,这里就不详细说明了。

要启动时,我们只需要使用费集群模式启动即可,启动命令:startup.cmd -m standalone。默认账号密码都是nacos,默认访问地址:http://localhost:8848/nacos

关闭服务器,则运行:shutdown.cmd。

Nacos Discovery服务注册中心

服务提供者

接下来,我们需要新建一个支付子模块,作为基于Nacos的服务提供者。

  • 新建Module
  • 改POM
  • 写YAM
  • 主启动
  • 业务类

新建Module,子模块名称:cloudalibaba-provider-payment9001

改POM,POM除了通用的依赖引用外,还需引用Nacos Discovery

 <!--nacos-discovery-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

写YAM,spring.cloud.nacos.discovery.server-addr,配置Nacos地址。

server:port: 9001
spring:application:name: nacos-payment-providercloud:nacos:discovery:server-addr: localhost:8848 # 配置Nacos地址

主启动,主启动类平平无奇,与我们前面见到过的无数SpringBoot主启动类一样

@SpringBootApplication
@EnableDiscoveryClient
public class Main9001 {public static void main(String[] args) {SpringApplication.run(Main9001.class, args);}
}

业务类。新建一个接口,用于测试。

/*** 接口* @Author:lyj* @Date:2025/1/2 09:44*/
@RestController
public class PayAlibabaController {@Value("${server.port}")private  String serverPort;@GetMapping("/pay/nacos/{id}")public ResultData<String> getPayInfo(@PathVariable("id") Integer id){return ResultData.success("nacos registry,serverPort:"+serverPort + "\t id:" + id);}
}

测试:启动nacos服务和9001, 发现nacos-payment-provider,以添加到nacos服务中心。此时,服务列表已经成功添加至nacos。
image

服务消费者

作为Consumer的应用,并不是想提供者应用那么简单——只需要将微服务注册到Nacos。因为Consumer需要去调用Provider端提供的REST服务。接下来的例子,会使用最原始的方式,即显示的使用LoadBalanceClient和RestTemplate结合的方式来访问。

接下来,我们需要新建一个订单子模块,作为基于Nacos的服务消费者,步骤如下:

  • 新建Module
  • 改POM
  • 写YAM
  • 主启动
  • 业务类

建Module,子模块名称cloudalibaba-consumer-nacos-order83。

改POM,除了常规依赖外,需要引入nacos-discovery和负载均衡loadbalancer 。

<!-- nacos-discovery-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- loadbalancer-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

写YAML,提供Nacos服务地址和需要访问的微服务名称。

server:port: 83
spring:application:name: nacos-order-consumercloud:nacos:discovery:server-addr: localhost:8848   # nacos地址
#消费者将要去访问的微服务名称(nacos微服务提供者叫什么你写什么)
server-url:nacos-user-service: http://nacos-payment-provider

主启动

@EnableDiscoveryClient
@SpringBootApplication
public class Main83
{public static void main(String[] args){SpringApplication.run(Main83.class,args);}
}

业务类,配置RestTemplate

@Configuration
public class RestTemplateConfig
{@Bean@LoadBalanced //赋予RestTemplate负载均衡的能力public RestTemplate restTemplate(){return new RestTemplate();}
}

新增测试方法:

@RestController
public class OrderNacosController
{@Resourceprivate RestTemplate restTemplate;@Value("${service-url.nacos-user-service}")private String serverURL;@GetMapping("/consumer/pay/nacos/{id}")public String paymentInfo(@PathVariable("id") Integer id){String result = restTemplate.getForObject(serverURL + "/pay/nacos/" + id, String.class);return result+"\t"+"    我是OrderNacosController83调用者。。。。。。";}
}

可以测试nacos请求,也可以同时生成多个提供者(9001/9002/9003),测试负载均衡。

Nacos服务配置中心

nacos可以替代consul8500,作为服务配置中心。

中文说明文档位置:https://nacos.io/docs/v2/ecology/use-nacos-with-spring-cloud/?spm=5238cd80.2ef5001f.0.0.3f613b7cqocuR8

具体步骤如下:

  • 建Module,Module名称cloudalibaba-config-nacos-client3377
  • POM,引入nacos依赖
  • 写YAML
  • 主启动
  • 业务类
  • 在nacos中添加配置信息(重点)

POM引入nacos-config和 nacos-discovery依赖

<!--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>

写YAML,bootstrap.yaml添加nacos配置

# nacos配置
spring:application:name: nacos-config-clientcloud:nacos:discovery:server-addr: localhost:8848 #Nacos服务注册中心地址config:server-addr: localhost:8848 #Nacos作为配置中心地址file-extension: yaml #指定yaml格式的配置# nacos端配置文件DataId的命名规则是:
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
# 本案例的DataID是:nacos-config-client-dev.yaml

application.yaml,设置端口和环境

server:port: 3377spring:profiles:active: dev # 表示开发环境#active: prod # 表示生产环境#active: test # 表示测试环境

主启动,新建主启动

@EnableDiscoveryClient
@SpringBootApplication
public class NacosConfigClient3377
{public static void main(String[] args){SpringApplication.run(NacosConfigClient3377.class,args);}
}

业务类,新建测试业务类

@RefreshScope //在控制器类加入@RefreshScope注解使当前类下的配置支持Nacos**的动态刷新功能。

新建控制器NacosConfigClientController

@RestController
@RefreshScope //在控制器类加入@RefreshScope注解使当前类下的配置支持Nacos的动态刷新功能。
public class NacosConfigClientController
{@Value("${config.info}")private String configInfo;@GetMapping("/config/info")public String getConfigInfo() {return configInfo;}
}

在naocos中添加配置信息(重点)

Nacos中的匹配规则,按照DataId的组成格式,参考地址:https://nacos.io/docs/v2/ecology/use-nacos-with-spring-cloud/?spm=5238cd80.2ef5001f.0.0.3f613b7cqocuR8
image

完整格式

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

如何创建配置呢?首先打开nacos浏览器端,点击【配置管理】→【配置列表】,点【创建配置】。
image

根据dataId规则,我们创建的文件名称为nacos-config-client-dev.yaml,配置要测试的属性config.info
image

测试

启动Nacos且按照前文配置成功配置管理,运行cloud-config-nacos-client3377,查看接口调用的配置信息: http://localhsot3377/config/info。
测试返回值
image

修改配置信息,查看是否动态刷新是否使用成功。

nacos会记录配置文件的历史版本,默认保留30天,此外还有一键回滚的功能:happy:。会触发配置更新。位置:【配置管理】→【历史版本】。

Nacos数据模型之Namespace-Group-DataId(命名空间-分组-DataId)

实际开发中,通常一个系统会准备:dev开发环境、test测试环境、prod生产环境,如果保证指定环境,启动时,能够读取到Nacos上环境的配置文件呢?

一个大型分布式微服务系统会有很多微服务子项目,每个微服务项目又都会有相应的开发环境、测试环境、预发环境、正式环境……那么,这些微服务配置如何分组和命名空间管理呢?

![nacos命名空间](E:\临时\SpringCloud\SpringCloud Alibaba\Nacos三元命名空间.png)

Namespace+Group+DataId是什么?类似于Java中额package名和类名,最外层的Namespace是可以用于区分部署环境的,Group和DataID逻辑上区分两个目标对象。

默认值。默认情况下Namespace=public,Group=DEFAULT_GROUP。Nacos默认的命名空间时public,Namespace主要用来实现隔离。例如,我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的。Group默认时DEFAULT_Group,Group可以把不同的微服务划分同一个分组里面去。

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

三种配置方案加载配置,可以根据实际需要进行设置

  • DataID方案,1️⃣默认空间public + 默认分组DEFAULT_GROUP_ 新建DataId
  • Group方案,2️⃣默认空间品历程+新建PROD_GROUP+新建DataId
  • Namespace方案,3️⃣Prod_Namespace+新建PROD_GROUP+新建DataId

Nacos持久化为mysql数据库

Nacos配置默认是持久化的,默认将配置信息持久化存储与嵌入式数据库(Derby)来保存配置数据。

Nacos服务发现持久化,它会将服务的注册信息持久化存储。即是Nacos服务出现短暂的故障重启后,之前的服务信息依赖存在,能够保证系统正常运行。

Nacos如何将默认的嵌入式数据切换为外部的MySql等关系型数据库呢?

打开{nacos.home}/conf文件下的 application.properties ,增加支持mysql数据源。

# db mysql
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/ry-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=password

image

持久化的数据库如何初始化?打开{nacos.home}/conf文件下的mysql-schema.sql,初始化到自己的mysql数据库即可。

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

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

相关文章

中考英语优秀范文-006 How to get on well with others 如何与他人相处融洽

中考英语优秀范文-006 How to get on well with others 如何与他人相处融洽 1 写作要求 当今社会,与人交往越来越成为一种不可或缺的能力,作为中学生,学会如何与人相处尤为重要。假如上周你们班对 “如何与人相处” 展开了讨论,请根据以下的讨论结果,以 “How to get on …

SI24R2 超低功耗高性能 2.4GHz GFSK 无线发射芯片SI24R2重磅出击

SI24R2是一颗工作在2.4GHz ISM频段,专为低功耗无线场合设计,集成嵌入式发射基带的无线发射芯片。工作频率范围为2400MHz-2525MHz,共有126个1MHz带宽的信道。 SI24R2采用GFSK/FSK数字调制与解调技术。数据传输速率与PA输出功率都可以调节,支持2Mbps,1Mbps,250Kbps 三种数据…

揭秘如何用Monaco Editor打造功能强大的日志查看器

Monaco Editor 是一个基于浏览器的代码编辑器,由 Microsoft 开发,是 Visual Studio Code 的核心编辑器组件。为用户提供了一个功能丰富、性能优异的代码编辑环境,常用于 web 应用。 下面本文将从 Monaco Editor 的使用方法、使用逻辑作为切入点,讲述在网页中如何通过 Monac…

【新兴产业】人形机器人

产业链 人形机器人产业链上游为原材料、零部件以及软件平台,核心零部件包括伺服系统、执行器、减速器、控制系统、驱动器等,成本占比最高、技术难度大,具备较高的壁垒。 产业链中游为人形机器人的本体设计、制造及系统集成。 产业链下游为场景应用,目前较有潜力的人形机器人…

PVE 备份快照

PVE 备份快照 - 知乎 抄一个备份 vmware压缩整个虚拟机文件夹就可以连带快照一起打包。 PVE 自带的vzdump备份并不包含快照信息,备份之后再还原,会丢失快照信息。 备份时提示:snapshots found (not included into backup) 快照信息在循序渐进的开发模式中十分重要,遇到错误…

借助Atrribute扩展UnityEdior

借助Atrribute扩展UnityEdiorC# Attribute 简介 Attribute 是 C# 提供的一种强大的元数据机制,可以用来为代码的程序元素(如类、方法、属性等)附加额外的信息。这些附加信息可以在运行时通过反射机制读取,从而影响程序的行为。Attribute 的特性轻量级 Attribute 不会直接影…

C#实现LALR(1)解析器的生成器

Yet Another Compiler 参考lex和yacc的输入格式,参考虎书《现代编译原理-C语言描述》的算法,大力整合优化,实现了LALR(1)的C#生成器(暂命名为bitParser)。 词法分析器根据DFA和最小化DFA分别生成词法分析器代码(状态转换表、保留字、Token类型等)支持全Unicode字符。支持…

【新兴产业】量子信息

产业链 量子信息主要包括量子计算、量子通信和量子测量三大领域,在提升计算困难问题运算处理能力、加强信息安全保护能力、提高传感测量精度等方面,具备超越经典信息技术的潜力。 量子信息产业链从上游到下游主要包含基础光电元器件、量子通信 核心元器件、量子通信传输干线、…

【新兴产业】元宇宙

产业链 •顶层设计:政府从宏观角度为元宇宙的发展做出顶层设计,尤其在金融交易体系、社会治理制度方面给出明确定调和指明方向。 • 市场培育:地方政府因地制宜制定符合当地产业特色的元宇宙发展规划,并出台产业扶持政策、落地措施,制定未来执行计划。 • 产业联盟:建立与…

回首2024,展望2025,新年新“鲸”象~

回首 2024 年,数字孪生领域蓬勃发展,技术创新层出不穷,应用场景不断拓展。在这充满机遇与挑战的一年里,山海鲸可视化凭借国产自研的零代码数字孪生平台,为众多企业和政府机构提供了一站式的数字化解决方案,助力各行各业在数字化转型的道路上稳步前行。 1. 回首2024年 (一…

CICD Day2、基于jenkins Gitlab 的CICD web-demo配置

1、 代码提交 1.1 在服务器上创建一个web-demo的目录,用户web前端项目的开发目录 mkdir web-demo # 在web-demo目录下 编辑一个index.html的文件 cat index.html <!DOCTYPE html> <html> <head><meta charset="utf-8"><title>实例<…

CPU-Z处理器检测工具 v2.13.0中文绿色单文件

点击上方蓝字关注我 前言 CPU-Z是一个非常厉害的CPU检测小帮手。它能识别很多种类的CPU,而且打开和检测的速度都很快。这个工具能清楚地告诉我们关于CPU、主板、内存、显卡等硬件的详细信息,比如是哪个厂家生产的、处理器的名字、是怎么做出来的、封装技术怎么样,还有它们的…