当前位置: 首页 > news >正文

5. 【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--微服务基础工具与技术--Nacos

一、什么是Nacos

Nacos 是阿里巴巴开源的一款云原生应用基础设施,它旨在简化微服务架构中服务治理和配置管理的复杂性。通过 Nacos,服务在启动时可以自动注册,而其他服务则可以通过名称来查找并访问这些注册好的实例。同时,Nacos 内置了实时健康检查机制,能够监控各个服务实例的状态,确保只有健康的服务节点能够处理请求,从而提升整个系统的可靠性和稳定性。此外,Nacos 还提供了一个集中化的配置管理平台,使得应用能够在运行时动态更新配置而无需重启,这不仅大大降低了运维成本,也避免了因硬编码或分布式文件更新而带来的各种问题。得益于其与 Kubernetes、Spring Cloud、Dubbo 等流行框架的无缝集成,Nacos 为构建云原生和微服务架构提供了一整套简单而全面的解决方案。

二、启动Nacos

下面,我们来启动Naocs。启动Nacos前我们在官网下载Nacos压缩包,截至文章发布时Nacos的最新版是2.5.0,我们就使用这个版本来简单的讲解Nacos。
使用前需确保开发环境符合Nacos最低运行要求:

环境配置
JDK/JRE8及以上
CPU1核及以上,支持64位CPU
内存2G及以上
硬盘无最小要求,根据保留日志自行调整
操作系统Linux, Mac OS X, Windows

Tip:Nacos 2.50下载地址: https://download.nacos.io/nacos-server/nacos-server-2.5.0.zip?spm=5238cd80.2ef5001f.0.0.3f613b7cP0VdIa&file=nacos-server-2.5.0.zip

2.1 Windows 启动Nacos

在 Windows 环境下进入解压后的目录中找到 bin 文件夹。在该目录下,通过双击或在命令行中执行 startup.cmd 脚本(建议使用命令行执行脚本),如果使用命令行执行脚本需附加参数“-m standalone”来启动 Nacos 的单机模式,这时 Nacos 会在默认的 8848 端口启动服务,启动成功后你可以通过浏览器访问 http://localhost:8848/nacos 进行管理和配置。需要注意的是,启动前必须确保系统中已正确配置 JDK 环境变量,以便 Nacos 能够正常运行。

2.2 Linux 启动Nacos

在 Linux 系统上启动 Nacos 的流程与 Windows 类似,进入解压后的目录找到 bin 目录。为了在 Linux 环境下运行脚本,首先确认 startup.sh 文件具有可执行权限,如果没有可通过命令 chmod +x startup.sh 进行赋权。接下来,在终端中执行sh startup.sh -m standalone命令,即可启动 Nacos 的单机模式。启动完成后,Nacos 同样会监听默认的 8848 端口,我们可以通过浏览器访问管理界面。

Tip:如果通过双击startup.cmd 启动Nacos,会出现报错问题,这是因为startup.cmd 中默认设置的是集群模式运行,需要将文件中的MODE="cluster" 改为MODE="standalone",再次双击运行既可。

2.3 开启鉴权

一般情况下我们在开发时,不需要开启鉴权,但是有必要在这里说一下如何开启鉴权。进入Nacos目录下的conf目录,修改application.properties文件。
首先,我们需要配置自定义的用于生成JWT令牌的密钥,自定义密钥时,推荐将配置项设置为Base64编码的字符串,且原始密钥长度不得低于32字符:

nacos.core.auth.default.token.secret.key=生成JWT令牌的密钥

接着,配置用于服务端之间请求的身份识别信息:

nacos.core.auth.server.identity.key=服务器身份验证的键
nacos.core.auth.server.identity.value=服务器身份验证的值

最后,我i们就可以开启鉴权了:

# 使用哪种认证机制来进行身份验证和授权
nacos.core.auth.system.type=nacos
# 启用身份认证
nacos.core.auth.enabled=true

Tip:Nacos 的认证类型分为:内置认证nacos、OAuth2认证oauth2以及自定义认证custom

三、使用Nacos

3.1 服务注册与发现
  1. 什么是服务注册与发现
    服务发现和注册是微服务架构中的关键机制,用于动态管理和协调服务实例之间的通信。服务注册涉及将服务实例的信息(如名称、地址、端口)注册到一个服务注册中心。服务实例在启动时会向注册中心注册,并定期发送心跳信号以保持注册状态。
    服务发现则是指客户端或其他服务通过服务注册中心查找和访问服务实例的过程。服务发现有两种主要模式:客户端发现和服务端发现。在客户端发现模式中,客户端直接与注册中心通信获取服务实例信息;在服务端发现模式中,负载均衡器或API网关负责从注册中心获取服务信息并转发请求。
    这两者的结合实现了服务的动态扩展和高可用性,简化了微服务之间的通信配置,是构建大规模分布式系统的重要机制。

  2. 项目中使用服务发现与注册
    实现服务注册与发现,我们需要在项目中安装nacos-sdk-csharp.aspnetcore
    首先,我们新建项目 NacosDemo,在项目中增加两个Web Api 服务GoodsApiOrderApi,在这个项目中引入nacos-sdk-csharp.aspnetcore

    Tip:注意:不要安装带unoffical的nuget包,带unoffical包支支持Nacos 1.x。

    接着,在Program 类中新增服务注册的代码。

    // 将服务注册到nacos
    builder.Services.AddNacosAspNet(builder.Configuration);
    

    然后,我们需要在application.json文件中配置Nacos 服务发现。

    "Nacos": {"ServerAddresses": ["http://192.168.116.1:8848"],"Namespace": "learning","ServiceName": "GoodsApi","GroupName": "DEFAULT_GROUP","ClusterName": "DEFAULT","Weight": 100,"Metadata": {"version": "1.0.0"},"username": "nacos","password": "nacos","RegisterEnabled": true,"InstanceEnabled": true,"Ephemeral": true
    }
    

    这个Nacos配置文件包含了服务注册和发现的详细信息。ServerAddresses是Nacos服务器的地址列表,Namespace表示服务所在的命名空间,这里命名为learningServiceName是注册服务的名称,GroupName是服务所属的分组,默认是DEFAULT_GROUPClusterName是服务所属的集群名称,默认是DEFAULTWeight表示服务实例的权重,用于负载均衡,这里设置为100。Metadata包含服务实例的元数据,版本信息为1.0.0usernamepassword是访问Nacos服务器的认证信息。RegisterEnabled表示是否启用服务注册,InstanceEnabled表示服务实例是否可用,Ephemeral表示服务实例是否为临时实例(非持久)。
    在配置中我们将服务设置为了临时实例,这里所说的临时实例是指在服务注册和发现系统中,注册中心不会持久化存储的服务实例。这种实例的信息不会被持久化存储在注册中心的数据库中,当服务实例失效或停止时,注册中心会自动删除该实例的信息,不会保留历史记录。临时实例适用于生命周期较短的服务实例,例如短期运行的批处理任务或临时性服务。如果临时实例在规定时间内未发送心跳信号,注册中心会自动将其移除,确保注册中心只保留当前活跃的服务实例,避免无效实例占用资源。临时实例适用于需要快速启动和停止的服务场景,例如容器化应用的实例管理,支持快速扩展和收缩服务实例数量。
    在上述Nacos配置中我们设置服务的权重为100,这个权重是用于服务实例负载均衡的重要参数。它决定了请求在多个服务实例之间的分配比例。具体来说,权重值越高的实例,被选择处理请求的概率就越大。通过设置不同的权重值,可以实现对服务实例的流量控制,优化系统性能和资源利用。里如,在微服务架构下,如果某个服务实例的硬件配置较高,处理能力较强,可以将其权重设置得更高,以便更多的请求能够分配到该实例,从而提高整体系统的效率。相反,如果某个实例的资源较为有限,则可以降低其权重,减少其负载压力。
    我们还需要在Nacos中新增命名空间,也就是配置中的Namespace。我们访问Nacos的管理界面,切换到命名空间界面,新增命名空间。
    在这里插入图片描述
    接下来我们在GoodsApiOrderApi两个Web Api服务中增加控制器GoodsController OrderController ,在这两个接口新增用来获取商品GetGoods和获取订单GetOrder的Action。其中GetGoods返回服务的Ip、端口号以及商品名,GetOrder通过服务发现,调用GoodsApiGetGoods接口并返回数据。这个流程模拟了订单获取商品信息的流程,很简单但能展示了Nacos服务发现的能力。

    using Microsoft.AspNetCore.Mvc;namespace GoodsApi.Controllers
    {[Route("api/[controller]")][ApiController]public class GoodsController : ControllerBase{[HttpGet][Route("GetGoods")]public string GetGoods(){// 获取服务ip和端口var ip = HttpContext.Connection.LocalIpAddress.MapToIPv4().ToString();var port = HttpContext.Connection.LocalPort;return "Goods Service,服务地址:" + ip + ":" + port+",商品列表:苹果、香蕉、橘子";}}
    }
    
    using Microsoft.AspNetCore.Mvc;
    using Nacos.V2;namespace OrderApi.Controllers;[ApiController]
    [Route("[controller]")]
    public class OrderController : ControllerBase
    {private readonly INacosNamingService _nacosNamingService;public OrderController(INacosNamingService nacosNamingService){_nacosNamingService = nacosNamingService;}[HttpGet][Route("GetOrder")]public  string GetOrder(){var instance = _nacosNamingService.SelectOneHealthyInstance("GoodsApi").Result;if (instance!=null){// 调用GetGoods方法HttpClient client = new HttpClient();var response = client.GetAsync($"http://{instance.Ip}:{instance.Port}/api/Goods/GetGoods").Result;return $"Order Service,调用GoodsApi服务成功,调用GetGoods方法返回数据:{response.Content.ReadAsStringAsync().Result}";}else{return "Order Service,调用GoodsApi服务失败";}}
    }
    

    紧接着,我们启动项目调试代码。进入GohodsApi紧接着,我们启动项目调试代码。进入GoodsApi 接口项目的bin目录,开启两个命令窗口分别执行运行命令,指定不同的端口。同样在OrderApi接口项目的bin目录中执行运行命令。

    dotnet .\GoodsApi.dll --urls=http://localhost:5001/
    dotnet .\GoodsApi.dll --urls=http://localhost:5002/
    dotnet .\OrderApi.dll --urls=http://localhost:5003/
    

    执行上述命令后我们查看Nacos管理界面的服务列表,会看到两个GoodsApi服务和一个OrderApi服务。
    在这里插入图片描述
    最后,我们访问在浏览器中访问http://localhost:5003/order/GetOrder,会看到浏览器显示出了GetOrder中返回的内容,其中包含了GoodsApiGetGoods返回的内容。我们多刷新几次,会发现页面显示的GoodsApi的地址在改变,这说明Nacos 服务发现起了作用。
    在这里插入图片描述
    在这里插入图片描述

3.2 配置中心
  1. 什么是配置中心
    在以往的开发中,我们往往需要将数据库连接字符串这类的配置信息放在application.json文件中,这对于单体应用或服务数量不是很多的微服务应用来说没什么大问题,如果配置需要更新了,我们就直接去服务器上修改就可以,但是对于大型微服务应用来说将配置信息放在application.json中就显得很鸡肋了,每次修改配置信息去服务器上一个服务一个服务改的话是很麻烦的,而且还容易出错。这时我们就需要引入配置中心,配置中心是一种集中管理和分发应用配置的系统。它能够将配置从应用程序代码中分离出来,方便管理和修改。配置中心通常支持动态更新配置,不需要重启服务即可生效,并保障配置的一致性和可靠性。Nacos 就具备配置中心的功能。
  2. 项目中使用配置中心
    首先,我们需要在项目中引入Nacos 配置中心的nuget包nacos-sdk-csharp.extensions.configuration,这个包可以帮我们去监听配置的变化。
    其次,为了演示配置中心的使用,我们在Nacos管理界面的配置页面新增一个数据库配置GoodsDb
    在这里插入图片描述
    在这里插入图片描述
    接着,我们在GoodsApi项目的application.json文件的Nacos节点下增加需要监听的配置。
    "Listeners": [{"Optional":false,"DataId":"GoodsDb","Group":"GoodsGroup"}
    ]
    
    这个配置表示一个监听器列表,包含一个监听器对象,Listeners表示配置监听器的数组,Optional表示监听器是否可选,false表示必需,DataId表示监听的配置项ID,这里是GoodsDbGroup表示配置项所属的组,这里是GoodsGroup,这个监听器用于监控GoodsGroup组中GoodsDb配置项的变化。
    然后,我们在GoodsApi项目中新增一个控制器DbTestController,并在其中编写GetDbConnectionString Action,这个Action中支是回去了数据库连接字符串,并将这个字符串返回给调用方。
    using Microsoft.AspNetCore.Mvc;namespace GoodsApi.Controllers;[ApiController]
    [Route("[controller]")]
    public class DbTestController : ControllerBase
    {/// <summary>/// 配置/// </summary>private IConfiguration _configuration;public DbTestController(IConfiguration configuration){_configuration = configuration;}/// <summary>/// 获取/// </summary>/// <returns></returns>[HttpGet][Route("GetDbConnectionString")]public string GetDbConnectionString(){// 从配置中获取数据库连接字符串return _configuration.GetConnectionString("GoodsDb");}
    } 
    
    最后,我们在浏览器中输入http://localhost:5001/dbtest/GetDbConnectionString即可看到我们在Nacos中配置的数据库链接字符串。这是我们修改Nacos中配置的链接字符串,再次刷新页面显示的连接字符串改变了。
    在这里插入图片描述
    在这里插入图片描述

    TIP:像数据库连接字符串这种在项目启动时就注入进来的配置,如果Nacos对应的配置修改后虽然会自动更新到项目中,但是我们的项目使用的链接字符串还是在启动时注入进来的旧的连接字符串,因此我们需要自己实现更新注入的连接字符串的代码。由于专栏不是专门讲Naocs的,因此在这里就不再讲解如何实现了。

四、总结

本文详细介绍了 Nacos 的概念、安装启动和使用方法,全面展示了 Nacos 在微服务架构中的重要作用。文章首先指出,Nacos 是阿里巴巴开源的云原生应用基础设施,通过自动注册和服务发现机制,使各服务实例能够动态注册、查询并健康检查,从而提升系统的稳定性和可靠性;同时,其集中化的配置管理平台能够让应用在运行时动态更新配置,彻底解决了硬编码或手动修改分布式文件所带来的维护困难和运维成本高的问题,并能与 Kubernetes、Spring Cloud、Dubbo 等流行框架无缝集成。接着,文章介绍了如何获取最新版 Nacos(以 2.5.0 为例),并列举了启动前的系统环境要求,包括 JDK 8 及以上、1 核 CPU、2G 内存等;详细说明了在 Windows 和 Linux 环境下分别如何通过命令行或脚本启动 Nacos 的单机模式,以及如何在启动脚本中调整模式设置。文章还讲解了如何开启鉴权,通过修改配置文件设定 JWT 密钥和服务间身份验证参数,保障访问安全。随后,文中通过一个基于 C# 的示例展示了如何在项目中使用 Nacos 实现服务注册与发现,说明了服务如何通过注册中心实现自动注册、权重路由和负载均衡,从而支持客户端动态调用其他服务;同时,也介绍了如何利用 Nacos 配置中心实现配置的动态管理,通过配置监听机制,使得应用能够实时感知配置变化并更新数据库连接等关键参数。总体来说,文章系统地阐释了 Nacos 如何以简洁而高效的方式实现服务治理与动态配置管理,帮助开发者降低微服务运维复杂度,构建更加稳定、弹性和高效的云原生系统。

相关文章:

5. 【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--微服务基础工具与技术--Nacos

一、什么是Nacos Nacos 是阿里巴巴开源的一款云原生应用基础设施&#xff0c;它旨在简化微服务架构中服务治理和配置管理的复杂性。通过 Nacos&#xff0c;服务在启动时可以自动注册&#xff0c;而其他服务则可以通过名称来查找并访问这些注册好的实例。同时&#xff0c;Nacos…...

【每日关注】科技圈重要动态

时代新动态 2025 年 2 月 12 日科技圈重要动态总结全球 AI 治理新进展巴黎 AI 宣言签署&#xff0c;美英缺席 科技巨头合作与竞争苹果联姻阿里开发中国版AI功能DeepSeek生态持续扩展OpenAI拒绝马斯克收购&#xff0c;矛盾公开化 汽车行业动态小米汽车销量跃居新势力第二比亚迪智…...

【算法】用C++实现A*算法

A*算法的背景与原理 A*(A-Star)算法是一种广泛应用于路径规划和图搜索问题中的启发式搜索算法。它结合了Dijkstra算法的广度优先搜索和贪心最佳优先搜索的优点,通过引入启发式函数来估计从当前节点到目标节点的成本,从而有效地减少搜索空间。A*算法的核心思想是使用一个评…...

细胞计数专题 | LUNA-FX7™新自动对焦算法提高极低细胞浓度下的细胞计数准确性

现代细胞计数仪采用自动化方法&#xff0c;在特定浓度范围内进行细胞计数。其上限受限于在高浓度条件下准确区分细胞边界的能力&#xff0c;而相机视野等因素则决定了下限。在图像中仅包含少量可识别细胞或特征的情况下&#xff0c;自动对焦可能会失效&#xff0c;从而影响细胞…...

记一次Self XSS+CSRF组合利用

视频教程在我主页简介或专栏里 &#xff08;不懂都可以来问我 专栏找我哦&#xff09; 目录&#xff1a;  确认 XSS 漏洞 确认 CSRF 漏洞 这个漏洞是我在应用程序的订阅表单中发现的一个 XSS 漏洞&#xff0c;只能通过 POST 请求进行利用。通常情况下&#xff0c;基于 POST 的…...

JVM 类加载子系统在干什么?

JVM 类加载子系统是什么&#xff1f; 类加载子系统&#xff08;Class Loader Subsystem&#xff09;是 JVM 负责 加载、链接和初始化 .class 文件的组件。它的主要作用是将字节码文件加载进 JVM 并准备执行。 类加载器&#xff08;ClassLoader&#xff09;是 字节码的搬运工&…...

Golang轻松实现消息模板变量替换:text/template

text/template 是 Go 语言标准库中的一个包&#xff0c;用于生成文本输出。它通过解析模板并根据给定的数据执行模板来生成最终的文本。text/template 提供了强大的模板引擎&#xff0c;支持条件判断、循环、变量替换等功能。 基本概念 模板&#xff1a;模板是一个文本文件或…...

DeepSeek模型R1服务器繁忙,怎么解决?

在当今科技飞速发展的时代&#xff0c;人工智能领域不断涌现出令人瞩目的创新成果&#xff0c;其中DeepSeek模型无疑成为了众多关注焦点。它凭借着先进的技术和卓越的性能&#xff0c;在行业内掀起了一股热潮&#xff0c;吸引了无数目光。然而&#xff0c;如同许多前沿技术在发…...

《探秘Windows 10驱动开发:从入门到实战》

《探秘Windows 10驱动开发:从入门到实战》 为什么要在 Windows 10 编写驱动程序 在当今数字化时代,计算机已成为人们生活和工作中不可或缺的工具 ,而 Windows 10 作为一款广泛使用的操作系统,其生态系统的丰富性和复杂性不言而喻。在这个庞大的体系中,驱动程序扮演着举足…...

Golang的容器化部署流程

# Golang的容器化部署流程 什么是容器化部署 容器化部署是将应用程序、运行环境及其依赖项打包在一起&#xff0c;以便可以在任何环境中快速、一致地运行的技术。它提供了更高效的资源利用、更便捷的部署和更稳定的环境。 的容器化支持 天生支持跨平台编译&#xff0c;使得将Go…...

计算机网络,大白话

好嘞&#xff0c;咱就从头到尾&#xff0c;给你好好说道说道计算机网络里这些“门门道道”的概念&#xff1a; 1. 网络&#xff08;Network&#xff09; 啥是网络&#xff1f; 你可以把网络想象成一个“大Party”&#xff0c;大家&#xff08;设备&#xff09;聚在一起&#…...

智慧城市V4系统小程序源码独立版全插件全开源

智慧城市V4系统小程序源码&#xff1a;多城市代理同城信息服务的全域解决方案 在数字化浪潮的推动下&#xff0c;智慧城市已成为全球发展的核心战略。作为这一领域的革新者&#xff0c;智慧城市V4系统小程序源码凭借其多城市代理同城信息服务能力与多商家营销功能&#xff0c;…...

SpringBoot分布式应用程序和数据库在物理位置分配上、路由上和数量上的最佳实践是什么?

在设计和部署Spring Boot分布式应用程序时&#xff0c;物理位置分配、路由和数据库数量的最佳实践对系统性能、可用性和可维护性至关重要。以下是相关建议&#xff1a; 1. 物理位置分配 最佳实践&#xff1a; 靠近用户部署&#xff1a;将应用实例部署在靠近用户的数据中心&a…...

【LeetCode Hot100 哈希】两数之和、字母异位词分组、最长连续序列

哈希 1. 两数之和题目描述解题思路步骤&#xff1a;时间复杂度&#xff1a;空间复杂度&#xff1a; 代码实现 2. 字母异位词分组题目描述解题思路步骤&#xff1a;时间复杂度&#xff1a;空间复杂度&#xff1a; 代码实现 3. 最长连续序列题目描述解题思路关键思路&#xff1a;…...

Jenkins 通过 Execute Shell 执行 shell 脚本 七

Jenkins 通过 Execute Shell 执行 shell 脚本 七 一、创建 .sh 文件 项目目录下新建 .sh 文件 jenkins-script\shell\ci_android_master.sh添加 Execute Shell 模块 在 Command 中添加 # 获取 .sh 路径 CI_ANDROID_MASTER_PATH"${WORKSPACE}/jenkins-script/shell/…...

无人机常见的定位方式

目录 1、卫星导航定位 2、基于地面基站定位 3、惯性导航定位 4、视觉定位 5、其他定位技术 目前无人机的定位方式主要有以下几种&#xff1a; 1、卫星导航定位 GPS 定位&#xff1a;全球定位系统是应用最广泛的卫星导航系统&#xff0c;无人机上的 GPS 接收器接收至少四…...

【Git版本控制器】:第一弹——Git初识,Git安装,创建本地仓库,初始化本地仓库,配置config用户名,邮箱信息

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux网络编程 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 ​ 相关笔记&#xff1a; https://blog.csdn.net/dj…...

使用 EDOT 监测由 OpenAI 提供支持的 Python、Node.js 和 Java 应用程序

作者&#xff1a;来自 Elastic Adrian Cole Elastic 很自豪地在我们的 Python、Node.js 和 Java EDOT SDK 中引入了 OpenAI 支持。它们为使用 OpenAI 兼容服务的应用程序添加日志、指标和跟踪&#xff0c;而无需任何代码更改。 介绍 去年&#xff0c;我们宣布了 OpenTelemetry…...

基于 STM32 的病房监控系统

标题:基于 STM32 的病房监控系统 内容:1.摘要 基于 STM32 的病房监控系统摘要&#xff1a;本系统采用 STM32 微控制器作为核心&#xff0c;通过传感器实时监测病房内的环境参数&#xff0c;如温度、湿度、光照等&#xff0c;并将数据上传至云端服务器。医护人员可以通过手机或…...

线上HBase client返回超时异常分析 HBase callTimeout=60000

问题现象 HBase client直接返回超时异常 HBase callTimeout=60000, callDuration=60301: row ‘12649160863966c2790195059018040900010003320’ on table ‘Z_UPA’ at region=Z_UPA,1213d1a56,1184027415643. ba7224f83dbb09591a74b7059f17., hostname=abcd,60020,891863950…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

MySQL 主从同步异常处理

阅读原文&#xff1a;https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主&#xff0c;遇到的这个错误&#xff1a; Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一&#xff0c;通常表示&#xff…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving

地址&#xff1a;LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂&#xff0c;正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...

vue3 daterange正则踩坑

<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...

五子棋测试用例

一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏&#xff0c;有着深厚的文化底蕴。通过将五子棋制作成网页游戏&#xff0c;可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家&#xff0c;都可以通过网页五子棋感受到东方棋类…...

书籍“之“字形打印矩阵(8)0609

题目 给定一个矩阵matrix&#xff0c;按照"之"字形的方式打印这个矩阵&#xff0c;例如&#xff1a; 1 2 3 4 5 6 7 8 9 10 11 12 ”之“字形打印的结果为&#xff1a;1&#xff0c;…...