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

Spring Cloud Alibaba微服务治理实战:Nacos+Sentinel深度解析

一、引言

在微服务架构中,服务发现、配置管理、流量控制是保障系统稳定性的核心问题。Spring Cloud Netflix 生态曾主导微服务解决方案,但其部分组件(如 Eureka、Hystrix)已进入维护模式。

Spring Cloud Alibaba 凭借 高性能、轻量化、企业级特性,成为新一代微服务治理的事实标准。其核心组件 Nacos 和 Sentinel通过统一的 服务注册发现、动态配置管理、流量控制与熔断能力,显著简化了分布式系统的复杂度,为高可用架构提供了标准化支持。

版本说明:

+++版本兼容性说明+++  
- **Spring Cloud Alibaba 2022.0.0.0**  - 兼容JDK 11+(推荐JDK 17以获得最佳性能)  - 需显式启用bootstrap(添加依赖见下文)  
- **Nacos 2.2.3**  - 开发模式支持内嵌Derby数据库  - 生产环境强制要求MySQL 5.7+(集群模式)  
- **Sentinel 1.8.6**  - 最低支持JDK 1.8+  - 控制台推荐JDK 11+  
---

二、Spring Cloud Alibaba 生态组件

2.1 Nacos:服务注册与配置管理

1. 原理

Nacos 是一个动态服务发现、配置管理和服务元数据管理平台,支持 AP 或 CP 一致性模型(基于 Raft 协议)。

• 服务注册与发现:服务实例通过心跳机制向 Nacos Server 注册,客户端通过 DNS 或 HTTP API订阅服务列表。

• 配置管理:支持 配置版本管理、灰度发布、实时推送,基于 长轮询机制实现动态更新。

2. 示例

示例1:Nacos 服务注册与发现

配置 Nacos 地址

# bootstrap.yml
spring:application:name: order-service  # 服务名(必填)cloud:nacos:discovery:server-addr: localhost:8848 # nacos server 地址namespace: dev  # 命名空间(隔离环境)group: PAYMENT_GROUP  # 逻辑分组cluster-name: HZ  # 机房标记(同集群优先调用)ephemeral: false  # 是否临时实例(K8S建议true)

关键点
• bootstrap.yml优先级高于application.yml,适合配置注册中心地址。

• server-addr格式为IP:Port,生产环境建议使用域名(如 nacos-cluster.prod.svc:8848)。

启用服务注册发现

@SpringBootApplication
@EnableDiscoveryClient  // 正确启用服务发现
public class OrderApplication { public static void main(String[] args) { SpringApplication.run(OrderApplication.class, args); } 
}

解析:

• @EnableDiscoveryClient:激活服务注册/发现能力(兼容 Eureka、Consul 等)。

• Spring Cloud 2020+:无需显式添加该注解,但显式声明能提高可读性。

示例2:Nacos 配置中心

1. 配置中心基础使用

# bootstrap.yml (仅配置中心)
spring:application:name: order-service  # 应用名(用于关联配置Data ID)cloud:nacos:config:server-addr: ${NACOS_HOST:localhost}:8848  # 配置中心地址namespace: ${NACOS_NAMESPACE:dev}         # 命名空间(隔离环境)group: ${NACOS_GROUP:DEFAULT_GROUP}       # 配置分组file-extension: yaml                      # 配置格式username: ${NACOS_USER:admin}             # 安全认证password: ${NACOS_PWD:admin}# 共享配置(跨服务共用)shared-configs:- data-id: common-datasource.yamlgroup: SHARED_GROUPrefresh: true# 环境专属配置extension-configs[0]:data-id: order-service-${spring.profiles.active}.yamlgroup: ENV_${spring.profiles.active}refresh: true

业务层 application 配置

# 业务配置(可被Nacos覆盖)
spring:profiles:active: dev  # 指定当前环境datasource:url: ${DB_URL:jdbc:mysql://localhost:3306/order}username: ${DB_USER:root}password: ${DB_PWD:123456}# 动态配置项(从Nacos加载)
order:timeout: 3000  # 会被Nacos中的配置覆盖

2. 多环境配置管理

# Nacos 控制台创建配置
Data ID: order-service-{env}.yaml      # 如 order-service-prod.yaml
Group: ORDER_GROUP                     # 建议按业务功能分组# 配置内容示例:
order:timeout: 3000whitelist: 192.168.1.100,10.0.0.1retry:max-attempts: 3backoff: 200ms

3. 动态刷新进阶用法

方式 1:@RefreshScope + @Value (适用于简单场景)

@RefreshScope
@Service
public class OrderService {@Value("${order.timeout:1000}")     // 支持默认值private int timeout;
}

方式 2:@ConfigurationProperties (推荐结构化配置)

/*** 订单服务配置类(动态刷新)* 从Nacos配置中心加载以'order'为前缀的配置项*/
@Data 
@RefreshScope // 支持配置热更新
@ConfigurationProperties(prefix = "order") // 绑定配置前缀
public class OrderConfig {private int timeout;// IP白名单列表 private List<String> whitelist;// 重试策略配置private RetryConfig retry;/*** 重试策略嵌套配置类*/@Datapublic static class RetryConfig {// 最大重试次数private int maxAttempts;// 重试间隔时间private Duration backoff;}
}

方式 3:监听配置变更事件

@Component
public class ConfigListener implements ApplicationListener<RefreshScopeRefreshedEvent> {@Overridepublic void onApplicationEvent(RefreshScopeRefreshedEvent event) {System.out.println("配置已刷新,需重新初始化资源");}
}

4. 配置中心与服务发现的联动

# 服务元数据与配置联动
spring:cloud:nacos:discovery:metadata:config-version: v2.1  # 通过元数据标识配置版本feature-flags: A/B

3. 最佳实践建议

配置规范

• 生产环境配置 必须设置 group明确业务归属

• 敏感配置应使用 nacos-config-encryption-plugin插件加密

版本控制

# 通过 OpenAPI 管理配置历史
curl -X GET "http://localhost:8848/nacos/v1/cs/history?dataId=order-service.yaml&group=ORDER_GROUP"

灰度发布

// 配合 @Conditional 实现配置驱动的特性开关

@Bean
@ConditionalOnProperty(name = "features.new-payment", havingValue = "true")
public PaymentService newPaymentService() {return new NewPaymentImpl();
}

调试技巧

# 启动时增加参数检查配置加载
-Dspring.cloud.nacos.config.import-check.enabled=true

关键原理说明

• 长轮询机制:客户端默认 每 30 秒检查配置变更,服务端会 hold住请求,直到配置变更或超时 (30s)

• 本地缓存:配置会持久化到 ${user.home}/nacos/config/目录,保证断网时可用

• 一致性保障:CP 模式使用 Raft协议保证配置变更的强一致性

4. Nacos 与传统组件对比

与 Eureka 的对比

在这里插入图片描述

总结:
• Nacos相比 Eureka,具有更强的健康检查支持,且内置了配置管理功能,减少了外部依赖。

• Nacos的一致性保障和对 Kubernetes 的支持使其在现代云原生架构中更具优势,而 Eureka主要偏向于传统的微服务架构。

数据同步机制对比:
在这里插入图片描述

2.2 Sentinel:流量控制与熔断机制

1. 原理

Sentinel 以流量为切入点,通过规则定义(QPS、线程数、熔断降级)保障系统稳定性。

• 流量控制:基于滑动时间窗口统计,支持 直接拒绝、匀速排队等策略。

• 熔断降级:通过 异常比例、响应时间阈值触发熔断,自动恢复依赖调用。

Sentinel 核心算法

滑动时间窗口实现

滑动时间窗口是流量控制中的一个关键概念,通常用于计算指定时间窗口内的请求次数,以便实现限流控制。以下是滑动时间窗口的伪代码实现示例,采用秒级时间粒度:

# 伪代码展示统计逻辑
class TimeWindow:def __init__(self):# 存储时间窗口的请求计数self.windows = defaultdict(int)def add(self, timestamp):# 根据时间戳划分窗口,1秒为粒度slot = timestamp // 1000  # 将时间戳按秒划分self.windows[slot] += 1def sum(self, period):# 获取当前时间的秒级时间戳current = time.time() // 1000# 计算当前窗口内指定时间周期内的请求总数return sum(v for k, v in self.windows.items() if current - k < period)

说明:

• add 方法:将请求的时间戳按秒划分为时间窗口,并将该窗口的请求次数加一。

• sum 方法:计算当前时间窗口内,指定时间周期(period)内的请求总数,通常用于判断是否超过限流阈值。

2. 示例

定义 Sentinel 资源与流控规则

项目结构

my-sentinel-demo
│
├── src
│   └── main
│       └── java
│           └── com
│               └── example
│                   └── sentinel
│                       ├── Application.java          // Spring Boot 启动类
│                       ├── OrderService.java         // 业务逻辑类,包含限流与熔断处理
│                       ├── Order.java                // 订单类,用于存储订单信息
│                       └── FlowRuleConfig.java       // 流量控制规则配置类
│
└── pom.xml                                        // Maven 配置文件,包含所需的依赖

启动步骤

1.初始化项目:将上述 Java 文件和 pom.xml文件放入相应的目录。

2.配置依赖:确保 pom.xml中包含了 Sentinel 和 Spring Boot 的相关依赖。

3.启动应用:运行 Application.java,Spring Boot 会自动启动服务。

4.访问接口:访问 http://localhost:8080/order/{id},通过该接口查询订单。如果达到流量控制规则的阈值,则会触发限流处理,返回 服务限流。

代码示例

1.OrderService.java

包含业务逻辑和流量控制的配置。

//降级处理类
@Component  
public class OrderFallback {  public static String handleBlock(String orderId, BlockException ex) {  return "[降级处理] 系统繁忙,请稍后重试 (订单ID:" + orderId + ")";  }  
}  
//Service类
@Service  
public class OrderService {  @SentinelResource(  value = "queryOrder",  blockHandlerClass = OrderFallback.class,  blockHandler = "handleBlock",  // 新增热点参数规则  fallback = "queryOrderFallback"  )  public String queryOrder(@RequestParam String orderId) {  return "订单详情 - ID: " + orderId;  }  // 熔断降级方法  public String queryOrderFallback(String orderId, Throwable ex) {  return "[熔断保护] 服务暂时不可用";  }  
}  

2. Order.java

Order类用于表示订单对象。

public class Order {private String id;private String description;public Order(String id, String description) {this.id = id;this.description = description;}// Getter 和 Setterpublic String getId() {return id;}public void setId(String id) {this.id = id;}public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}
}

3. FlowRuleConfig.java

配置 Sentinel 流量控制规则。

import com.alibaba.csp.sentinel.slots.flow.FlowRule;
import com.alibaba.csp.sentinel.slots.flow.FlowRuleManager;
import com.alibaba.csp.sentinel.slots.flow.RuleConstant;
import org.springframework.stereotype.Component;import java.util.Collections;@Component
public class FlowRuleConfig {// 构造函数中配置流量控制规则public FlowRuleConfig() {// 创建流量控制规则,指定资源名称为 "queryOrder"FlowRule rule = new FlowRule("queryOrder").setCount(100)  // 设置 QPS(每秒请求数)阈值为 100.setGrade(RuleConstant.FLOW_GRADE_QPS);  // 使用 QPS 限流策略// 将流量控制规则加载到 FlowRuleManager 中FlowRuleManager.loadRules(Collections.singletonList(rule));}
}

4. Application.java

Application类用于启动 Spring Boot 应用。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class Application {public static void main(String[] args) {// 启动 Spring Boot 应用SpringApplication.run(Application.class, args);}
}

说明

1.OrderService:包含了业务逻辑(查询订单)和限流处理(handleBlock)。

2.Order:一个简单的 POJO 类,表示订单对象。

3.FlowRuleConfig:配置流量控制规则的类,初始化时加载流量规则到 FlowRuleManager。

4.Application:Spring Boot 应用的启动类。

3. Sentinel 与传统组件对比
在这里插入图片描述

总结

• Sentinel提供了更全面的流量控制和熔断功能,尤其适合微服务架构,支持更细粒度的监控与治理。

• Hystrix已进入维护阶段,适合已有应用,但不再推荐新项目使用。

• Ribbon主要用于负载均衡,不具备流量控制或熔断能力。

如果需要灵活的流量控制与熔断机制,Sentinel是更好的选择。

2.3 分布式治理协同机制

graph LR
A[Nacos服务发现] --> B[实例上下线事件]
B --> C[Sentinel动态调整流量路由]
D[Nacos配置变更] --> E[Sentinel规则热更新]

Nacos 与 Sentinel 通过以下协同策略保障系统稳定性:

1.动态规则持久化:将 Sentinel 规则存储至 Nacos 配置中心,实现规则的多环境同步。

2.服务健康联动:Nacos 剔除异常实例后,Sentinel 自动调整流量路由策略,避免流量继续访问不可用实例。

三、Spring Cloud Alibaba 示例

3.1 场景描述

构建 订单服务(Order Service)与 库存服务(Stock Service),实现:

• 服务注册与发现(Nacos)

• 配置动态更新(Nacos 配置中心)

• 接口限流(Sentinel)

3.2 项目结构

spring-cloud-alibaba-sample/
│── order-service/          # 订单服务
│   ├── src/main/java/com/example/order/
│   │   ├── OrderApplication.java  # Spring Boot 启动类
│   │   ├── controller/OrderController.java  # 订单接口
│   │   ├── service/OrderService.java  # 订单业务
│   │   ├── config/NacosConfig.java  # 读取 Nacos 配置
│   │   ├── sentinel/OrderSentinelHandler.java  # Sentinel 限流
│   ├── src/main/resources/
│   │   ├── bootstrap.yml   # 连接 Nacos 配置
│   │   ├── application.yml # 业务相关配置
│   ├── pom.xml             # 依赖管理
│
│── nacos/                  # Nacos 配置文件
│   ├── order-service.yaml  # 订单服务的 Nacos 配置
│
│── sentinel-dashboard/      # Sentinel 控制台(可选)
│── docker-compose.yml       # 一键启动 Nacos 和 Sentinel(可选)
│── pom.xml                  # 父级依赖管理

3.3 代码实现示例

1. 添加 pom.xml

在 pom.xml中添加 Spring Boot、Spring Cloud Alibaba (Nacos & Sentinel)相关依赖:

<dependencies><!-- Spring Boot Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Nacos 服务注册与配置管理 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!-- Sentinel 流量控制与熔断降级 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency>
</dependencies>

2. 配置 application.yml

在 src/main/resources/application.yml添加基础配置:

server:port: 8081  # 订单服务端口spring:application:name: order-service  # 服务名称cloud:nacos:discovery:server-addr: localhost:8848  # Nacos 地址config:server-addr: localhost:8848file-extension: yaml  # 以 YAML 格式存储配置sentinel:transport:dashboard: localhost:8858  # Sentinel 控制台地址

3. 业务代码

(1) 订单服务 OrderService

package com.example.order.service;import com.alibaba.csp.sentinel.annotation.SentinelResource;
import org.springframework.stereotype.Service;@Service
public class OrderService {/*** 查询订单接口,使用 Sentinel 进行限流保护*/@SentinelResource(value = "queryOrder", blockHandler = "handleBlock")public String queryOrder(String orderId) {return "订单详情 - ID: " + orderId;}/*** 限流后的降级处理逻辑*/public String handleBlock(String orderId, Throwable ex) {return "系统繁忙,请稍后再试!(订单ID:" + orderId + ")";}
}

(2) 订单控制器 OrderController

package com.example.order.controller;import com.example.order.service.OrderService;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/order")
public class OrderController {private final OrderService orderService;public OrderController(OrderService orderService) {this.orderService = orderService;}/*** 订单查询接口*/@GetMapping("/{id}")public String getOrder(@PathVariable String id) {return orderService.queryOrder(id);}
}

(3) 启动类 OrderApplication

package com.example.order;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication
@EnableDiscoveryClient // 启用 Nacos 服务注册
public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);}
}

4. 启动 Nacos & 订单服务

(1) 启动 Nacos

sh startup.sh -m standalone  # 启动 Nacos(独立模式)

(2) 启动订单服务

mvn spring-boot:run

5. 测试验证

(1) 确保服务注册到 Nacos

在浏览器访问 Nacos 控制台(默认 http://localhost:8848/nacos),查看 order-service 是否成功注册。

(2) 访问订单接口

在浏览器或 Postman请求:

curl http://localhost:8081/order/123

预期输出

“订单详情 - ID: 123”
(3) 配置 Sentinel 规则

访问 Sentinel 控制台http://localhost:8858,添加流量控制规则:

• 资源名称:queryOrder

• 限流类型:QPS

• 阈值:1

然后短时间内快速请求:

curl http://localhost:8081/order/123

超过限流阈值后,预期输出

"系统繁忙,请稍后再试!(订单ID:123)"

总结

1.POM 依赖:Spring Boot + Nacos + Sentinel 必要依赖

2.配置文件:Nacos 注册、配置管理 & Sentinel 监控

3.业务代码:

• OrderService:提供订单查询,添加 Sentinel 保护

• OrderController:提供 REST 接口

• OrderApplication:主应用入口

4.启动服务:运行 Nacos & 订单服务

5.测试验证:查看 Nacos 注册、调用接口、验证 Sentinel 限流

3.4 与K8S集成关键步骤

服务注册适配

# deployment.yaml 关键配置
env:- name: SPRING_CLOUD_NACOS_DISCOVERY_SERVER_ADDRvalue: "${NACOS_SERVICE_NAME:nacos}-cluster.${POD_NAMESPACE:default}.svc.cluster.local:8848"- name: SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespace- name: NACOS_NAMESPACE  # 新增统一环境变量valueFrom:fieldRef:fieldPath: metadata.namespace- name: NACOS_GROUP      # 新增分组配置value: "${APP_GROUP:PROD_GROUP}"

配置管理方案

# 通过InitContainer同步配置
initContainers:
- name: nacos-config-loaderimage: alpine/curlcommand: ['sh', '-c', 'curl -X POST nacos:8848/nacos/v1/cs/configs?dataId=order-service.yaml&group=DEFAULT_GROUP&content=$(cat /config/application.yaml)']
Sentinel 自适应扩缩// HPA指标适配器示例
type SentinelMetricsAdapter struct {rejectedRequests float64
}func (a *SentinelMetricsAdapter) GetMetrics() (float64, error) {return a.rejectedRequests, nil
}

3.5 典型问题排查

服务注册异常场景:

• 网络策略未开放 8848 端口

• Pod 与 Nacos 的 namespace 不匹配

• 心跳间隔配置不当(建议值:5-15s)

四、Spring Cloud Alibaba 生态最佳实践

1. 服务注册与发现的优化

• 生产环境建议 Nacos 采用集群化部署,提高可靠性和性能。

2. 配置管理的版本控制

• 在 Nacos 配置中心,建议为每个微服务的配置 添加版本控制,确保在更新时能够快速回滚。

3. 流量控制的精细化

• 根据业务场景 针对不同接口设置不同的限流策略,避免一刀切:

• 核心业务接口:适当提高限流阈值,保障稳定性。

• 非核心接口:限制更严格的流量控制,减少资源占用。

4. 监控与告警

• 结合 Prometheus + Grafana,实时监控微服务运行状态。

• 配置告警机制,及时发现并处理异常。

5. 多环境配置策略

# bootstrap.properties
spring.profiles.active=@profile@
spring.cloud.nacos.config.ext-config[0].data-id=order-service-${profile}.yaml
spring.cloud.nacos.config.ext-config[0].group=ENV_${profile}
spring.cloud.nacos.config.ext-config[0].refresh=true

6. 熔断策略优化矩阵
在这里插入图片描述
快速恢复、指数退避重试、熔断后降级缓存

五、总结

5.1 核心重点

Spring Cloud Alibaba 生态为微服务架构提供了 三大核心能力:

1. 服务治理体系

• Nacos的 多集群隔离和 元数据管理,支持跨机房流量调度

• 服务健康检查的三级熔断机制(实例级 > 服务级 > 集群级)

2. 配置管理维度

• 配置的版本追溯和 一键回滚(基于 Nacos 的配置历史版本)

• 安全审计:支持 RAM 权限模型和 配置变更记录

3. 流量治理闭环

• Sentinel的 多维熔断策略(慢调用比例 / 异常比例 / 异常数)

• 与 Nacos 联动的 动态规则推送(秒级生效)

5.2 生产环境关键指标
在这里插入图片描述

相关文章:

Spring Cloud Alibaba微服务治理实战:Nacos+Sentinel深度解析

一、引言 在微服务架构中&#xff0c;服务发现、配置管理、流量控制是保障系统稳定性的核心问题。Spring Cloud Netflix 生态曾主导微服务解决方案&#xff0c;但其部分组件&#xff08;如 Eureka、Hystrix&#xff09;已进入维护模式。 Spring Cloud Alibaba 凭借 高性能、轻…...

《AI换脸时代的攻防暗战:从技术滥用走向可信未来》

技术迭代图谱 过去五年里&#xff0c;Deepfake技术经历了飞速迭代&#xff0c;从最初的萌芽到如今的广泛应用和对抗措施形成。2017年前后&#xff0c;利用深度学习进行人脸换装的技术首次在社区中出现。一位Reddit网友昵称“deepfakes”&#xff0c;将名人面孔替换到色情影片上…...

25/4/9 算法笔记 DBGAN+强化学习+迁移学习实现青光眼图像去模糊1

整体实验介绍 实验主要是结合DBGAN对抗网络强化学习增强迁移学习增强实现青光眼图像去模糊。今天则是先完成了DBGAN板块模型的训练。 实验背景介绍 青光眼的主要特征有&#xff1a; 视盘形态与杯盘比CDR&#xff1a;青光眼患者主要表现为视杯扩大&#xff0c;盘沿变窄。 视…...

【Claude AI大语言模型连接Blender生成资产】Windows安装Blender MCP教程

前言 最近在学习资产制作&#xff0c;了解到了个好玩的东西&#xff0c;利用AI一步一步搭建资产&#xff1a; 上面这副图就是利用Claude AI调用Blender的Python接口一步一步实现的&#xff0c;挺丑但好玩。 安装教程 进入Github: Blender-MCP 网站&#xff0c;下载该项目&a…...

JSP运行环境安装及常用HTML标记使用

制作一个静态网站的基本页面index.html 实验代码&#xff1a;<form> <label for"username">用户名:</label> <input type"text" id"username" name"username"><br> <label for"password&…...

Git 的进阶功能和技巧

1、分支的概念和使用 1.1、什么是分支&#xff1f; 分支&#xff08;Branch&#xff09;是在版本控制中非常重要的概念。几乎所有版本控制系统都支持某种形式的分支。在 Git 中&#xff0c;分支是 Git 强大功能之一&#xff0c;它允许我们从主开发线分离出来&#xff0c;在不…...

WSL1升级到WSL2注意事项

今天要在WSL上安装docker&#xff0c;因为机器上安装了wsl1&#xff0c;docker安装后启动不了&#xff0c;通过询问deepseek发现docker只能在wsl2上安装&#xff0c;因此就想着将本机的wsl1升级到wsl2。 确保你的 Windows 系统是 Windows 10&#xff08;版本 1903 及以上&…...

392. 判断子序列

https://leetcode.cn/problems/is-subsequence/?envTypestudy-plan-v2&envIdtop-interview-150因为是子序列我们只要关心后一个字符在前一个字符后面出现过就行&#xff0c;至于在哪出现出现几次我们不关心&#xff0c;所以我们可以用HashMap<Character, ArrayList<…...

在 VMware 中为 Ubuntu 24.04 虚拟机设置共享文件夹后,在虚拟机中未能看到共享的内容

在 VMware 中为 Ubuntu 24.04 虚拟机设置共享文件夹后&#xff0c;如果在虚拟机中未能看到共享的内容&#xff0c;可能是由于以下原因&#xff1a; VMware Tools 未正确安装&#xff1a;共享文件夹功能依赖于 VMware Tools 或 Open VM Tools。如果未安装或安装不完整&#xff0…...

台式电脑插入耳机没有声音或麦克风不管用

目录 一、如何确定插孔对应功能1.常见音频插孔颜色及功能2.如何确认电脑插孔?3.常见问题二、 解决方案1. 检查耳机连接和设备选择2. 检查音量设置和静音状态3. 更新或重新安装声卡驱动4. 检查默认音频格式5. 禁用音频增强功能6. 排查硬件问题7. 检查系统服务8. BIOS设置(可选…...

Windchill开发-WTContainer相关API整理

Windchill开发-WTContainer相关API整理 概述各容器对象相关方法站点容器组织容器产品容器/存储库容器上下文团队角色组 文件夹 方法汇总 概述 Windchill 的环境由一组容器组成&#xff0c;容器分为三级&#xff1a;第一级为站点容器&#xff0c;第二级为组织容器&#xff0c;第…...

理解JSON-RPC 2.0 协议

JSON-RPC 2.0是指一种基于 JSON 的远程过程调用协议&#xff0c;用于在网络上进行跨平台和跨语言的通信。它提供了一种简单、轻量级的方式来实现客户端和服务器之间的方法调用和数据交换。在原文中&#xff0c;JSON-RPC 2.0被用来描述 STDIO 传输机制中消息的格式&#xff0c;即…...

【 C# 使用 MiniExcel 库的典型场景】

以下是 C# 使用 MiniExcel 库的典型场景及代码示例&#xff1a; 一、基础读取操作 强类型读取‌&#xff08;需定义数据模型类&#xff09; 定义与 Excel 列名匹配的类后直接映射为对象集合&#xff1a; csharp Copy Code public class UserAccount { public int Id { get; …...

创建 Pod 失败,运行时报错 no space left on device?

遇到创建Pod失败并报错“no space left on device”时&#xff0c;请按照以下步骤排查和解决问题&#xff1a; 1. 定位问题来源 查看Pod事件&#xff1a; kubectl describe pod <pod-name> -n <namespace> 在输出中查找 Events 部分&#xff0c;确认错误是否与…...

[leetcode]查询区间内的所有素数

一.暴力求解 #include<iostream> #include<vector> using namespace std; vector<int> result; bool isPrime(int i) { if (i < 2) return false; for (int j 2;j * j < i;j) { if (i % j 0) { …...

【Web安全】如何在 CDN 干扰下精准检测 SSRF?Nuclei + Interactsh 实战

❤️博客主页&#xff1a; iknow181 &#x1f525;系列专栏&#xff1a; 网络安全、 Python、JavaSE、JavaWeb、CCNP &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐评论✍ 背景 在日常漏洞复核中&#xff0c;我们常用 DNSLog 平台判断目标是否存在 SSRF 漏洞&#xff1a;只要请…...

输入框只能输入非中文字符

在 Qt 中&#xff0c;可以通过设置输入法过滤器&#xff08;QInputContext&#xff09;或使用正则表达式来限制输入框&#xff08;QLineEdit 或 QTextEdit&#xff09;只能输入非中文字符。以下是两种实现方法&#xff1a; ### 方法 1&#xff1a;使用正则表达式 可以通过 QLi…...

LeeCode 136. 只出现一次的数字

给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题&#xff0c;且该算法只使用常量额外空间。 示例 1 &#xff1a; 输入&#xff1…...

Traefik应用:配置容器多个网络时无法访问问题

Traefik应用&#xff1a;配置容器多个网络时无法访问问题 介绍解决方法问题原因&#xff1a; **容器多网络归属导致 Traefik 无法正确发现路由规则**。解决方案方法 1&#xff1a;将应用容器 **仅连接** 到 traefik-public 网络方法 2&#xff1a;显式指定 Traefik 监听的网络 …...

超便捷超实用的文档处理工具,PDF排序,功能强大,应用广泛,无需下载,在线使用,简单易用快捷!

小白工具https://www.xiaobaitool.net/files/pdf-sort/ 中的 PDF 排序功能是一项便捷实用的文档处理服务&#xff0c;以下是其具体介绍&#xff1a; 操作便捷直观&#xff1a;用户上传 PDF 文件后&#xff0c;可通过直接拖动页面缩略图来调整顺序&#xff0c;就像在纸质文档中…...

zsh: command not found - 鸿蒙 HarmonyOS Next

终端中执行 hdc 命令抛出如下错误; zsh: command not found 解决办法 首先,查找到 DevEco-Studio 的 toolchains 目录路径; 其次,按照类似如下的文件夹层级结果推理到 toolchains 子级路径下,其中 sdk 后一级的路径可能会存在差异,以实际本地路径结构为主,直至找到 openharm…...

【动态规划】 深入动态规划—两个数组的dp问题

文章目录 前言例题一、最长公共子序列二、不相交的线三、不同的子序列四、通配符匹配五、交错字符串六、两个字符串的最小ASCII删除和七、最长重复子数组 结语 前言 问题本质 它主要围绕着给定的两个数组展开&#xff0c;旨在通过对这两个数组元素间关系的分析&#xff0c;找出…...

金融数据分析(Python)个人学习笔记(7):网络数据采集以及FNN分类

一、网络数据采集 证券宝是一个免费、开源的证券数据平台&#xff08;无需注册&#xff09;&#xff0c;提供大盘准确、完整的证券历史行情数据、上市公司财务数据等&#xff0c;通过python API获取证券数据信息。 1. 安装并导入第三方依赖库 baostock 在命令提示符中运行&…...

指定运行级别

linux系统下有7种运行级别,我们需要来了解一下常用的运行级别,方便我们熟悉以后的部署环境,话不多说,来看. 开机流程&#xff1a; 指定数级别 基本介绍 运行级别说明: 0:关机 相当于shutdown -h now ⭐️默认参数不能设置为0,否则系统无法正常启动 1:单用户(用于找回丢…...

7.第二阶段x64游戏实战-string类

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 上一个内容&#xff1a;7.第二阶段x64游戏实战-分析人物属性 string类是字符串类&#xff0c;在计算机中…...

【MySQL基础】左右连接实战:掌握数据关联的完整视图

1 左右连接基础概念 左连接(left join)和右连接(right join)是MySQL中两种重要的表连接方式&#xff0c;它们与内连接不同&#xff0c;能够保留不匹配的记录&#xff0c;为我们提供更完整的数据视图。 核心区别&#xff1a; left join&#xff1a;保留左表所有记录&#xff0c;…...

建筑工程行业如何选OA系统?4大主流产品分析

工程行业项目的复杂性与业务流程的繁琐性对办公效率提出了极高要求。而OA 系统&#xff08;办公自动化系统&#xff09;的出现&#xff0c;为工程企业提供了一种全新的、高效的管理模式。 工程行业OA系统选型关键指标 功能深度&#xff1a;项目管理模块完整度、文档版本控制能…...

动态科技感html导航网站源码

源码介绍 动态科技感html导航网站源码&#xff0c;这个设计完美呈现了科幻电影中的未来科技界面效果&#xff0c;适合展示技术类项目或作为个人作品集的入口页面&#xff0c;自适应手机。 修改卡片中的链接指向你实际的HTML文件可以根据需要调整卡片内容、图标和颜色要添加更…...

CLIPGaze: Zero-Shot Goal-Directed ScanpathPrediction Using CLIP

摘要 目标导向的扫描路径预测旨在预测人们在搜索视觉场景中的目标时的视线移动路径。大多数现有的目标导向扫描路径预测方法在面对训练过程中未出现的目标类别时,泛化能力较差。此外,它们通常采用不同的预训练模型分别提取目标提示和图像的特征,导致两者之间存在较大的特征…...

wsl-docker环境下启动ES报错vm.max_map_count [65530] is too low

问题描述 在windows环境下用Docker Desktop&#xff08;wsl docker&#xff09;启动 elasticsearch时报错 max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]解决方案 方案一 默认的vm.max_map_count值是65530,而es需要至少262…...

js chrome 插件,下载微博视频

起因&#xff0c; 目的: 最初是想下载微博上的NBA视频&#xff0c;因为在看网页上看视频很不方便&#xff0c;快进一次是10秒&#xff0c;而本地 VLC 播放器&#xff0c;快进一次是5秒。另外我还想做点视频剪辑。 对比 原来手动下载的话&#xff0c;右键检查&#xff0c;复制…...

游戏引擎学习第212天

"我们将同步…"α 之前我们有一些内容是暂时搁置的&#xff0c;因为在调整代码的过程中&#xff0c;我们做了一些变动以使代码更加简洁&#xff0c;这样可以把数据放入调试缓冲区并显示出来&#xff0c;这一切现在看起来已经好多了。尽管现在看起来更好&#xff0c;…...

PXE远程安装服务器

目录 搭建PXE远程安装服务器 1、准备Linux安装源&#xff1a; 2、安装并启用TFTP服务&#xff1a; 3、准备Linux内核、初始化镜像文件 4、准备PXE引导程序 5、安装并启用DHCP服务 6、&#xff08;1&#xff09;配置启动菜单文件(有人应答) ‌6、&#xff08;2&#xff09…...

软件测试之功能测试详解

一、测试项目启动与研读需求文档 &#xff08;一&#xff09; 组建测试团队 1、测试团队中的角色 2、测试团队的基本责任 尽早地发现软件程序、系统或产品中所有的问题。 督促和协助开发人员尽快地解决程序中的缺陷。 帮助项目管理人员制定合理的开发和测试计划。 对缺陷进行…...

Python深度学习基础——卷积神经网络(CNN)(PyTorch)

CNN原理 从DNN到CNN 卷积层与汇聚 深度神经网络DNN中&#xff0c;相邻层的所有神经元之间都有连接&#xff0c;这叫全连接&#xff1b;卷积神经网络 CNN 中&#xff0c;新增了卷积层&#xff08;Convolution&#xff09;与汇聚&#xff08;Pooling&#xff09;。DNN 的全连接…...

pytorch 反向传播

文章目录 概念计算图自动求导的两种模式 自动求导-代码标量的反向传播非标量变量的反向传播将某些计算移动到计算图之外 概念 核心&#xff1a;链式法则 深度学习框架通过自动计算导数(自动微分)来加快求导。 实践中&#xff0c;根据涉及号的模型&#xff0c;系统会构建一个计…...

VSCode解决中文乱码方法

目录 一、底层原因 二、解决方法原理 三、解决方式&#xff1a; 1.预设更改cmd临时编码法 2.安装插件法&#xff1a; 一、底层原因 当在VSCode中遇到中文显示乱码的问题时&#xff0c;这通常是由于文件编码与VSCode的默认或设置编码不匹配&#xff0c;或…...

pandas.DataFrame.dtypes--查看和验证 DataFrame 列的数据类型!

查看每列的数据类型&#xff0c;方便分析是否需要数据类型转换 property DataFrame.dtypes[source] Return the dtypes in the DataFrame. This returns a Series with the data type of each column. The result’s index is the original DataFrame’s columns. Columns with…...

高性能服务开发利器:redis+lua

Redis 与 Lua 脚本的结合&#xff0c;其核心价值在于 ​原子性操作​ 和 ​减少网络开销。 一、Redis 执行 Lua 脚本的优势​ ​原子性​ Lua 脚本在 Redis 中原子执行&#xff0c;避免多命令竞态条件。 ​减少网络开销​ 将多个 Redis 命令合并为一个脚本&#xff0c;减少客…...

开源智能体MetaGPT记忆模块解读

MetaGPT 智能体框架 1. 框架概述 MetaGPT 是一个​​多智能体协作框架​​&#xff0c;通过模拟软件公司组织架构与工作流程&#xff0c;将大语言模型&#xff08;LLM&#xff09;转化为具备专业分工的智能体&#xff0c;协同完成复杂任务。其最大特点是能够将​​自然语言需…...

Docker部署MySQL大小写不敏感配置与数据迁移实战20250409

Docker部署MySQL大小写不敏感配置与数据迁移实战 &#x1f9ed; 引言 在企业实际应用中&#xff0c;尤其是使用Java、Hibernate等框架开发的系统&#xff0c;MySQL默认的大小写敏感特性容易引发各种兼容性问题。特别是在Linux系统中部署Docker版MySQL时&#xff0c;默认行为可…...

【RabbitMQ】延迟队列

1.概述 延迟队列其实就是队列里的消息是希望在指定时间到了以后或之前取出和处理&#xff0c;简单来说&#xff0c;延时队列就是用来存放需要在指定时间被处理的元素的队列。 延时队列的使用场景&#xff1a; 1.订单在十分钟之内未支付则自动取消 2.新创建的店铺&#xff0c;…...

深兰科技携多款AI医疗创新成果亮相第七届世界大健康博览会

4月8日&#xff0c;以“AI赋能 健康生活”为主题的2025年(第七届)世界大健康博览会(以下简称健博会)在武汉隆重开幕。应参展企业武汉市三甲医院——武汉中心医院的邀请&#xff0c;深兰科技最新研发的新一代智慧医疗解决方案和产品在其展位上公开亮相。 本届展会吸引了来自18个…...

20周年系列|美创科技再度入围「年度高成长企业」系列榜单

近日&#xff0c;资深产业信息服务平台【第一新声】发布「2024年度科技行业最佳CEO及高成长企业榜」&#xff0c;美创科技凭借在数据安全领域的持续创新和广泛行业实践&#xff0c; 再度入围“年度网络安全高成长企业”、“年度高科技高成长未来独角兽企业TOP30”。 美创科技作…...

saltstack分布式部署

一、saltstack分布式 在minion数量过多时&#xff0c;通过部署salt代理&#xff0c;减轻master负载 1、在master上删除说有minion证书 2、在minion上删除旧master信息 3、安装部署salt-syndic 4、修改minion 5、在master上签署代理的证书 6、在代理上签署minion证书 7、测试...

CCRC 与 EMVCo 双认证:中国智能卡企业的全球化突围

在全球经济一体化的浪潮中&#xff0c;智能卡行业正经历着前所未有的变革与发展。中国智能卡企业凭借技术优势与成本竞争力&#xff0c;在国内市场成绩斐然。然而&#xff0c;要想在国际市场站稳脚跟&#xff0c;获取权威认证成为关键一步。CCRC 与 EMVCo 双认证&#xff0c;宛…...

逆向工程的多层次解析:从实现到领域的全面视角

目录 前言1. 什么是逆向工程&#xff1f;2. 实现级逆向&#xff1a;揭示代码背后的结构2.1 抽象语法树的构建2.2 符号表的恢复2.3 过程设计表示的推导 3. 结构级逆向&#xff1a;重建模块之间的协作关系3.1 调用图与依赖分析3.2 程序与数据结构的映射 4. 功能级逆向&#xff1a…...

【Docker项目实战】使用Docker部署ToDoList任务管理工具

【Docker项目实战】使用Docker部署ToDoList任务管理工具 一、ToDoList介绍1.1 ToDoList简介1.2 ToDoList主要特点二、本次实践规划2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本四、下载ToDoList镜像…...

基于SpinrgBoot+Vue的医院管理系统-026

一、项目技术栈 Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SpringBoot 前端&#xff1a;Vue开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 二、功能介绍 (1)…...

如何进行数据安全风险评估总结

一、基于场景进行安全风险评估 一、概述 数据安全风险评估总结(一)描述了数据安全风险评估的相关理论,数据安全应该关注业务流程,以基础安全为基础,以数据生命周期及数据应用场景两个维度为入口进行数据安全风险评估。最后以《信息安全技术 信息安全风险评估规范》为参考,…...