【SpringCloud】Nacos

Nacos简介

2018年6月,Eureka 2.0宣布闭源(但1.X版本仍然活跃),同年7月,阿里Nacos宣布开源,并迅速成为国内开发者关注的焦点。作为Eureka的替代品,Nacos目前已经成为国内开发者的首选。

Nacos(Dynamic Naming and Configuration Service)最初开源时,选择将内部的三个产品(Configserver非持久注册中心,VIPServer持久化注册中心,Diamond配置中心)合并并统一开源。其定位为一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。因此,Nacos被认为是一个注册中心组件,但它不仅限于此功能。

截至目前,Nacos几乎支持所有的主流语言,如Java、Go、C++、Node.js、Python、Scala等。

Nacos是Spring Cloud Alibaba的组件,而Spring Cloud Alibaba遵循Spring Cloud定义的服务注册和发现规范。因此,使用Nacos和使用Eureka对于微服务并没有太大区别。

主要差异在于:

Eureka需要单独搭建一个服务,而Nacos不需要自行搭建服务,其组件已经预先准备好,只需启动即可。
相应的依赖和配置略有不同。


Nacos安装 

本文使用的是单机安装。download.fastgit.orgicon-default.png?t=N7T8https://download.fastgit.org/alibaba/nacos/releases/download/2.2.3/nacos-server-2.2.3.zip把链接放到迅雷上下载会比较快。本文使用的是2.2.3

压缩包的内容如下:

Windows安装

把下载后的安装包解压缩到任何一个没有中文的文件夹下即可。

修改启动方式

nacos默认启动方式是集群,如果不是,需要修改成单机模式。

用任意文本编辑器打开bin下的startup.cmd。

把set MODE="cluster" 改成 set MODE="standalone"

启动nacos

进入bin目录双击startup.cmd即可。

如果点击无反应,注意一下是否配置了jdk的环境变量。

访问 127.0.0.1:8848/nacos 出现以下界面就成功了。

Linux安装

解压安装包

把下载的安装包解压到某个目录下。

修改启动方式

同Windows

启动nacos

#进入nacos/bin目录下# CentOS命令
sh startup.sh -m standalone# Ubuntu命令
bash startup.sh -m standalone

输入IP:8848\nacos访问(记得在防火墙打开端口) 

常见问题

  • 主机上都要有jdk运行,版本大于等于8。Windows中还要添加到环境变量中。
  • 报错日志在nacos/logs/nacos.log下
  • 端口号冲突。可能会与8848有冲突,要么杀死8848的进程,要么在配置文件中修改端口号,在conf目录下的application.properties中的server.port

Nacos简单使用

按照http://t.csdnimg.cn/ahirj 基础来开始Nacos的使用。

引入依赖

Spring Cloud Alibaba 与 Spring Cloud的版本要对应上。具体参考下面的文档。版本发布说明 | https://sca.aliyun.com

在父项目的pom文件的 <properties> 部分指定Spring Cloud Alibaba版本

<spring-cloud-alibaba.version>2022.0.0.0-RC2</spring-cloud-alibaba.version>

同时在 dependencies 部分引入依赖

            <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency>

完整父项目pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>spring-cloud-nacos</artifactId><version>1.0-SNAPSHOT</version><modules><module>order-service</module><module>product-service</module></modules><packaging>pom</packaging><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.6</version><relativePath/></parent><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><java.version>17</java.version><mybatis.version>3.0.3</mybatis.version><mysql.version>8.0.33</mysql.version><spring-cloud.version>2022.0.3</spring-cloud.version><spring-cloud-alibaba.version>2022.0.0.0-RC2</spring-cloud-alibaba.version></properties><dependencies><dependency><!-- 使用lombok基本都会使用到,所以直接引入到项目,被子项目继承 --><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis.version}</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>${mysql.version}</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter-test</artifactId><version>${mybatis.version}</version><scope>test</scope></dependency></dependencies></dependencyManagement></project>

在order-service和product-service中引入nacos依赖

也把LoadBalancer也也引用

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

配置地址

分别在两个服务的配置文件中添加上服务名和nacos的地址。

spring:application:name: product-servicecloud:nacos:discovery:server-addr: 127.0.0.1:8848
spring:application:name: order-servicecloud:nacos:discovery:server-addr: 127.0.0.1:8848

远程调用

修改IP为项目名 + 为restTemplate 添加负载均衡注解

import com.demo.order.mapper.OrderMapper;
import com.demo.order.model.OrderInfo;
import com.demo.order.model.ProductInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;@Service
public class OrderService {@Autowiredprivate OrderMapper orderMapper;@Autowiredprivate RestTemplate restTemplate;public OrderInfo selectOrderById(Integer orderId){OrderInfo orderInfo = orderMapper.selectOrderById(orderId);
//        String url = "http://127.0.0.1:8350/product/"+ orderInfo.getProductId();String url = "http://product-service/product/"+ orderInfo.getProductId();ProductInfo productInfo = restTemplate.getForObject(url, ProductInfo.class);orderInfo.setProductInfo(productInfo);return orderInfo;}
}
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;@Configuration
public class BeanConfig {@LoadBalanced@Beanpublic RestTemplate restTemplate(){return new RestTemplate();}
}

启动服务

可以看到两个服务都注册上去了。

也能调用成功。

启动多服务

启动多个商品服务测试负载均衡


Nacos负载均衡

在生产环境中,由于环境相对恶劣,我们需要对服务的流量进行更加精细的控制。Nacos 支持多种负载均衡策略,包括:权重、同机房、同地域、同环境。

服务下线

当节点上的某个接口性能较差时,我们可以对该节点进行下线处理。

再次查看请求日志。

可以看到下线的服务没有收到任何请求。

点击上线后又能收到请求。


权重配置

可以给每个服务分配不同的权重。这样它们就会按照不同的权重收到不同数量的请求。默认每个都是1,几率都是相同的。

修改权重时可能会报错。

caused: errCode: 500, errMsg: do metadata operation failed ;caused:
com.alibaba.nacos.consistency.exception.ConsistencyException: The Raft Group
[naming_instance_metadata] did not find the Leader node;caused: The Raft Group
[naming_instance_metadata] did not find the Leader node;

如果报上面的错误,解决方案:删除nacos根目录/data/protocol文件夹即可。只需要删除protocol文件夹。

Nacos 采用 Raft 算法来计算 Leader,并且会记录前一次启动的集群地址。当服务器 IP 改变时,会导致 Raft 记录的集群地址失效,进而导致选 Leader 出现问题。(网络环境发生变化时,IP 地址也会发生变化)

开启Nacos负载均衡策略

由于 Spring Cloud LoadBalance 组件自身有负载均衡配置方式,所以不支持 Nacos 的权重属性配置。我们需要开启 Nacos 的负载均衡策略,让权重配置生效。在目前的两个服务下的配置文件中添加下面的配置即可。

spring:cloud:loadbalancer:nacos:enabled: true

同集群访问优先

Nacos把同一个机房内的实例,划分为一个集群。所以同集群优先访问,在一定程度上也可以理解为同机房优先访问。

微服务架构中,一个服务通常有多个实例共同提供服务,这些实例可以部署在不同的机器上,这些机器可以分布在不同的机房。

在微服务访问中,应该尽量访问同机房的实例。只有当本机房内的实例不可用时,才应该访问其他机房的实例。举例来说,假设 order-service 部署在上海机房,而 product-service 在北京和上海都有实例,我们希望优先访问上海机房的实例。只有当上海机房没有可用实例或实例不可用时,才会去访问北京机房的实例。一般情况下,由于同一个机房的机器属于同一个局域网,因此局域网访问速度会更快一些。

配置文件

在product-service的配置文件中给集群起个名字SHANGHAI,表示在上海

server:port: 8350
spring:application:name: product-servicecloud:loadbalancer:nacos:enabled: truenacos:discovery:server-addr: 127.0.0.1:8848cluster-name: SHANHAI

同时在启动两个product-service,都起名为BEIJING

-Dserver.port=8351 -Dspring.cloud.nacos.discovery.cluster-name=BEIJING 

给order-service集群配置名称为SHANGHAI。

开启Nacos负载均衡策略

和上面的权重配置部分一样,同样要开启Nacos负载均衡在配置文件中,并且把权重都设置成1。

观察日志

访问接口,观察日志,可以看到只有SHANGHAI的机器收到了请求

当把product-service的SHANGHAI服务下线后,BEIJING的才能收到。


Nacos健康检查

Nacos作为注册中心,需要感知服务的健康状态,才能为服务方提供良好的服务。Nacos提供了两种检测机制。

  • 客户端主动上报:客户端通过心跳上报方式告知服务端(nacos注册中心)健康状态,默认心跳间隔为5秒;nacos会在超过15秒未收到心跳后将实例设置为不健康状态,超过30秒将实例删除。
  • 服务器端反向探测:Nacos主动探知客户端健康状态,默认间隔为20秒。健康检查失败后实例会被标记为不健康,不会被立即删除。

Nacos 中的健康检查机制不能主动设置,健康检查机制是和 Nacos 的服务实例类型强相关的。


Nacos服务实例类型

Nacos的服务实例(注册的节点)分为临时实例非临时实例

  • 临时实例:如果实例宕机超过一定时间,会从服务列表剔除,默认类型。
  • 非临时实例:如果实例宕机,不会从服务列表剔除,也可以叫永久实例。

Nacos对临时实例,采取的是客户端主动上报机制,对非临时实例,采取服务器端反向探测机制。


设置服务类型

在配置文件中设置

spring:cloud:nacos:discovery:ephemeral: false # 非临时实例

停止服务后,观察控制台。

不健康也不会下线


修改实例类型

修改了服务的实例类型后,重启服务后会报错。

解决方案:

1. 停止nacos

2. 删除 nacos根目录/data/protocol/raft目录

原因:

Nacos会记录每个服务实例的IP和端口号。当发现IP和端口都没有发生变化时,Nacos不允许一个服务实例类型发生变化,比如从临时实例变为非临时实例,或者从非临时实例变成临时实例。


Nacos健康检查出错

参考下面的内容:

如何解决Nacos持久化实例HTTP/TCP的健康检查不通过问题_微服务引擎(MSE)-阿里云帮助中心 (aliyun.com)


Nacos环境隔离

在企业开发中,一个服务会分为开发环境、测试环境和生产环境:

开发环境:开发人员用于开发的服务器,是最基础的环境。一般日志级别设置较低,可能会开启一些调试信息。
测试环境:测试人员用来进行测试的服务器,是开发环境到生产环境的过渡环境。
生产环境:正式提供对外服务的环境,通常关闭调试信息。
通常情况下,这几个环境是不能互相通信的。Nacos提供了Namespace(命名空间)来实现环境的隔离。不同的Namespace的服务不可见

默认情况下,所有的服务都在同一个名为public的Namespace下。


创建Namespace

配置Namespace

首先复制Namespace的ID

然后在配置文件中设置

spring:cloud:nacos:discovery:namespace: 0299dce3-8af2-4e1b-b697-02e473f800ce

这两个服务之间是无法通信的。


Nacos配置中心

当前项目的配置都在代码中,会存在以下问题:

  • 配置文件修改时,服务需要重新部署:微服务架构中,一个服务可能有成百个实例,挨个部署比较麻烦,且容易出错。
  • 多人开发时,配置文件可能需要经常修改:使用同一个配置文件容易冲突。

配置中心就是对这些配置项进行统一管理。通过配置中心,可以集中查看、修改和删除配置,无需再逐个修改配置文件。提高效率的同时,也降低了出错的风险。


添加配置

配置管理的命名空间和服务列表的命名空间是隔离的,两个是分别设置的。默认是public。
服务管理命名空间配置 ≠ 配置管理的命名空间

获取配置

当我们配置完之后,需要在项目中获取配置。

引入依赖

在product-service的pom中引入以下依赖

        <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!-- SpringCloud 2020.*之后版本需要引⼊bootstrap--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency>

配置bootstrap

在微服务启动前,需要先获取Nacos中的配置,并与 application.yml 配置合并。

在微服务运行之前,Nacos 要求必须使用 bootstrap.properties 配置文件来配置 Nacos Server 地址。

配置bootstrap.properties或者bootstrap.yml文件。

spring:application:# 必须和 Data ID 一致name: product-servicecloud:nacos:config:# 配置中心地址server-addr: 127.0.0.1:8848

注意区别:

Nacos 配置中心: spring.cloud.nacos.config.server-addr
Nacos 注册中心: spring.cloud.nacos.discovery.server-addr

获取动态配置

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;// 配置自动刷新注解
@RefreshScope
@RestController
public class NacosController {// 获取配置项@Value("${nacos.config}")private String nacosConfg;@RequestMapping("/getConfig")public String getConfig(){return "从Nacos获取配置项nacos.config:" + nacosConfg;}
}

 

设置命名空间

Nacos配置管理的命名空间和服务列表的命名空间是分别设置的。默认都是public。

Nacos配置命名空间在bootstrap.yml中进行配置。

spring:cloud:nacos:config:namespace: 5746f3e7-4c63-4f27-a1b9-79185768308b

设置命名空间后,项目启动时会在指定的命名空间下找对应的配置项。

Data ID

完整格式如下

${prefix}-${spring.profiles.active}.${file-extension}

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

读取的优先级从上往下依次变低

在bootstrap.yml添加

spring:profiles:active: dev

启动日志如下:


打包部署

使用nacos配置中心

product-service使用了nacos的配置中心,需要做以下处理

在product-service的pom文件中添加

    <profiles><profile><id>dev</id><properties><profile.name>dev</profile.name></properties></profile><profile><id>prod</id><properties><profile.name>prod</profile.name></properties></profile></profiles>

让bootstrap动态的读取这个文件,但是bootstrap不能直接读取maven中的配置项。所以还需要再bulid中添加下面能都读取maven打包时加载的静态文件。

        <resources><resource><directory>src/main/resources</directory><filtering>true</filtering><includes><include>**/**</include></includes></resource></resources>

 

未使用nacos配置中心

order-service没有使用nacos的配置中心。按照一般的项目打包即可。

同样设置一下prod 和 dev配置文件即可。另外application.yml中保留公共相同的部分,其他两个保留不一样的地方。 

打包

做完上述工作后,选择

先clean,在package即可。最后上传服务器启动即可。

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

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

相关文章

error: ‘CV_YUV2BGR_UYVY‘ was not declared in this scope

遇到这个问题时&#xff0c;按照如下修改可解决问题。 //cv::cvtColor(yuvImg, rgbImg, CV_YUV2BGR_UYVY);cv::cvtColor(yuvImg, rgbImg, cv::COLOR_YUV2RGB_UYVY);

浅析Vite本地构建原理

前言 随着Vue3的逐渐普及以及Vite的逐渐成熟&#xff0c;我们有必要来了解一下关于vite的本地构建原理。 对于webpack打包的核心流程是通过分析JS文件中引用关系&#xff0c;通过递归得到整个项目的依赖关系&#xff0c;并且对于非JS类型的资源&#xff0c;通过调用对应的loade…

《人人都是产品经理》笔记2:一个需求的奋斗史

一个需求的奋斗史 用户&#xff01;用户&#xff01;为什么会有需求&#xff1f;用户比客户更大以用户为中心的思想&#xff0c;以老板为中心的行动 用户研究方法 需求采集用户需求并不是产品需求&#xff0c;满足需求的三种方式把用户需求转化成产品需求 需求打包 BRD 产品会议…

Docker 搭建 MinIO 对象存储

Docker 搭建 MinIO 对象存储 一、MinIO MinIO 是一个高性能的对象存储服务器&#xff0c;用于构建云存储解决方案。MinIO 允许你存储非结构化数据&#xff08;如图片、视频、日志文件等&#xff09;以对象的形式。MinIO 提供简单的部署选项和易于使用的界面&#xff0c;允许你…

【免费API推荐】:汇总多种免费API接口(12)

欢迎来到幂简集成汇总的多种免费API接口世界&#xff01;我们致力于为开发者和创业者提供一个集成了各种免费API接口的平台。在这里&#xff0c;您可以轻松获取多种免费API接口&#xff0c;涵盖了各种领域的需求&#xff0c;包括天气、地图、社交媒体、专利相关信息等等。我们精…

哪里还能申请免费一年期SSL证书?

SSL证书是网络安全的基石之一&#xff0c;它确保了数据传输的安全性和网站身份的真实性。而申请免费一年期SSL证书&#xff0c;则为广大用户提供了一个经济高效的方式来提升网站的安全性。具体介绍如下&#xff1a; 基于不同服务平台的免费SSL证书申请 FreeSSL&#xff1a;此平…

硬盘监控和分析工具:Smartctl

文章目录 1. 概述2. 安装3. 使用4. smartctl属性信息介绍 1. 概述 Smartctl&#xff08;S.M.A.R.T 自监控&#xff0c;分析和报告技术&#xff09;是类Unix系统下实施SMART任务命令行套件或工具&#xff0c;它用于打印SMART自检和错误日志&#xff0c;启用并禁用SMRAT自动检测…

【MySQL】索引的原理及其使用

文章目录 什么叫索引减少磁盘IO次数缓存池(Buffer Pool&#xff09;MySQL的页页内目录页目录 正确理解索引结构为什么Innodb的索引是B树结构各种存储引擎支持的索引聚簇索引和非聚簇索引索引类型 关于索引的操作创建主键索引唯一索引的创建普通索引的创建查看索引删除索引 什么…

APP IOS

APP IOS苹果源生应用程序 APP Android-CSDN博客

nexus配置问题

错误信息&#xff1a; npm ERR! code E401 npm ERR! Unable to authenticate, need: BASIC realm"Sonatype Nexus Repository Manager"解决办法一&#xff1a; npm login --registryhttp://192.168.52.128:8081/repository/npm-repo 输入 用户名 密码 邮箱完成后会…

无线鼠标键盘怎么连接电脑?4种简单方法

在当今科技发展日新月异的时代&#xff0c;无线鼠标和键盘已经成为许多人日常工作和娱乐中的重要配件。与传统有线设备相比&#xff0c;无线鼠标和键盘具有更大的灵活性和便利性&#xff0c;让我们能够更自由地操作电脑&#xff0c;而不受线缆的束缚。 然而&#xff0c;对于一…

Tesseract-OCR 5.0LSTM训练

准备工作 1.安装tesseract5.0版本 2.配置tesserac环境变量 3.jTessBoxEditor(需要java环境) 很多博客已有详细教程&#xff0c;不再赘述&#xff0c;本文以训练为主 最终文件目录: --tif 需要训练的tif文件 --lstmf 后文会讲到生成的方式 --txt 后文会讲到生成的方式 --box 后文…

Swift Combine — Notification、URLSession、Timer等Publisher的理解与使用

Notification Publisher 在Swift的Combine框架中&#xff0c;可以使用NotificationCenter.Publisher来创建一个能够订阅和接收通知的Publisher。 // 创建一个订阅通知的Publisher let notificationPublisher NotificationCenter.default.publisher(for: Notification.Name(&…

OpenTenBase入门

什么是OpenTenBase OpenTenBase 是一个提供写可靠性&#xff0c;多主节点数据同步的关系数据库集群平台。你可以将 OpenTenBase 配置一台或者多台主机上&#xff0c; OpenTenBase 数据存储在多台物理主机上面。数据表的存储有两种方式&#xff0c; 分别是 distributed 或者 re…

让我来告诉初学者到底什么叫嵌入式系统?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;我们在刚刚开始学习电子学…

通过git命令查询某个用户提交信息

要查询某个用户通过 Git 提交了多少行代码&#xff0c;可以使用以下步骤和命令来实现。这些命令将统计该用户的添加和删除的代码行数。 1、切换到你的 Git 仓库&#xff1a; cd /path/to/your/repositorygit命令结果&#xff1a; 2、查询所有用户&#xff1a; git log --pr…

国外开源字典集(wordlists)

Assetnote Wordlists Wordlists that are up to date and effective against the most popular technologies on the internet.https://wordlists.assetnote.io/

opencv c++ 检测图像尺寸大小,标注轮廓

1. 项目背景 本项目旨在开发一个图像处理程序&#xff0c;通过使用计算机视觉技术&#xff0c;能够自动检测图像中物体的尺寸并进行分类。项目利用了开源的计算机视觉库 OpenCV&#xff0c;实现了图像的灰度处理、二值化、轮廓检测、边界框绘制以及尺寸分类等功能。通过这些功…

在智星云租用算力时,如何选择适合的GPU?

智星云平台分配GPU、CPU、内存的机制为&#xff1a;按租用的GPU数量成比例分配CPU和内存&#xff0c;算力市场显示的CPU和内存均为每GPU分配的CPU和内存&#xff0c;如果租用两块GPU&#xff0c;那么CPU和内存就x2。此外GPU非共享&#xff0c;每个实例对GPU是独占的。 一. CPU…

NSSCTF-Web题目12

目录 [SWPUCTF 2021 新生赛]finalrce 1、题目 2、知识点 3、思路 [UUCTF 2022 新生赛]ez_rce 1、题目 2、知识点 3、思路 [羊城杯 2020]easycon 1、题目 2、知识点 3、思路 [SWPUCTF 2021 新生赛]finalrce 1、题目 2、知识点 命令执行&#xff0c;tee命令 3、思路…