Nacos介绍与使用

news2024/11/18 9:39:22

Nacos介绍与使用

文章目录

  • Nacos介绍与使用
    • 一. 什么是Nacos
      • 1 Nacos功能
        • 1.1 配置中心
        • 1.2 注册中心
      • 2.为什么要使用Nacos
    • 二.Nacos 部署安装
      • 1. Nacos 部署方式
      • 2. Nacos 安装
      • 3. 配置数据源
      • 4. 开启控制台授权登录(可选)
    • 三. Nacos配置中心的使用
      • 1. 创建配置信息
      • 2. Spring Boot使用配置中心
        • 1. 添加依赖
        • 2. 设置配置文件
        • 3. 读取配置文件
      • 3.注册中心的使用
        • 1.生产者实现
        • 2.消费者实现
    • 四. 健康检测机制

一. 什么是Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

1 Nacos功能

Nacos主要功能有以下两种:

  1. 配置中心
  2. 注册中心
1.1 配置中心

配置中心是一种集中化管理配置的服务。

主要作用如下:

  1. 集中管理配置信息:配置中心将不同服务的配置信息集中进行管理,实现了配置信息的集中管理。
  2. 动态更新配置:通过操作界面或者API进行动态配置更新,消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。
  3. 配置信息共享:将配置集中在配置中心中,不同的服务实例可以共享一套配置信息
  4. 配置信息安全:配置中心可以对配置信息提供安全管理、权限管理等管理功能。
  5. 配置快照:支持配置信息版本管理、历史记录等管理功能。
1.2 注册中心

注册中心是微服务架构中的一个重要组件,用于实现不同服务实例的注册与发现

主要作用如下:

  1. 服务注册:服务实例启动时,将自身信息注册到注册中心,包括服务名称、地址、端口等。
  2. 服务发现:消费者向注册中心查询服务,并获取服务实例信息来访问服务。
  3. 服务健康检查:注册中心定期检查服务实例健康状况,过滤不健康实例。
  4. 服务路由:提供服务的路由和负载均衡功能。
  5. 服务监控:统计服务调用次数、时长等,用于监控服务状态
  6. 服务更新:当服务实例信息变更时,向注册中心发送更新信息通知。

通过注册中心,服务提供者和消费者只需与注册中心交互即可,从而实现服务的注册与发现,降低了服务间的耦合度。

2.为什么要使用Nacos

  • 易⽤: 简单的数据模型, 标准的 restfulAPI, 易用的控制台, 丰富的使用文档。
  • 稳定: 99.9% 高可用, 脱胎于历经阿里巴巴 10 年生产验证的内部产品, 支持具有数百万服务的大规模场景, 具备企业级 SLA 的开源产品。
  • 实时: 数据变更毫秒级推送生效; 1w 级, SLA 承诺 1w 实例上下线 1s, 99.9% 推送完成; 10w级, SLA 承诺 1w 实例上下线 3s, 99.9% 推送完成; 100w 级别, SLA 承诺 1w 实例上下线 9s,99.9% 推送完成。
  • 规模: 十万级服务/配置, 百万级连接, 具备强大扩展性。

二.Nacos 部署安装

1. Nacos 部署方式

Nacos有三种部署方式;

  1. 单机模式:将注册中心、配置中心等功能集成在一个进程内,全部部署在一台机器上,适用于测试和单机试用。
  2. 集群模式:多个Nacos服务器实例组成一个集群。这些实例通过相互通信和协调工作,共同提供服务注册、配置管理和服务发现等功能。在集群模式下,所有实例共享相同的数据,数据变更会自动部署到所有的实例中,客户端可以随机选择任意一个实例进行服务的注册与发现。适用于生产环境,确保高可用。
  3. 多集群模式:多集群模式是为了满足在不同的区域或网络中进行部署和扩展的需求,在多集群模式中,可以选择不同的Nacos实例组成多个相互独立的集群,每个集群可以拥有自己独立的配置和注册中心,并可以跨集群进行服务注册与发现。多集群模式适用于分布式系统的多区域部署,并可以使用不同的网络和存储设施。每个集群具有独立的数据和配置,但可以通过自定义的同步机制在集群之间共享数据。

2. Nacos 安装

  1. 环境准备:

    • 安装好 JDK,需要 1.8 及其以上版本
    • 建议: 2核 CPU / 4G 内存 及其以上
    • 建议: 生产环境 3 个节点 及其以上
  2. 安装方式:

    1. 源码安装
    2. 编译压缩包安装(推荐):操作简单

    编译压缩包安装流程:

    1. 下载压缩包: 下载地址 ,下载最新发现版
    2. 解压压缩包:使用unzip nacos-server-$version.zip 或者tar -xvf nacos-server-$version.tar.gz
    3. 进入Nacos运行目录:cd nacos/bin
    4. 启动Nacos服务(单机模式启动):
      • Linux/MacOS: sh startup.sh -m standalone
      • Windows:cmd startup.cmd -m standalone

    启动成功后可以使用:localhost:8848/nacos进行访问Nacos的控制台,如下图所示:

    image-20231111000158601

集群部署说明:https://nacos.io/zh-cn/docs/v2/guide/admin/cluster-mode-quick-start.html

3. 配置数据源

Nacos单机模式下默认使用的数据源是内置的嵌入式数据库Derby作为数据库,但是Derby不适合承载生产环境大规模部署,因为有以下限制:

  1. 数据存储容量只有2GB;
  2. 不支持集群模式下的高可用复制;
  3. 性能和并发能力有限制

因此在生产环境中使用单机模式时,可以使用外置数据库作为数据存储,例如MySQL。

在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力,具体的操作步骤:

  1. 安装MySQL,版本要求:5.6.5+;

  2. 初始化MySQL数据库,数据库初始化文件:sql语句源文件;

  3. 修改Nacos安装目录中conf/application.properties文件,增加支持MySQL数据源配置,配置如下:

    spring.datasource.platform=mysql
    db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
    db.user.0=nacos
    db.password.0=nacos
    

    参考文档:application.properties配置文件

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

    最后,重新启动Nacos服务。

对于集群模式下的部署可参考官方文档:集群模式下运行Nacos

4. 开启控制台授权登录(可选)

首先找到Nacos安装目录中conf/application.properties文件,修改以下内容:

nacos.core.auth.enabled=true
nacos.core.auth.system.type=nacos
nacos.core.auth.plugin.nacos.token.secret.key=${自定义,保证所有节点一致}
nacos.core.auth.server.identity.key=${自定义,保证所有节点一致}
nacos.core.auth.server.identity.value=${自定义,保证所有节点一致}

注意,文档中的默认值SecretKey012345678901234567890123456789012345678901234567890123456789VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg=为公开默认值,可用于临时测试,实际使用时请务必更换为自定义的其他有效值。

至此,我们Nacos集群环境就搭建成功了,接下来就是使用Nacos服务的两个核心功能了。

三. Nacos配置中心的使用

1. 创建配置信息

image-20231113182408418

参数说明:

  1. 命名空间:Nacos 基于Namespace 帮助用户逻辑隔离多个命名空间,这可以帮助用户更好的管理测试、预发、生产等多环境服务和配置,让每个环境的同一个配置(如数据库数据源)可以定义不同的值。
  2. Data ID:配置的唯一标识,用于查找配置文件。
  3. Group:配置分组,用于设置小组信息。

2. Spring Boot使用配置中心

实现步骤:

  1. 添加nacos-config依赖。
  2. 在配置文件(application.properties)中设置Nacos相关信息。
  3. 使用@Value@RefreshScope实现配置的读取和自动更新。
1. 添加依赖
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2. 设置配置文件
# Nacos认证信息
spring.cloud.nacos.config.username=nacos
spring.cloud.nacos.config.password=nacos
spring.cloud.nacos.config.contextPath=/nacos
# 设置配置中心服务端地址
spring.cloud.nacos.config.server-addr=localhost:8848
# Nacos 配置中心的namespace。需要注意,如果使用 public 的 namcespace ,请不要填写这个值,直接留空即可
# spring.cloud.nacos.config.namespace=
spring.config.import=nacos:nacos-config-example
# 配置文件类型
spring.cloud.nacos.config.file-extension=properties
3. 读取配置文件
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope
public class TestController {
    @Value("${myconfig}")
    private String myconfig;

    @RequestMapping("/getconfig")
    public String getMyconfig(){
        return  myconfig;
    }
}	

3.注册中心的使用

注册中心的交互流程:

image-20231121194329602

注册中心通常有两个角色:

  1. 服务提供者(生产者):对外提供服务的微服务应用。它会把自身的服务注册到服务中心,以供消费者发现和调用。
  2. 服务调用者(消费者):调用其他微服务的应用程序。它会向注册中心订阅自己需要的服务,并基于服务提供者信息发起远程调用。
1.生产者实现

生产者实现有以下3步:

  1. 添加nacos-discovery依赖
  2. 配置nacos服务端信息
  3. 编写调用接口
  1. 添加依赖

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        <version>${latest.version}</version>
    </dependency>
    
  2. 设置服务端信息

    spring:
      application:
        name: nacos-discovery-demo #nacos服务名
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848
            username: nacos
            password: nacos
            
    
  3. 编写调用接口

    @RestController
    @RequestMapping("/user")
    public class UserController {   
        @RequestMapping("/getnamebyid")
        public String getNameById(Integer id) throws InterruptedException {
            return "name: "+ id;
        }
    }
    
2.消费者实现

实现过程:消费者首先调用生产者的HTTP接口,需要引入Spring Cloud OpenFeign进行HTTP调用,其次为了实现负载均衡,我们还需要引入客户端负载均衡器:Spring Cloud LoadBalancer

具体的OpenFeignLoadBalancer的功能,将会在后续文章中进行详细介绍。

因此消费者实现有以下步骤:

  1. 引入依赖(Nacos注册中心、OpenFeign、Spring Cloud LoadBalancer)
  2. 配置Nacos服务端信息
  3. 在项目中开启OpenFeign
  4. 编写OpenFeign调用代码
  5. 通过OpenFeign调用生产者
  1. 引入依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-loadbalancer</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    
  2. 配置Nacos服务端信息

    spring:
      application:
        name: nacos-consumer-demo
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848
            username: nacos
            password: nacos
            register-enabled: false # 消费者(不需要注册到nacos中)
    
  3. 在项目中开启OpenFeign

    在启动类文件中添加@EnableFeignClients注解即可

  4. 编写OpenFeign调用代码

    @Service
    @FeignClient("nacos-discovery-demo") // 表示调用 nacos 中的 nacos-discovery-demo 服务
    public interface UserService {
        @RequestMapping("/user/getnamebyid") // 调用生产者的"/user/getnamebyid"接口
        public String getNameById(@RequestParam("id") int id);
    
    }
    
  5. 通过OpenFeign调用生产者

    @RestController
    public class BusinessController {
        
        @Autowired
        private UserService userService;
    
        @RequestMapping("/getnamebyid")
        public String getNameById(Integer id){
            return userService.getNameById(id);
        }
    
    }
    

启动服务后,我们就可以在Nacos控制台看到生产者的服务

image-20231121201201077

进入详情页面后可以看到服务的相关信息

image-20231121201237890

在服务详情页面中,可以看到有许多的参数信息

**分组:**注册服务的所在的组名,默认是DEFAULT_GROUP

**保护阈值:**健康节点要求的最小百分比。用于在服务出现不健康实例时,阻止流量过度向少量健康实例中,保护服务的整体可用性。保护阈值的范围是0到1之间的浮点数,默认为0。当集群中健康的实例占比小于设置的保护阈值时,就会触发阈值保护功能。触发阈值保护后,Nacos会将全部实例(健康实例+不健康实例)全部返回给调用者,虽然损失了一部分流量,但是保证了集群中剩余的健康实例能正常工作。

**服务路由类型:**由于实现不同的路由需求,常见的路由类型有以下两种:

  • **none:**默认路由,基于权重的轮询负载均衡路由策略。
  • **label:**标签路由,相同标签的实例会被聚合为一个集群,不同标签则实现流量隔离。

**临时实例:**Nacos会将服务分为临时实例和永久实例,临时实例的生命周期和服务运行周期相同,服务停止运行,Nacos会将临时实例删除;而永久实例即使程序运行停止,也会在Nacos中。

  • 临时实例(Temporary instances):是指注册到注册中心的服务实例,其注册信息在实例下线或不可用时会自动删除。如果服务实例下线、断开连接或主动注销,Nacos会自动从注册表中删除实例的信息。临时实例适用于临时性的服务实例。
  • 永久实例(Permanent Instance):是指注册到注册中心的服务实例,其注册信息一直保存在Nacos服务器上,直到主动注销或被删除。意味着当服务下线或不可用时,它的注册信息仍保留在Nacos上,直到显示取消注册。永久实例适用于需要长期存在的服务。

对于永久实例实现,通过在配置文件中ephemeral: true实现(yaml文件中于nacos.discover.username同级)

**权重:**用于实现负载均衡,取值范围为0到10000,数值越大,权重越大,负载均衡分配的概率就越高。设置0表示下线。

四. 健康检测机制

Nacos中健康检测机制是用来检测服务健康状态的,只要健康的节点才能被服务端调用,这样程序才能正常的、稳定的运行。

在Nacos中有两种健康检测机制:

  1. 客户端主动上报机制。
  2. 服务端反向探测机制。
image-20231121210954495

如何设置健康检测机制:

在Nacos中健康检测机制不能主动设置,但健康检测机制是和Nacos的服务实例类型强相关的。在Nacos中的两种服务实例分别对应不同的健康检测机制:

  1. 临时实例(也可以叫做非持久化实例):对应客户端主动上报机制。
  2. 永久实例(也可以叫做持久化实例):对应服务端反向探测机制。

客户端主动上报机制

临时实例每隔5秒会主动上报一次自己的健康状况,发送的数据包叫做心跳包,发送心跳包的机制叫做心跳机制。如果心跳包的间隔时间超过了15秒,那么Nacos服务器端就会将此服务实例标记为非健康实例,如果超过了30秒,那么Nacos服务器端将会把此服务实例从服务列表中删除掉。

服务端反向探测机制

永久实例使用的是服务器端反向探测机制,它的探测周期是2000毫秒+随机数(5000毫秒以内),如果检测异常会将此服务实例标记为非健康实例,但不会把实例删除。

Nacos服务器反向探测目前内置了3中探测协议:HTTP探测、TCP探测、MySQL探测。默认使用的是TCP探测。

关于Nacos更多的使用可以参考Nacos官方手册:https://nacos.io/zh-cn/docs/architecture.html

以上是博主对Nacos的介绍,制作不易,看完留下你的一键三连吧!
的间隔时间超过了15秒,那么Nacos服务器端就会将此服务实例标记为非健康实例,如果超过了30秒,那么Nacos服务器端将会把此服务实例从服务列表中删除掉。

服务端反向探测机制

永久实例使用的是服务器端反向探测机制,它的探测周期是2000毫秒+随机数(5000毫秒以内),如果检测异常会将此服务实例标记为非健康实例,但不会把实例删除。

Nacos服务器反向探测目前内置了3中探测协议:HTTP探测、TCP探测、MySQL探测。默认使用的是TCP探测。

关于Nacos更多的使用可以参考Nacos官方手册:https://nacos.io/zh-cn/docs/architecture.html

以上是博主对Nacos的介绍,制作不易,看完留下你的一键三连吧!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023/11/21JAVAweb学习

优先级高低id > 类 > 元素 格式化ctrl alt L

LeetCode热题100——动态规划

动态规划 1. 爬楼梯2. 杨辉三角3. 打家劫舍 1. 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; // 题解&#xff1a;每次都有两种选择&#xff0c;1或者2 int climbStairs(int n) {if (n …

GAMES101—Lec 05~06:光栅化

目录 概念回顾&#xff08;个人理解&#xff09;光栅化1.采样2.采样出现的问题&#xff1a;走样 反走样 概念回顾&#xff08;个人理解&#xff09; 屏幕&#xff1a;在图形学中&#xff0c;我们认为屏幕是一个二维数组&#xff0c;数组里的每一个元素为一个二维像素。 光栅化…

【C++进阶之路】第四篇:set和map

文章目录 一、关联式容器健值对二、set & multiset三、map & multimap在这里插入图片描述 四、set和map底层原理 一、关联式容器健值对 关联式容器 & 键值对 二、set & multiset set & multiset 三、map & multimap map & multimap 四、set和…

【AT模式连接ONENET】ONENET可视化平台的使用

02 ONENET可视化平台的使用 ATCWMODE1 设置模式 ATCWDHCP1,1 启动DHCP功能 ①ATCWJAP"ssid","password" ATCWJAP“123456789”&#xff0c;“wang020118” ②ATMQTTUSERCFG0,1,"设备名字","设备ID","你的鉴权信息""…

JAVA项目测试----用户管理系统

一)项目简介: 用户管理系统是依据于前后端分离来实现的&#xff0c;是基于Spring SpringBoot Spring MVC&#xff0c;SpringAOP&#xff0c;MyBatis等框架来实现的一个用户管理网站&#xff0c;并且已经部署到了云服务器上, 目前的用户管理系统实现了超级管理员的注册功能&…

模电 01

一.半导体基本知识 1.优点&#xff1a;体积小、重量轻、使用寿命长、输入功率小、功率转换效率高。 2.性能介于导体与绝缘体 3.常用半导体材料&#xff1a;硅&#xff08;SI&#xff09; 镉&#xff08;Ge&#xff09;,化合物半导体&#xff1a;砷化镓&#xff08;GaAs&…

【封装UI组件库系列】全局样式的定义与重置

封装UI组件库系列第二篇样式​​​​​​​ ​​​​​​&#x1f31f;前言 &#x1f31f;定义全局样式 生成主题色和不同亮度的颜色 ​编辑 中性色及其他变量 &#x1f31f;样式重置 &#x1f31f;总结 ​​​​​​​​​​​​​​&#x1f31f;前言 在前端开发中&…

SpringBoot趣探究--1.logo是如何打印出来的

一.前言 从本篇开始&#xff0c;我将对springboot框架做一个有趣的探究&#xff0c;探究一下它的流程&#xff0c;虽然源码看不懂&#xff0c;不过我们可以一点一点慢慢深挖&#xff0c;好了&#xff0c;下面我们来看一下本篇的知识&#xff0c;这个logo是如何打印出来的&#…

2014年2月24日 Go生态洞察:FOSDEM 2014上的Go演讲精选

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

【Echart】Echart设置label太长隐藏:

文章目录 第一种&#xff1a;竖排显示第二种&#xff1a;显示部分第三种&#xff1a;强制显示所有标签并旋转 第一种&#xff1a;竖排显示 xAxis: {type: category,data: res.data.data.sz.xAxis,axisLabel:{fontSize:12,formatter: function(value) {return value.split().joi…

gitlab安装以及创建用户创建组,修改密码 邮箱配置 数据备份与恢复--保姆级教学!

GitLab是一种基于Web的Git仓库管理工具&#xff0c;它允许您在组织或个人级别上创建和管理Git仓库&#xff0c;以便在一个中心位置上执行代码管理和协作工作。GitLab提供了强大的功能&#xff0c;如代码审查、问题跟踪、CI/CD、容器注册表、Wiki和持续集成等。 以下是GitLab的…

gitlab安装配置及应用

安装 ##安装依赖 yum install -y curl policycoreutils-python openssh-server perl#上传包 rz gitlab-jh-16.5.2-jh.0.el7.x86_64.rpm 安装 yum install gitlab-jh-16.0.3-jh.0.el7.x86_64.rpm 初始化并启动 # 以下两种方法都可以配置访问地址&#xff0c;第一种需要在yum安…

2023年【A特种设备相关管理(锅炉压力容器压力管道)】模拟考试题及A特种设备相关管理(锅炉压力容器压力管道)作业考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 A特种设备相关管理&#xff08;锅炉压力容器压力管道&#xff09;模拟考试题参考答案及A特种设备相关管理&#xff08;锅炉压力容器压力管道&#xff09;考试试题解析是安全生产模拟考试一点通题库老师及A特种设备相关…

[Docker]八.Docker 容器跨主机通讯

一.跨主机通讯原理 在主机192.168.31.140上的docker0(172.17.0.0/16)中有一个容器mycentos( 172.17.0.2/16), 在主机192.168.31.81上的docker0(172.17.0.0/16)中有一个容器mycentos( 172.17.0.2/16),然后在主机192.168.31.140上ping主机192.168.31.81,发现ping不通要实现两个主…

【代数学习题4.1】从零理解范数与迹 —— 求极小多项式

从零理解范数与迹 —— 求极小多项式 写在前面概念解释题目解答 1. 极小多项式极小多项式的求法1. 对 α \alpha α 的极小多项式python求解 2. 对 α 1 \alpha 1 α1 的极小多项式python找到多项式python找到极小多项式 3. 对 α 2 α 1 \alpha^2 \alpha 1 α2α1 的…

高校档案室建设标准-高校数字档案室建设需考虑哪些因素

高校档案室是高等教育机构所建立的档案存放与管理的机构&#xff0c;主要负责高校行政、教学、科研、文化和保密等方面的档案的收集、整理、保存、利用和管理工作。高校档案室是高等教育机构的重要组成部分&#xff0c;旨在为高校的历史研究、管理和服务提供必要的档案资源。同…

STM32F4串口USART发送为00的解决方案

检查接线是否正确检查TX是否为复用推挽输出 3.检查是否将TX和RX引脚重映射为USART功能 在STM32中&#xff0c;每个GPIO引脚可以配置为不同的复用功能&#xff0c;例如UART、SPI、I2C等。具体来说&#xff0c;GPIO_PinAFConfig函数用于配置GPIO引脚的复用功能。它的参数包括GPIO…