『Nacos』 入门教程

news2024/11/29 8:56:27

前言

本文为 Nacos 平台快速入门教程,本文将会使用通俗易懂的语言手把手带您了解、使用 Nacos 平台,适合未接触过 Nacos 的初学者

官方手册:Nacos | Nacos

官方仓库:alibaba/nacos

版本:2.X

本文示例代码仓库:ReturnTmp/nacos-demo (github.com)

Nacos | Nacos

介绍

Nacos 阿里巴巴推出来的开源项目,是更易于构建云原生应用动态服务发现、配置管理和服务管理平台

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

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

下面将会对比常用注册中心和配置中心,并且向您介绍注册中心和配置中心的概念

注:如果您只想要快速开始,可以直接跳转到 快速开始 章节,跳过下面繁琐的概念

注册中心

常见注册中心组件

注册中心主要分为三种角色:

  • 服务提供者(RPC Server):在启动时,向 Registry 注册自身服务,并向 Registry 定期发送心跳汇报存活状态。
  • 服务消费者(RPC Client):在启动时,向 Registry 订阅服务,把 Registry 返回的服务节点列表缓存在本地内存中,并与 RPC Sever 建立连接。
  • 服务注册中心(Registry):用于保存 RPC Server 的注册信息,当 RPC Server 节点发生变更时,Registry 会同步变更,RPC Client 感知后会刷新本地 内存中缓存的服务节点列表。

最后,RPC Client 从本地缓存的服务节点列表中,基于负载均衡算法选择一台 RPC Sever 发起调用。

常用注册中心:Eureka,Zookeeper(不推荐),Nacos,Consul,ETCD

配置中心

为什么使用配置中心

  • 配置实时生效:传统的静态配置方式要想修改某个配置只能修改之后重新发布应用,要实现动态性,可以选择使用数据库,通过定时轮询访问数据库来感知配置的变化。轮询频率低感知配置变化的延时就长,轮询频率高,感知配置变化的延时就短,但比较损耗性能,需要在实时性和性能之间做折中。配置中心专门针对这个业务场景,兼顾实时性和一致性来管理动态配置
  • 配置管理流程:配置的权限管控、灰度发布、版本管理、格式检验和安全配置等一系列的配置管理相关的特性,也是配置中心不可获取的一部分;
  • 分布式场景:随着采用分布式的开发模式,项目之间的相互引用随着服务的不断增多,相互之间的调用复杂度成指数升高,每次投产或者上线新的项目时苦不堪言,需要引用配置中心治理

配置中心支持功能

  • 灰度发布:配置的灰度发布是配置中心比较重要的功能,当配置的变更影响比较大的时候,需要先在部分应用实例中验证配置的变更是否符合预期,然后再推送到所有应用实例。
  • 权限管理:配置的变更和代码变更都是对应用运行逻辑的改变,重要的配置变更常常会带来核弹的效果,对于配置变更的权限管控和审计能力同样是配置中心重要的功能。
  • 版本管理&回滚:当配置变更不符合预期的时候,需要根据配置的发布版本进行回滚。
  • 配置格式校验:应用的配置数据存储在配置中心一般都会以一种配置格式存储,比如Properties、Json、Yaml等,如果配置格式错误,会导致客户端解析配置失败引起生产故障,配置中心对配置的格式校验能够有效防止人为错误操作的发生,是配置中心核心功能中的刚需。
  • 监听查询:当排查问题或者进行统计的时候,需要知道一个配置被哪些应用实例使用到,以及一个实例使用到了哪些配置。
  • 多环境:在实际生产中,配置中心常常需要涉及多环境或者多集群,业务在开发的时候可以将开发环境和生产环境分开,或者根据不同的业务线存在多个生产环境。如果各个环境之间的相互影响比较小(开发环境影响到生产环境稳定性),配置中心可以通过逻辑隔离的方式支持多环境。
  • 多集群:当对稳定性要求比较高,不允许各个环境相互影响的时候,需要将多个环境通过多集群的方式进行物理隔离。

理论上来说,只要能作为分布式存储的服务都作为配置中心,比如说 Zookeeper 和 ETCD,但是由于这两个工具没有方便的UI管理工具,且缺乏权限、审核、灰度发布、审核机制等,且通常定义为服务注册中心,因此不优先考虑

常用配置中心主要有:Disconf、Spring Cloud Config、Apollo 和 Nacos

快速开始

官方对应文档:Nacos 快速开始 | Nacos

安装

本次博主将会使用 Windows 系统进行演示,Linux 系统用户可以直接参考 Windows 安装流程

注:您的机器配置至少需要 2C4G 60G

因为 Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行 Nacos,还需要为此配置 Maven环境,请确保是在以下版本环境中安装使用

  1. 64 bit OS,支持 Linux/Unix/Mac/Windows
  2. 64 bit JDK 1.8+;下载 & 配置
  3. Maven 3.2.x+;下载 & 配置

下载

我们可以通过源码和发行包两种方式来获取 Nacos,本次将会使用源码的形式获取安装包

git clone https://github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U  
# Windows
dir distribution/target/
# Linux
ls -al distribution/target/

# 改变 $version 为真实名称
cd distribution/target/nacos-server-$version/nacos/bin
# 博主实际命令
cd distribution/target/nacos-server-2.3.0-BETA/nacos/bin

命令执行可能出现如下问题

上面的 mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U 命令,在 CMD 命令行环境是没问题的,但是在 PowerShell 会出现 Unknown lifecycle phase ".test.skip=true". 问题

PowerShell 中应该替换为如下命令

mvn -Prelease-nacos '-Dmaven.test.skip=true' clean install -U  

配置

注:在2.2.0.1和2.2.1版本时,必须执行此变更,否则无法启动;其他版本为建议设置

修改conf目录下的application.properties文件。

设置其中的nacos.core.auth.plugin.nacos.token.secret.key值,详情可查看鉴权-自定义密钥.

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

启动

本次演示将会使用单机模式 / 非集群模式运行 Nacos

Windows

startup.cmd -m standalone

Linux/Unix/Mac

sh startup.sh -m standalone

如果您是 ubuntu 系统或运行脚本报错提示,请执行如下脚本

bash startup.sh -m standalone

关闭

# Windows
shutdown.cmd
# Linux/Unix/Mac
sh shutdown.sh

服务注册&发现和配置管理

服务注册
curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'
服务发现
curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName'
发布配置
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld"
获取配置
curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"

访问

启动服务之后我们可以访问地址:http://127.0.0.1:8848/nacos

用户名 / 密码:nacos/nacos

注:我这里没有鉴权,所以直接跳过登录,建议大家配置鉴权

image-20231109164730548

实战

下面我们将会以分布式项目的形式,手把手带您了解 Nacos 在微服务架构中的实际应用

创建父项目

微服务中的分布式项目都会分为多个模块,构成父工程子工程的关系

我们需要使用 IDEA 创建父项目 nacos-demo

image-20231109192132993

创建之后可以删除文件夹 src 毕竟对于父工程基本不需要,然后我们看父工程的 pom.xml(重点看注释)

初始创建的 pom.xml

<?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>nacos-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

</project>

注:上面 中 SNAPSHOT 指的的快照版本,代表当前开发版本,区别于不同版本的就是 Maven 构建的时候都会优先查看远程是否修改,然后决定拉取,而正式版本哪怕远程已经修改,也会直接使用本地版本,而不会从远程拉取

修改之后的 pom.xml

<?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>nacos-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--父工程的打包方式必须为pom-->
    <packaging>pom</packaging>

    <!--子工程-->
    <modules>
        <module>nacos-provider</module>
    </modules>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <lombok.version>1.16.18</lombok.version>
    </properties>

    <!--依赖管理-->
    <dependencyManagement>
        <dependencies>
            <!--spring boot 2.2.2-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.2.2.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--spring cloud Hoxton.SR1-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--spring cloud alibaba 2.1.0.RELEASE-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
                <optional>true</optional>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.2.6.RELEASE</version>
                <configuration>
                    <fork>true</fork>
                    <addResources>true</addResources>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

修改完之后重新构建 Maven 即可

这里面的 dependencyManagement 是管理版本的标签,该标签可以让子项目中引用依赖而不用显式的列出版本号,但是 dependencyManagement 本身只是管理依赖,不会导入依赖,子项目中如果需要导入依赖,必须显式导入依赖,不会发生所谓的继承依赖

Maven 依赖搜索会沿着父子层次向上走,直到找到拥有 dependencyManagement 标签的项目,然后就会使用该 dependencyManagement 元素中指定的版本号

这样做的好处是子项目引用相同依赖,避免子项目重复声明版本,同时便于版本升级(因为只需要在顶层父容器中更新)

创建子模块

然后需要创建 nacos-providernacos-consumer 两个子模块,首先创建 nacos-provider

我们需要在父项目右键创建 Moduel ,如下图

image-20231109214848505

image-20231109214737620

注:如果您想要删除模块的话,直接删除文件,后面可能会遇到诸如“模块已经存在” “找不到模块”。您需要做的是在 .idea 文件夹下的 compiler.xml 对应 moudule 删除,或者更加简单的是,删除 .idea 文件夹,重启 IDEA

然后我们做如下修改,使得父项目指定子模块,子模块引用父项目,当然还有其他修改,这里不赘述,请直接查看源码

image-20231109220934555

如果是子项目之间互相引用,比如说 nacos-provider 模块引用 nacos-consumer 模块,我们可以指定如下代码即可

<dependency>
        <groupId>org.example</groupId>
        <artifactId>nacos-consumer</artifactId>
        <version>1.0-SNAPSHOT</version>
</dependency>

nacos-consumer 模块大体类似,这里不再赘述

更多代码修改比较繁琐,大家可以直接看文章开头源码即可

Nacos 融合 Spring Boot

启动配置管理

官方对应文档:Nacos 融合 Spring Boot,成为注册配置中心 | Nacos

本章节最后会通过 Nacos Server 和 nacos-config-spring-boot-starter 实现配置的动态变更

首先我们在父项目中添加对应依赖管理,然后再分别在两个子模块中导入依赖

父项目 pom.xml

    <properties>
        <nacos.config.spring.boot.starter.version>0.2.2</nacos.config.spring.boot.starter.version>
    </properties>
            <dependency>
                <groupId>com.alibaba.boot</groupId>
                <artifactId>nacos-config-spring-boot-starter</artifactId>
                <version>${nacos.config.spring.boot.starter.version}</version>
            </dependency>

注意:版本 0.2.x.RELEASE 对应的是 Spring Boot 2.x 版本,版本 0.1.x.RELEASE 对应的是 Spring Boot 1.x 版本

子项目的 application.yml 分别配置如下

server:
  port: 8081

spring:
  application:
    name: nacos-consumer

nacos:
  config:
    server-addr: 127.0.0.1:8848
server:
  port: 8081

spring:
  application:
    name: nacos-consumer

nacos:
  discovery:
    server-addr: 127.0.0.1:8848

我们以 nacos-provider 为例,配置如下

使用 @NacosPropertySource 加载 dataIdexample 的配置源,并开启自动更新

@SpringBootApplication
@NacosPropertySource(dataId = "example", autoRefreshed = true)
public class NacosProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosProviderApplication.class, args);
    }

}

通过 Nacos 的 @NacosValue 注解设置属性值

@Controller
@RequestMapping("config")
public class ConfigController {

    @NacosValue(value = "${useLocalCache:false}", autoRefreshed = true)
    private boolean useLocalCache;

    @GetMapping(value = "/get")
    @ResponseBody
    public boolean get() {
        return useLocalCache;
    }
}

Nacos 2.X 版本兼容 Nacos1.X 版本的OpenAPI, 请参考文档Nacos1.X OpenAPI使用

下面使用的是 v1 的 API 文档

我们启动子项目nacos-provider 之后,调用 curl http://localhost:8082/config/get,返回内容是 false

通过调用 Nacos Open API 向 Nacos server 发布配置:dataId 为example,内容为useLocalCache=true

curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=example&group=DEFAULT_GROUP&content=useLocalCache=true"

image-20231110104259805

再次访问 http://localhost:8082/config/get,此时返回内容为true,说明程序中的useLocalCache值已经被动态更新了。

这里说个笑话,我不小心给 clash 开了全局代理,然后我忘了,之后 Nacos 控制台就打不开了,然后用各种方法都不行,最后想起来开了全局代理

这里的命名空间容易出现问题(主要针对 v2),贴出对应官方 issue

issue:Nacos 2.2.0-配置中心 openAPI v2 无法创建与删除配置 · Issue #9783 · alibaba/nacos (github.com)

启动服务发现

该章节我们以 nacos-consumer 为例

同样是按照上面的步骤向父子项目中添加依赖(父项目添加依赖管理,子项目导入依赖)

    <properties>
        <nacos.config.spring.boot.starter.version>0.2.2</nacos.config.spring.boot.starter.version>
    </properties>
            <dependency>
                <groupId>com.alibaba.boot</groupId>
                <artifactId>nacos-discovery-spring-boot-starter</artifactId>
                <version>${nacos.config.spring.boot.starter.version}</version>
            </dependency>

然后配置对应的 application.yml(上面已经配置)

使用 @NacosInjected 注入 Nacos 的 NamingService 实例

@Controller
@RequestMapping("discovery")
public class DiscoveryController {

    @NacosInjected
    private NamingService namingService;

    @GetMapping(value = "/get")
    @ResponseBody
    public List<Instance> get(@RequestParam String serviceName) throws NacosException {
        return namingService.getAllInstances(serviceName);
    }
}

启动应用之后,调用 curl http://localhost:8081/discovery/get?serviceName=example,此时返回为空 JSON 数组[]

通过调用 Nacos Open API 向 Nacos server 注册一个名称为 example 服务(成功返回 ok)

curl -X POST "http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=example&ip=127.0.0.1&port=8081"

image-20231110112738009

然后再次访问 curl http://localhost:8081/discovery/get?serviceName=example,此时返回内容为

[
    {
        "instanceId": "127.0.0.1#8081#DEFAULT#DEFAULT_GROUP@@example",
        "ip": "127.0.0.1",
        "port": 8081,
        "weight": 1,
        "healthy": true,
        "enabled": true,
        "ephemeral": true,
        "clusterName": "DEFAULT",
        "serviceName": "DEFAULT_GROUP@@example",
        "metadata": {},
        "ipDeleteTimeout": 30000,
        "instanceHeartBeatTimeOut": 15000,
        "instanceHeartBeatInterval": 5000
    }
]

参考链接

  • Nacos使用教程 - 墨天轮 (modb.pro)
  • java - SpringCloudAlibaba–Nacos教程
  • (十二)Nacos 入门教程_nacos target
  • Nacos入门学习&实践 - 掘金 (juejin.cn)
  • Nacos原理详解(注册中心,配置中心)腾讯云
  • nacos使用-服务注册中心和配置中心 - 博客园
  • 一文快速上手 Nacos 注册中心+配置中心
  • Nacos的基本使用(注册中心、配置中心)
  • 【nacos系列】windows安装与配置nacos
  • 横向对比5种常用的注册中心
  • SpringCloud 入门及创建分布式项目.md at main
  • 横向对比5种常用的注册中心

本文由博客一文多发平台 OpenWrite 发布!

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

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

相关文章

Power Automate-时间戳转化为时区时间

点击编辑 在两个步骤之间再插入一个新步骤&#xff0c;添加操作 在内置里点击日期时间 点击转换时区 下面再修改为已转换的时间

「Verilog学习笔记」4位数值比较器电路

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 分析 这里要注意题目的“门级描述方式”&#xff0c;所以我们只能使用基本门电路&#xff1a;&,|,!,^,^~。 具体实现思路&#xff1a;通过真值表得出Y0 Y1 Y2的逻辑表达…

【腾讯云 HAI域探秘】探索AI绘画之路:利用腾讯云HAI服务打造智能画家

目录 前言1 使用HAI服务作画的步骤1.1 注册腾讯云账户1.2 创建算力服务器1.3 进入模型管理界面1.4 汉化界面1.5 探索AI绘画 2 模型参数的含义和调整建议2.1 模型参数的含义和示例2.2 模型参数的调整建议 3 调整参数作画的实践和效果3.1 实践说明3.2 实践效果13.3 实践效果23.4 …

电梯用电量-第10届蓝桥杯国赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第8讲。 电梯用电量&#x…

闪站侠洗衣洗鞋管理系统app小程序开发;

闪站侠洗护软件系统为您提供全面的洗衣洗鞋解决方案&#xff0c;系统多门店&#xff0c;多网点。为您开通公中号小程序&#xff0c;并与顺丰、天猫、抖音、美团点评等第三方平台紧密连接。 我们解决洗衣工厂/门店的五大问题&#xff1a; 一、效率 从门店收衣到工厂出库&#xf…

解决GitHub不能访问

1&#xff1a;ping github.com,得到可以解析的地址 2&#xff1a;在host文件里面添加地址&#xff08;记事本打开&#xff09;。 3&#xff1a;可以添加稳定的地址&#xff08;记得地址前加“#”&#xff09; #140.82.121.3 # GitHub #140.82.114.4 # GitHub #140.82.112.4 …

如何构建新一代实时湖仓?袋鼠云基于数据湖的探索升级之路

在之前的实时湖仓系列文章中&#xff0c;我们已经介绍了实时湖仓对于当前企业数字化转型的重要性&#xff0c;实时湖仓的功能架构设计&#xff0c;以及实时计算和数据湖结合的应用场景。 在本篇文章中&#xff0c;将介绍袋鼠云数栈在构建实时湖仓系统上的探索与落地实践&#…

html实现竖直步骤条

1、问题描述 最近碰到一个需求&#xff0c;要把审批流程改为竖直步骤条的形式。本来想直接抄网上的&#xff0c;但是网上给的要么是水平步骤条&#xff0c;要么是集成在框架里的&#xff0c;要么就是人家写的太复杂了&#xff0c;js&#xff0c;css一大堆。 2、我的代码 代码下…

【沁恒 CH32V208 开发板免费试用】+ U盘/ SD NAND读写与多功能数码相框

CH32V208继承了沁恆产品一贯的传统&#xff0c;即U盘的读写功能。这使得尽管CH32V208的闪存要比CH32V307的小一倍&#xff0c;但有了U盘读写功能的支持就可有效地缓解用户对存储空间的需求。它除了支持U盘的读取&#xff0c;还支持对CS SD NAND (贴片式TF卡/SD卡) 这类器件的使…

小黑子—springMVC:第一章 请求处理与响应数据

springMVC入门1.0 1、小黑子的springMVC基础1.1 SpringMVC概述1.2 SpringMVC快速入门1.3 Controller中直接注入spring中维护的Bean1.4 SpringMVC关键组件浅析 2、SpringMVC的请求处理2.1 请求映射路径配置2.2 请求数据的接收2.2.1 键值对方式接收数据2.2.1 - I RquestParam属性…

Linux Hadoop平台伪分布式安装(Hive on Spark)

&#x1f4d4;Linux Hadoop 伪分布式安装(Hive on Spark) 安装目录 1. JDK2. Hadoop3. MysqlHive3.1 Mysql8安装3.2 Hive安装 4. Spark4.1 Maven安装4.2 Scala安装4.3 Spark编译并安装 5. Zookeeper6. HBase 版本概要&#xff1a; jdk&#xff1a; jdk-8u391-linux-x64.tar.gz…

浅析SR隧道路径批量构造方法

为什么要仿真PCE LSP下发隧道路径&#xff1f; 在大型的多区域网络中&#xff0c;路径计算非常复杂。在某些场景下&#xff0c;为了完成路径计算&#xff0c;需要在控制器上部署特殊的计算组件&#xff0c;并需要不同区域中的节点之间协作。这使得网元在进行路径计算时效率低&…

局部路由守卫path守卫

局部路由守卫path守卫 path守卫&#xff08;beforeEnter&#xff09; 代码位置&#xff1a;path守卫代码写在route对象中&#xff08;index.js文件&#xff09;beforeEnter是一个函数&#xff0c;参数上没有回调函数beforeEnter有三个参数&#xff1a; to参数&#xff1a;to是…

CocosCreator | 2.3.3及后续版本浏览器无法断点和控制台不显示错误代码路径的解决方案(cocos代码报错无法定位的问题)

在2.3.3正式版的官方介绍中有这么一项&#xff1a; 提升网页预览时的加载速度 为了进一步提升开发效率&#xff0c;我们优化了网页预览时的脚本加载速度。不论是对引擎还是项目中的代码&#xff0c;载入速度都获得了提升。特别是在开启自定义引擎&#xff0c;或者使用手机扫码…

实时时钟和日历电路MS85163/MS85163M

主要特点 ◼ 基于 32.768kHz 晶振提供年、月、日、 周工作日、小时、分钟和秒 ◼ 具有世纪标记&#xff0c;可工作于 2000-2199 年 ◼ 工作电压&#xff1a; 1.8V-5.5V ◼ 低功耗 ◼ 最高频率达 400kHz 的 I 2 C 接口 ◼ 可编程的时钟输出 (32.768kHz, 1.024kHz…

开发人员请注意:在 PyPI 上的 Python 包中发现 BlazeStealer 恶意软件

1、开发人员请注意&#xff1a;在 PyPI 上的 Python 包中发现 BlazeStealer 恶意软件 一组新的恶意 Python 包已经滑入 Python 包索引 &#xff08;PyPI&#xff09; 存储库&#xff0c;其最终目的是从受感染的开发人员系统中窃取敏感信息。这些软件包伪装成看似无害的混淆工具…

记录一次数据库内存占满

一&#xff0c;背景及表现 用户普遍反馈业务功能&#xff0c;无法加载出数据&#xff0c;服务挂了 二&#xff0c;数据库指标 三&#xff0c;排查方反馈 排查方反馈&#xff1a;查全量数据导致的&#xff0c;就是没查出来但是一直在查 四&#xff0c;分析 1.应用服务器问题…

深度系统v15.4正式发布,惊艳眼球

导读深度操作系统是一个致力于为全球用户提供美观易用、安全可靠的Linux发行版。深度桌面操作系统V15.4专业版使用全新设计的控制中心和重构桌面&#xff0c;采用模糊透明整体风格&#xff0c;全新的热区交互及窗口管理器动效&#xff0c;精挑细选的桌面壁纸&#xff1b;采用全…

VNC连接服务器实现远程桌面 --以AutoDL云服务器为例

VNC连接服务器实现远程桌面 --以AutoDL云服务器为例 针对本地机为Windows 云服务器租显卡跑些小模型很方便&#xff0c;但是当你想做可视化的时候&#xff0c;可能会遇到麻烦&#xff0c;云服务器没有显示输出界面&#xff0c;无法可视化一些检测任务的结果&#xff0c;或者可…

Python爬虫爬取家纺数据并分析

因为时间的原因&#xff0c;没法写一个详细的教程&#xff0c;但是我可以提供一个基本的框架。你需要根据实际情况进行修改和扩展。以下是使用Python的requests库和BeautifulSoup库来爬取网页内容的基本步骤&#xff1a; # 导入所需的库 import requests from bs4 import Beaut…