200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 十四 SpringCloud Alibaba Nacos 服务注册和配置中心

十四 SpringCloud Alibaba Nacos 服务注册和配置中心

时间:2024-04-25 15:27:40

相关推荐

十四 SpringCloud Alibaba Nacos 服务注册和配置中心

文章目录

SpringCloud Alibaba入门简介1. 是什么2. 能干什么3. 怎么玩 SpringCloud Alibaba Nacos服务注册和配置中心1. Nacos 简介2. 安装并运行 Nacos3. Nacos作为服务注册中心演示3.1 基于Nacos的服务提供者在父项目中创建 cloud-alibaba-provider-payment9001 生产者服务module1. pom2. 编写 yaml 配置文件3. 编写主启动类和业务类4. 启动测试5. 根据9001新建9002,测试负载均衡6. 如果不想新建9002,可以使用下面方法进行测试 3.2基于Nacos的服务提供者在父项目中创建 cloud-alibaba-consumey-order83 消费者服务module1. pom2. 编写 yaml 配置文件3. 编写主启动类、bean配置类、业务类4. 测试 3.3 服务注册中心对比 4. Nacos作为服务配置中心演示4.1 Nacos作为配置中心--基础配置在父项目中创建 cloud-alibaba-config-nacos-client3377 配置中心module1. pom2. 编写 yaml3. 编写主启动类和业务类4. 在 Nacos 中添加配置信息:配置规则4.1 理论:4.2 实操 5. 测试 4.2 Nacos作为配置中心--分类配置1. 多环境多项目管理2. Nacos 的图形化管理界面3. Namespace+Group+Data ID三者的关系?为什么这么设计?4. Case:三种方案配置4.1 DataID方案4.2 Group方案4.3 Namespace方案 5. Nacos集群和持久化配置(重要)5.1 官网说明Nacos 支持三种部署模式Windows单机模式支持Mysql 5.2 Nacos持久化配置解释5.3 Linux版nacos+mysql生产环境配置

一、SpringCloud 微服务基础介绍

二、SpringCloud 微服务项目构建

三、SpringCloud 微服务之Eureka 服务注册与发现

四、SpringCloud 微服务之 Zookeeper 服务注册与发现

五、SpringCloud 微服务之Consul 服务注册与发现

六、SpringCloud 微服务之 Ribbon 负载均衡服务调用

七、SpringCloud 微服务之 OpenFeign 服务接口调用

八、SpringCloud 微服务之 Hystrix 断路器

九、Spring Cloud 微服务之 Gateway

十、SpringCloud 微服务之SpringCloud Config 分布式配置中心

十一、SpringCloud 微服务之SpringCloud Bus 消息总线

十二、SpringCloud 微服务之SpringCloud Stream 消息驱动

十三、Spring Cloud 微服务之 SpringCloud Sleuth 分布式请求链路跟踪

十四、SpringCloud Alibaba Nacos 服务注册和配置中心

十五、SpringCloud Alibaba Sentinel 实现熔断与限流

十六、SpringCloud Alibaba Seata 处理分布式事务

SpringCloud Alibaba入门简介

1. 是什么

官网:/alibaba/spring-cloud-alibaba/blob/master/README-zh.md

Spring Cloud Alibaba Reference Documentationl

2. 能干什么

服务限流降级:默认支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。消息驱动能力:基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。分布式事务:使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。阿里云短信服务:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

3. 怎么玩

Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。Dubbo:Apache Dubbo™ 是一款高性能 Java RPC 框架。Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。Alibaba Cloud OSS: 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。Alibaba Cloud SchedulerX: 阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。Alibaba Cloud SMS: 覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

SpringCloud Alibaba Nacos服务注册和配置中心

Nacos GitHub:/alibaba/Nacos

Nacos官网:https://nacos.io/

1. Nacos 简介

英文全称Dynamic Naming and Configuration Service,Na为naming/nameServer即注册中心,co为configuration即注册中心,service是指该注册/配置中心都是以服务为核心。服务在nacos是一等公民

Nacos就是注册中心+配置中心的组合

Nacos = Eureka+Config+Bus

各种注册中心比较

2. 安装并运行 Nacos

参考:/zhou_zhao_xu/article/details/119449917

3. Nacos作为服务注册中心演示

3.1 基于Nacos的服务提供者

在父项目中创建 cloud-alibaba-provider-payment9001 生产者服务module

1. pom

<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"><parent><artifactId>springcloud</artifactId><groupId>com.zzx</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>cloud-alibaba-provider-payment9001</artifactId><properties><piler.source>8</piler.source><piler.target>8</piler.target></properties><dependencies><!-- SpringCloud alibaba nacos --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!-- SpringBoot 整合web组件 --><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.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies></project>

2. 编写 yaml 配置文件

server:port: 9001spring:application:name: cloud-alibaba-nacos-provider-servicecloud:# Nacos 配置nacos:discovery:server-addr: 47.107.124.79:8848 # 配置 Nacos 地址# 暴露web端点management:endpoints:web:exposure:include: '*'

3. 编写主启动类和业务类

主启动类

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

业务类

@RestControllerpublic class PaymentController {@Value(("${server.port}"))private String serverPort;@GetMapping("/payment/nacos/{id}")public String getPayment(@PathVariable("id") Integer id) {return "nacos registry, serverPort: " + serverPort + "\tid: " + id;}}

4. 启动测试

先启动 nacos,再启动 9001 服务

查看 nacos UI

5. 根据9001新建9002,测试负载均衡

先启动 nacos,再启动 9001 服务、9002服务

查看 nacos UI

可以发现现在有两个服务实例了,说明两个服务都已经注册进了nacos注册中心

6. 如果不想新建9002,可以使用下面方法进行测试

通过copy9001服务,并设置启动时的参数,可以启动一个端口为9003的新服务

启动测试,可以发现实例变为了3个

3.2基于Nacos的服务提供者

在父项目中创建 cloud-alibaba-consumey-order83 消费者服务module

1. pom

<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"><parent><artifactId>springcloud</artifactId><groupId>com.zzx</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>cloud-alibaba-consumey-order83</artifactId><properties><piler.source>8</piler.source><piler.target>8</piler.target></properties><dependencies><!-- SpringCloud alibaba nacos --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!-- SpringBoot 整合web组件 --><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.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies></project>

2. 编写 yaml 配置文件

server:port: 83spring:application:name: cloud-alibaba-nacos-consumercloud:# Nacos 配置nacos:discovery:server-addr: 47.107.124.79:8848 # 配置 Nacos 地址# 消费者将要去访问的为服务名称(成功注册进nacos的为服务提供者)service-url:nacos-user-service: http://cloud-alibaba-nacos-provider-service

3. 编写主启动类、bean配置类、业务类

主启动类

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

配置 bean

@Configurationpublic class ApplicationContextConfig {@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}}

业务类

@RestController@Slf4jpublic class OrderNacosController {private final RestTemplate restTemplate;@Autowiredpublic OrderNacosController(RestTemplate restTemplate) {this.restTemplate = restTemplate;}@Value("${service-url.nacos-user-service}")private String serverUrl;@GetMapping("/consumer/payment/nacos/{id}")public String paymentInfo(@PathVariable("id") Integer id) {String result = restTemplate.getForObject(serverUrl + "/payment/nacos/" + id, String.class);log.info("id: {} \t result: {}", id, result);return result;}}

4. 测试

依次启动 9001、9002、83服务

测试发现两个服务交替出现,轮询

3.3 服务注册中心对比

Nacos 全景图示

Nacos 和 CAP

Nacos 支持AP和CP模式的切换

4. Nacos作为服务配置中心演示

4.1 Nacos作为配置中心–基础配置

在父项目中创建 cloud-alibaba-config-nacos-client3377 配置中心module

1. pom

<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"><parent><artifactId>springcloud</artifactId><groupId>com.zzx</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>cloud-alibaba-config-nacos-client3377</artifactId><properties><piler.source>8</piler.source><piler.target>8</piler.target></properties><dependencies><!-- SpringCloud alibaba nacos --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!-- Nacos Config --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!-- SpringBoot 整合web组件 --><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.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies></project>

2. 编写 yaml

为什么配置两个 yaml

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

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

bootstrap.yaml

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

application.yaml

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

3. 编写主启动类和业务类

主启动类

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

业务类

@RestController@RefreshScope // 支持 Nacos 的动态刷新功能public class NacosConfigClientController {@Value("${config.info}")private String configInfo;@Value("%{config.message}")private String configMessage;@GetMapping("/config/info")public String getConfig() {return "configInfo: " + configInfo + "\tconfigMessage: " + configMessage;}}

4. 在 Nacos 中添加配置信息:配置规则

4.1 理论:

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

4.2 实操

5. 测试

启动 3377 服务

注意:

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

调动接口查看信息

自带动态刷新

Nacos更新配置文件后会自动刷新,不需要自己手动刷新

更新配置查看效果

4.2 Nacos作为配置中心–分类配置

1. 多环境多项目管理

问题1:

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

dev 开发环境

test测试环境

prop生产环境

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

问题2:

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

2. Nacos 的图形化管理界面

配置管理

命名空间

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

是什么

类似java里面package名和类名

最外层的namespace是可以用于区分部署环境的,Group和DataID逻辑上区分两个目标对象三者情况

默认情况

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

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

比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的。Gropu默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去Service就是微服务:一个Service可以包含多个Cluster(集群),Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分。

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

4. Case:三种方案配置

4.1 DataID方案

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

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

新建dev配置dataID

新建test配置dataID

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

spring:profiles:active: test # 测试环境# active: dev # 开发环境# active: prop # 生产环境# active指定读取哪个配置就会读取哪个配置文件

测试

4.2 Group方案

通过Group实现环境区分

新建Group

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

bootstrap和application

4.3 Namespace方案
新建dev/test的namespace

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

在新建的dev namespace中配置

yaml 配置

5. Nacos集群和持久化配置(重要)

官网:https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html

5.1 官网说明

架构图

官网结构图翻译

说明

默认Nacos使用嵌入式数据库实现数据的存储。所以,如果启动多个默认配置下的Nacos节点,数据存储是存在一致性问题的。为了解决这个问题,Nacos采用了集中式存储的方式来支持集群化部署,目前只支持Mysql的存储

Nacos 支持三种部署模式

Nacos 支持三种部署模式

单机模式 - 用于测试和单机试用。集群模式 - 用于生产环境、确保高可用。多集群模式 - 用于多数据中心场景。

Windows

下载地址:/alibaba/nacos/releases

cmd startup.cmd 或者双击 startup.cmd 文件启动

单机模式支持Mysql

在 0.7 版本之前,在单机模式时Nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。

在0.7版本增加了支持Mysql数据源的能力,具体步骤:

安装 Mysql数据库,版本要求:5.6.5+初始化mysql数据库,数据库初始化文件:nacos-mysql.sql修改conf/application.properties文件,增加支持Mysql数据源配置(目前只支持Mysql),添加mysql数据源的url、用户名、密码 application.properties

再以单机模式启动 nacos,nacos所有写入嵌入式数据库的数据都写到了mysql中

5.2 Nacos持久化配置解释

Nacos默认自带的嵌入式数据库derbyderby到mysql的切换配置步骤 数据库初始化文件:nacos-mysql.sql ,执行脚本配置 application.properties 启动nacos,可以看到一个全新的空记录界面,以前是记录近derby

5.3 Linux版nacos+mysql生产环境配置

预计需要,1个Nginx+3nacos注册中心+1个mysqlNacos下载Linux版 下载地址:/alibaba/nacos/releases解压安装集群配置步骤(重点)

Linux服务器上mysql数据库配置

SQL脚本位置 /nacos/cong 或者查看网上的 nacos-mysql.sql

application.properties配置

配置文件位置 /nacos/cong

配置内容:改成自己的mysql配置信息

Linux服务器上nacos的集群配置cluster.conf

梳理3台nacos机器的不同服务端口号复制出cluster.conf

配置内容:

这个IP不能写127.0.0.1,必须是Linux命令hostname -i能够识别的IP

编辑nacos的启动脚本startup.sh,使它能够接受不同的启动端口

/mynacos/nacos/bin目录下有startup.sh

注意:此处配置的是伪 集群,集群请更改成自己的IP

真正的集群不需要更改这个配置

Nginx的配置,由它作为负载均衡器

修改Nginx的配置文件

nginx.conf

按照指定启动

截止到此处,1个Nginx+3个nacos注册中心+1个mysql

测试通过Nginx访问nacos:http://192.168.111.144:1111/nacos/#/login新建一个配置测试Linux服务器的mysql插入一条记录 测试

微服务cloudalibaba-provider-payment9002启动注册进nacos集群

高可用小总结

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。