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

使用RabbitMQ实现流量削峰填谷

原理

流量削峰填谷是指在面对突发的高流量时,通过消息队列将瞬时大量请求暂时存储起来,并逐步处理这些请求,从而避免系统过载。RabbitMQ 作为消息中间件可以很好地支持这一需求,特别是结合其延时消息插件(rabbitmq_delayed_message_exchange),可以在处理消息时加入延时逻辑,进一步优化系统的负载。

  1. 生产者发送消息:当有大量请求涌入时,生产者将这些请求转化为消息并发送到 RabbitMQ 队列中。
  2. 消费者异步处理:消费者从队列中异步获取消息并进行处理。由于消息是逐步被消费的,因此即使短时间内有大量的请求进入系统,也不会导致系统崩溃。
  3. 延时消息处理:对于某些需要延时处理的消息,可以通过 RabbitMQ 的延时消息插件来设置消息的延时时间,使得这些消息在指定的时间后才被消费者处理。

详细步骤

一、环境准备

1. 安装 RabbitMQ 并启用延时消息插件

首先确保你已经安装了 RabbitMQ,并启用了管理插件以便通过 Web 界面进行管理。如果还没有安装 RabbitMQ,可以通过 Docker 快速启动一个 RabbitMQ 实例:

# 启动 RabbitMQ 容器
docker run -d --name rabbitmq 
-p 5672:5672 -p 15672:15672 
rabbitmq:3-management //指向特定的 3.x 版本并包含管理插件

访问 http://localhost:15672 进入 RabbitMQ 的管理界面,默认用户名和密码都是 guest

接下来,安装并启用 RabbitMQ 延时消息插件:

# 下载插件
wget https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/download/3.8.0/rabbitmq_delayed_message_exchange-3.8.0.ez -P /usr/lib/rabbitmq/lib/rabbitmq_server-<version>/plugins/# 启用插件
rabbitmq-plugins enable rabbitmq_delayed_message_exchange# 重启 RabbitMQ 服务
systemctl restart rabbitmq-server

二、RabbitMQ 配置与队列设置

1. 创建队列和交换机

我们使用延时插件的延时交换机来处理延时消息。以下是使用命令行工具 rabbitmqadmin 创建队列和交换机的示例:

# 使用 RabbitMQ 管理插件或命令行工具创建队列
rabbitmqadmin declare queue name=order_queue durable=true arguments='{"x-max-length": 10000, "x-overflow": "drop-head"}'# 创建延时交换机
rabbitmqadmin declare exchange name=delayed_exchange type=x-delayed-message durable=true arguments='{"x-delayed-type": "direct"}'# 绑定队列到交换机
rabbitmqadmin declare binding source=delayed_exchange destination=order_queue routing_key=order_routing_key

三、Spring Boot 应用程序配置

1. pom.xml 添加依赖

在 Spring Boot 项目中添加 RabbitMQ 和相关依赖:

<dependencies><!-- Spring Boot Starter for AMQP --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><!-- Jackson for JSON processing --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency><!-- Lombok for reducing boilerplate code --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>
</dependencies>
2. application.yml 配置文件

src/main/resources/application.yml 中配置 RabbitMQ 连接信息:

spring:rabbitmq:host: localhostport: 5672username: guestpassword: guestvirtual-host: /listener:simple:acknowledge-mode: manual  # 手动确认模式concurrency: 10           # 消费者并发数max-concurrency: 20       # 最大消费者并发数
3. RabbitMQConfig.java 配置类

定义 RabbitMQ 的配置类,用于声明队列、交换机和绑定关系:

import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class RabbitMQConfig {@Beanpublic Queue orderQueue() {return QueueBuilder.durable("order_queue").withArgument("x-max-length", 10000)  // 设置最大长度为10000.withArgument("x-overflow", "drop-head")  // 当队列满时丢弃最早的未消费消息.build();}@Beanpublic CustomExchange delayExchange() {Map<String, Object> args = new HashMap<>();args.put("x-delayed-type", "direct");return new CustomExchange("delayed_exchange", "x-delayed-message", true, false, args);}@Beanpublic Binding binding(Queue orderQueue, CustomExchange delayExchange) {return BindingBuilder.bind(orderQueue).to(delayExchange).with("order_routing_key").noargs();}
}

四、生产者发送消息

1. OrderProducer.java

编写生产者代码,将订单信息作为消息发送到 order_queue 中:

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.core.MessagePostProcessor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class OrderProducer {private final RabbitTemplate rabbitTemplate;@Autowiredpublic OrderProducer(RabbitTemplate rabbitTemplate) {this.rabbitTemplate = rabbitTemplate;}public void sendOrder(String orderData) {System.out.println(" [x] Sent order: " + orderData);rabbitTemplate.convertAndSend("delayed_exchange", "order_routing_key", orderData);}public void sendDelayedOrder(String orderData, long delayTime) {System.out.println(" [x] Sent delayed order: " + orderData + " with delay: " + delayTime + " ms");// 设置消息后处理器,添加延迟时间MessagePostProcessor messagePostProcessor = message -> {message.getMessageProperties().setHeader("x-delay", delayTime);return message;};rabbitTemplate.convertAndSend("delayed_exchange", "order_routing_key", orderData, messagePostProcessor);}
}
2. OrderController.java

编写控制器以接收 HTTP 请求并调用生产者发送消息:

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RestController;@RestController
public class OrderController {private final OrderProducer orderProducer;@Autowiredpublic OrderController(OrderProducer orderProducer) {this.orderProducer = orderProducer;}@PostMapping("/submitOrder")public ResponseEntity<String> submitOrder(@RequestBody String orderData) {orderProducer.sendOrder(orderData);return ResponseEntity.ok("Order submitted successfully!");}@PostMapping("/submitDelayedOrder")public ResponseEntity<String> submitDelayedOrder(@RequestBody String orderData, @RequestParam long delayTime) {orderProducer.sendDelayedOrder(orderData, delayTime);return ResponseEntity.ok("Delayed order submitted successfully!");}
}

五、消费者处理消息

1. OrderConsumer.java

编写消费者代码,从队列中获取消息并处理订单:

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;@Service
public class OrderConsumer {private static final Logger logger = LoggerFactory.getLogger(OrderConsumer.class);@RabbitListener(queues = "order_queue")public void receiveOrder(String orderData) {logger.info("Received order: {}", orderData);processOrder(orderData);}private void processOrder(String orderData) {logger.info("Processing order: {}", orderData);try {// 模拟订单处理逻辑Thread.sleep(2000);  // 模拟处理时间} catch (InterruptedException e) {Thread.currentThread().interrupt();}}
}

六、测试与验证

1. 启动 RabbitMQ 服务
docker start rabbitmq
2. 编译并启动 Spring Boot 应用程序
mvn spring-boot:run
3. 使用 Postman 或 curl 测试订单提交接口
提交普通订
提交延时订单
curl -X POST 
http://localhost:8080/submitDelayedOrder?delayTime=5000 
-H "Content-Type: application/json" 
-d '{"user_id": 12345, "product_id": 67890, "quantity": 2, "price": 199.99}'1. curl
curl 是一个用于在不同协议之间传输数据的命令行工具。它支持多种协议,包括HTTP、HTTPS、FTP等。在这个例子中,它被用来发送HTTP请求。
2. -X POST
-X 参数允许您指定HTTP请求的方法。这里使用的是POST方法,通常用于向服务器提交数据或更新资源。
3. http://localhost:8080/submitDelayedOrder?delayTime=5000
这是目标URL,表示请求将被发送到运行在本地机器(localhost)上的服务,监听端口为8080。路径/submitDelayedOrder指定了API的具体端点,而查询参数delayTime=5000可能指示该订单将会延迟5秒(5000毫秒)处理。
4. -H "Content-Type: application/json"
-H 标志用于添加HTTP头信息。这里的头信息指定了内容类型为application/json,意味着请求体中的数据将以JSON格式进行编码。
5. -d '{"user_id": 12345, "product_id": 67890, "quantity": 2, "price": 199.99}'
-d 参数用于指定HTTP请求的数据体。在这个例子中,数据是以JSON格式提供的,包含用户ID、产品ID、购买数量和单价的信息。

查看控制台输出,确认消息被发送到队列并由消费者处理。

七、优化与扩展

1. 动态调整消费者数量

为了动态调整消费者的数量,可以使用 Kubernetes 的 Horizontal Pod Autoscaler (HPA) 来根据队列长度自动扩展消费者实例。例如:

Kubernetes Deployment YAML 文件

apiVersion: apps/v1
kind: Deployment
metadata:name: order-consumer
spec:replicas: 3  # 初始副本数selector:matchLabels:app: order-consumertemplate:metadata:labels:app: order-consumerspec:containers:- name: order-consumerimage: your-order-consumer-imageenv:- name: SPRING_RABBITMQ_HOSTvalue: "rabbitmq-service"resources:requests:memory: "64Mi"cpu: "250m"limits:memory: "128Mi"cpu: "500m"
---
apiVersion: v1
kind: Service
metadata:name: rabbitmq-service
spec:selector:app: rabbitmqports:- protocol: TCPport: 5672targetPort: 5672

自动扩展策略

使用 Horizontal Pod Autoscaler (HPA) 来根据队列长度自动扩展消费者实例:

kubectl autoscale deployment order-consumer --min=3 --max=10 --cpu-percent=80
2. 监控与报警

为了确保系统的稳定性,还需要对 RabbitMQ 进行监控和报警。可以使用 Prometheus 和 Grafana 来监控 RabbitMQ 的状态,并设置报警规则。

Prometheus Adapter 配置

为了监控 RabbitMQ 队列长度,需要安装 Prometheus Adapter:

# custom-metrics-config-map.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: adapter-config
data:config.yaml: |rules:- seriesQuery: '{__name__="rabbitmq_queue_messages", queue="order_queue"}'seriesFilters: []resources:overrides:namespace:resource: namespacepod:resource: podname:matches: ""as: "rabbitmq_queue_length"metricsQuery: sum(rabbitmq_queue_messages{queue="order_queue"})

应用配置并更新 HPA 规则:

kubectl apply -f custom-metrics-config-map.yaml
kubectl apply -f hpa-custom-metrics.yaml

其中,hpa-custom-metrics.yaml 文件定义了如何基于自定义指标进行扩展:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:name: order-consumer-hpa
spec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: order-consumerminReplicas: 3maxReplicas: 10metrics:- type: Podspods:metric:name: rabbitmq_queue_lengthtarget:type: AverageValueaverageValue: 5000
3. 日志记录与分析

为了更好地排查问题和优化系统性能,建议启用日志记录和分析功能。可以使用 ELK Stack(Elasticsearch, Logstash, Kibana)来进行日志管理和分析。

OrderConsumer.java 中添加日志记录

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;@Service
public class OrderConsumer {private static final Logger logger = LoggerFactory.getLogger(OrderConsumer.class);@RabbitListener(queues = "order_queue")public void receiveOrder(String orderData) {logger.info("Received order: {}", orderData);processOrder(orderData);}private void processOrder(String orderData) {logger.info("Processing order: {}", orderData);try {// 模拟订单处理逻辑Thread.sleep(2000);  // 模拟处理时间} catch (InterruptedException e) {Thread.currentThread().interrupt();}}
}

使用 ELK Stack 进行日志分析

ELK Stack(Elasticsearch, Logstash, Kibana)是一个强大的日志管理和分析工具集。你可以将日志集中存储在 Elasticsearch 中,并通过 Kibana 进行可视化分析。

八、高级特性与最佳实践

1. 消息确认机制

为了确保消息可靠传递,可以使用手动确认机制。修改 OrderConsumer.java 中的消息监听器:

@RabbitListener(queues = "order_queue", ackMode = "MANUAL")
public void receiveOrder(Channel channel, Message message, String orderData) throws IOException {logger.info("Received order: {}", orderData);try {processOrder(orderData);channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);} catch (Exception e) {channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true);}
}
2. 消息重试机制

当消费者处理失败时,可以设置重试机制。可以在 application.yml 中配置重试策略:

spring:rabbitmq:listener:simple:retry:enabled: trueinitial-interval: 1000max-attempts: 3max-interval: 10000multiplier: 2
3. 消息持久化

为了防止 RabbitMQ 重启导致消息丢失,可以将消息设置为持久化:

MessagePostProcessor messagePostProcessor = message -> {message.getMessageProperties().setHeader("x-delay", delayTime);message.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT);return message;
};

总结

通过上述步骤,我们实现了基于 RabbitMQ 的流量削峰填谷系统,并利用 RabbitMQ 的延时消息插件处理延迟消息。

相关文章:

使用RabbitMQ实现流量削峰填谷

原理 流量削峰填谷是指在面对突发的高流量时&#xff0c;通过消息队列将瞬时大量请求暂时存储起来&#xff0c;并逐步处理这些请求&#xff0c;从而避免系统过载。RabbitMQ 作为消息中间件可以很好地支持这一需求&#xff0c;特别是结合其延时消息插件&#xff08;rabbitmq_de…...

Apache Commons Lang3 和 Commons Net 详解

目录 1. Apache Commons Lang3 1.1 什么是 Apache Commons Lang3&#xff1f; 1.2 主要功能 1.3 示例代码 2. Commons Net 2.1 什么是 Commons Net&#xff1f; 2.2 主要功能 2.3 示例代码 3. 总结 3.1 Apache Commons Lang3 3.2 Commons Net 3.3 使用建议 4. 参考…...

ACE学习2——write transaction

用于处理缓存行的数据更新到主内存&#xff08;main memory&#xff09;的操作。 以下是用于更新主内存的几种事务类型&#xff1a; WriteBack&#xff1a; WriteBack事务用于将cache中的dirty态的cacheline写回主存&#xff0c;以释放cache中的cacheline&#xff0c;用于存…...

mac本地安装运行Redis-单机

记录一下我以前用的连接服务器的跨平台SSH客户端。 因为还要准备毕设...... 服务器又过期了&#xff0c;只能把redis安装下载到本地了。 目录 1.github下载Redis 2.安装homebrew 3.更新GCC 4.自行安装Redis 5.通过 Homebrew 安装 Redis 安装地址&#xff1a;https://git…...

sparkTTS window 安装

SparkTTS 的简介 Spark-TTS是一种基于SpardAudio团队提出的 BiCodec 构建的新系统&#xff0c;BiCodec 是一种单流语音编解码器&#xff0c;可将语音策略性地分解为两种互补的标记类型&#xff1a;用于语言内容的低比特率语义标记和用于说话者特定属性的固定长度全局标记。这种…...

颠覆语言认知的革命!神经概率语言模型如何突破人类思维边界?

颠覆语言认知的革命&#xff01;神经概率语言模型如何突破人类思维边界&#xff1f; 一、传统模型的世纪困境&#xff1a;当n-gram遇上"月光族难题" 令人震惊的案例&#xff1a;2012年Google语音识别系统将 用户说&#xff1a;“我要还信用卡” 系统识别&#xff…...

大语言模型从理论到实践(第二版)-学习笔记(绪论)

大语言模型的基本概念 1.理解语言是人工智能算法获取知识的前提 2.语言模型的目标就是对自然语言的概率分布建模 3.词汇表 V 上的语言模型&#xff0c;由函数 P(w1w2 wm) 表示&#xff0c;可以形式化地构建为词序列 w1w2 wm 的概率分布&#xff0c;表示词序列 w1w2 wm…...

2.1 Vite + Vue 3 + TS 项目脚手架深度配置

文章目录 **一、环境准备与技术选型****二、项目初始化与基础架构****三、工程化配置深度优化****四、代码规范与质量保障****五、Vue 3 深度集成****六、TypeScript 高级配置****七、第三方库集成****八、构建优化策略****九、企业级最佳实践****十、扩展配置参考****本章核心…...

deepin安装rust

一、环境 操作系统&#xff1a;deepin V23 二、下载离线安装包 下载链接&#xff1a; https://forge.rust-lang.org/infra/other-installation-methods.html https://static.rust-lang.org/dist/rust-1.85.0-x86_64-unknown-linux-gnu.tar.xz 当时最新稳定版本为1.85。 三、解…...

【愚公系列】《Python网络爬虫从入门到精通》045-Charles的SSL证书的安装

标题详情作者简介愚公搬代码头衔华为云特约编辑&#xff0c;华为云云享专家&#xff0c;华为开发者专家&#xff0c;华为产品云测专家&#xff0c;CSDN博客专家&#xff0c;CSDN商业化专家&#xff0c;阿里云专家博主&#xff0c;阿里云签约作者&#xff0c;腾讯云优秀博主&…...

UniApp 运行的微信小程序如何进行深度优化

UniApp 运行的微信小程序如何进行深度优化 目录 引言性能优化 1. 减少包体积2. 优化页面加载速度3. 减少 setData 调用4. 使用分包加载 代码优化 1. 减少不必要的代码2. 使用条件编译3. 优化图片资源 用户体验优化 1. 优化交互体验2. 预加载数据3. 使用骨架屏 调试与监控 1. …...

Hadoop安装文件解压报错:无法创建符号链接。。。

您可能需要管理员身份运行winRAR; 客户端没有所需的特权&#xff1b; cmd进入该目录下&#xff0c;输入命令(本地解压)&#xff1a;start winrar x -y hadoop-2.10.1.tar.gz...

Redis6.2.6下载和安装

简介 Redis 是一种开源&#xff08;BSD 许可&#xff09;、内存中数据结构存储&#xff0c;用作数据库、缓存和消息代理。Redis 提供了数据结构&#xff0c;例如字符串、散列、列表、集合、带有范围查询的排序集合、位图、超级日志、地理空间索引和流。Redis 内置复制、Lua 脚…...

【AI】神经网络|机器学习——图解Transformer(完整版)

Transformer是一种基于注意力机制的序列模型,最初由Google的研究团队提出并应用于机器翻译任务。与传统的循环神经网络(RNN)和卷积神经网络(CNN)不同,Transformer仅使用自注意力机制(self-attention)来处理输入序列和输出序列,因此可以并行计算,极大地提高了计算效率…...

超过 37000 台 VMwareESXi 服务器可能受到持续攻击威胁

近日&#xff0c;威胁监测平台影子服务器基金会&#xff08;The Shadowserver Foundation&#xff09;发布报告&#xff0c;指出超 3.7 万个互联网暴露的威睿&#xff08;VMware&#xff09;ESXi 实例存在严重安全隐患&#xff0c;极易受到 CVE-2025-22224 漏洞的攻击。该漏洞属…...

多宠识别:基于计算机视觉的智能宠物管理系统架构解析

一、行业痛点与技术方案演进 在多宠家庭场景中&#xff0c;传统方案面临三大技术瓶颈&#xff1a; 1. 生物特征混淆&#xff1a;同品种/毛色宠物识别准确率低于65% 2. 动态场景适应&#xff1a;进食/奔跑状态下的误检率达30% 3. 数据孤岛问题&#xff1a;离线设备无法实现持续…...

mobaxterm,闪退处理方法

mobaxterm&#xff0c;使用过程中突然闪退&#xff0c; 具体表现为&#xff1a;登录远程服务器成功&#xff0c;开始闪退 登录失败不闪退 一开始以为是&#xff0c;服务器做了控制&#xff0c;后来才发现是mobaxterm软件的问题。 问题解决方法&#xff1a; 勾选工具ssh&…...

文件系统文件管理

文件缓冲区&#xff08;内核级&#xff0c;OS内部的&#xff09;存在的意义&#xff1a;系统调用将数据写入缓冲区后函数即可返回&#xff0c;是从内存到内存的&#xff0c;提高了程序的效率。之后将缓冲区数据刷新到硬盘则是操作系统的事了。无论读写&#xff0c;OS都会把数据…...

Vue 实现AI对话和AI绘图(AIGC)人工智能

我司是主要是负责AIGC人工智能化平台的项目&#xff0c;俗称内容创作及智能工具平台。 授人以鱼不如授人以渔 首先我们要明白AIGC中前端需要做什么 会用到哪些技术栈 。 AIGC前端需要用到的技术栈:Vue&#xff0c;Markdown&#xff0c;SSE。就这个三件套。 前沿:有人觉得AI对…...

Python | 机器学习中最常用的超参数及使用示例

在机器学习中&#xff0c;超参数是用于控制机器学习模型训练过程的外部配置。它们是在训练开始之前配置的设置参数&#xff0c;并在整个过程中保持不变。您应该了解一些常用于优化机器学习模型的超参数。本文将带您了解机器学习中最常用的超参数以及如何在Python中使用它们。 …...

本地部署DeepSeek R1大数据模型知识库

DeepSeek-V3 的综合能力 DeepSeek-V3 在推理速度上相较历史模型有了大幅提升。在目前大模型主流榜单中&#xff0c;DeepSeek-V3 在开源模型中位列榜首&#xff0c;与世界上最先进OpenAI 闭源模型不分伯仲。 1、下载Ollama运行大数据库 Ollama支持 Llama 3.3, DeepSeek-R1, Phi-…...

【C++】C++入门基础

C&#xff08;C plus plus&#xff09; 是一种计算机高级程序设计语言&#xff0c;既可以进行 C语言 的过程化程序设计&#xff0c;又可以进行以抽象数据类型为特点的基于对象的程序设计&#xff0c;还可以进行以继承和多态为特点的面向对象的程序设计。 文章目录 前言一、C 的…...

【Linux文件IO】标准IO详情(1)

目录 一、前言 1.1 文件类型 1.2 流(FILE)介绍 1.3 文本流和二进制流的区别 二、相关API介绍 2.1 fopen 2.2 fclose 2.3 perror 2.4 fgetc 2.5 fputc 2.6 fgets 2.7 fputs 2.8 fread 2.9 fwrite 一、前言 标准IO基于系统IO实现&#xff0c;通过缓冲机制减少系统调…...

店匠科技携手 PayPal 升级支付体验,助力独立站商家实现全球增长

在全球化电商竞争加剧的背景下,独立站为无数商户插上了通向事业成功的翅膀。然而,搭建店铺框架容易,真正实现有效运营却充满挑战。只有当各个环节如齿轮般严丝合缝,独立站运营才能更好地助推行进,实现稳健增长。如今,独立站商家面临着全链路运营的多重挑战。从品牌塑造、营销推…...

使用 Elastic-Agent 或 Beats 将 Journald 中的 syslog 和 auth 日志导入 Elastic Stack

作者&#xff1a;来自 Elastic TiagoQueiroz 我们在 Elastic 一直努力将更多 Linux 发行版添加到我们的支持矩阵中&#xff0c;现在 Elastic-Agent 和 Beats 已正式支持 Debian 12&#xff01; 本文演示了我们正在开发的功能&#xff0c;以支持使用 Journald 存储系统和身份验…...

模板方法模式的C++实现示例

核心思想 模板方法设计模式是一种行为设计模式&#xff0c;它定义了一个算法的框架&#xff0c;并将某些步骤的具体实现延迟到子类中。通过这种方式&#xff0c;模板方法模式允许子类在不改变算法结构的情况下重新定义算法的某些步骤。 模板方法模式的核心在于&#xff1a; ​…...

docker无法pull镜像问题解决for win10

docker无法pull镜像问题解决for win10 问题原因分析解决方法 问题 在win10系统上安装好doker-desktop后ping registry-1.docker.io不同&#xff0c;并且也无法登陆hub.docker.com, 使用docker pull xx也无法正常下载 原因分析 hub.docker.com在2024年5月之后&#xff0c;国内…...

Docker数据管理,端口映射与容器互联

1.Docker 数据管理 在生产环境中使用 Docker&#xff0c;往往需要对数据进行持久化&#xff0c;或者需要在多个容器之间进行数据共享&#xff0c;这必然涉及容器的数据管理操作。 容器中的管理数据主要有两种方式&#xff1a; 数据卷&#xff08;Data Volumns&#xff09;&a…...

R语言使用scitable包交互效应深度挖掘一个陌生数据库

很多新手刚才是总是觉得自己没什么可以写的&#xff0c;自己不知道选什么题材进行分析&#xff0c;使用scitable包后这个完全不用担心&#xff0c;选题多到你只会担心你写不完&#xff0c;写得不够快。 今天演示一下使用scitable包深度挖掘一个陌生数据库 先导入R包和数据 li…...

复试难度,西电卓越工程师学院(杭研院)考研录取情况

01、卓越工程师学院各个方向 02、24卓越工程师学院&#xff08;杭研院&#xff09;近三年复试分数线对比 PS&#xff1a;卓越工程师学院分为广研院、杭研院 分别有新一代电子信息技术、通信工程、集成电路工程、计算机技术、光学信息工程、网络信息安全、机械&#xff0c;这些…...

STM32之I2C硬件外设

注意&#xff1a;硬件I2C的引脚是固定的 SDA和SCL都是复用到外部引脚。 SDA发送时数据寄存器的数据在数据移位寄存器空闲的状态下进入数据移位寄存器&#xff0c;此时会置状态寄存器的TXE为1&#xff0c;表示发送寄存器为空&#xff0c;然后往数据控制寄存器中一位一位的移送数…...

linux docker相关指令

1、镜像操作 0&#xff09;、搜索&#xff1a;docker search 镜像名称 1&#xff09;、拉取&#xff1a;docker pull 2&#xff09;、推送&#xff1a;docker push 3&#xff09;、查看&#xff1a;docker images 4&#xff09;、查看所有镜像ID&#xff1a;d…...

信息安全之构建FTP服务器证书

以下是完整的文章&#xff0c;包含所有步骤和最后一节的参考文章部分&#xff1a; 在 Ubuntu 中安装和配置 FTPS 服务器的详细指南 1. 安装 vsftpd 首先&#xff0c;确保你的系统是最新的&#xff0c;然后安装 vsftpd&#xff1a; sudo apt update sudo apt install vsftpd•…...

(更新完)LPZero: Language Model Zero-cost Proxy Search from Zero

LPZero代码 摘要 神经架构搜索 (NAS) 有助于自动执行有效的神经网络搜索&#xff0c;同时需要大量的计算资源&#xff0c;尤其是对于语言模型。零样本 NAS 利用零成本 (ZC) 代理来估计模型性能&#xff0c;从而显着降低计算需求。然而&#xff0c;现有的 ZC 代理严重依赖于深…...

第六次CCF-CSP认证(含C++源码)

第六次CCF-CSP认证 数位之和&#xff08;easy&#xff09;思路及AC代码遇到的问题 开心消消乐&#xff08;easy&#xff09;思路及AC代码 画图&#xff08;mid&#xff09;思路及AC代码 数位之和&#xff08;easy&#xff09; 题目链接 思路及AC代码 既然题目要求我们输出各位…...

Spring Boot框架总结(超级详细)

前言 本篇文章包含Springboot配置文件解释、热部署、自动装配原理源码级剖析、内嵌tomcat源码级剖析、缓存深入、多环境部署等等&#xff0c;如果能耐心看完&#xff0c;想必会有不少收获。 一、Spring Boot基础应用 Spring Boot特征 概念&#xff1a; 约定优于配置&#…...

Dify平台部署记录

安装dify项目 官网地址&#xff1a;http://difyai.com/ github地址&#xff1a;https://github.com/langgenius/dify 下载项目&#xff1a; git clone https://github.com/langgenius/dify.git下载过慢&#xff0c;直接访问网页下载zip压缩包&#xff1a; 解压&#xff0c;…...

c++ 调用 gurobi 库,cmake,mac

gurobi 一般使用 python 调用&#xff0c;官方的培训会议及资料大部分也都基于 python。 由于最近上手了 c&#xff0c;因此想试试 c 怎么调用 gurobi。但我发现&#xff0c;c 调用第三方库比 python 或 java 要复杂不少。python 中直接 import 第三方库&#xff0c;java 加载…...

Redis 发布订阅模式详解:实现高效的消息通信

目录 引言 1. 什么是 Redis 发布订阅模式&#xff1f; 1.1 定义 1.2 核心概念 2. Redis 发布订阅的工作原理 2.1 基本流程 2.2 示例 2.3 频道与模式订阅 3. Redis 发布订阅的使用场景 3.1 实时消息通知 3.2 事件驱动架构 3.3 日志收集与分发 3.4 分布式锁与协调 4…...

React Native 0.76 升级后 APK 体积增大的原因及优化方案

在将 React Native 从 0.71 升级到 0.76 后&#xff0c;打包体积从 40 多 MB 增加到了 80 MB。经过一系列排查和优化&#xff0c;最终找到了解决方案&#xff0c;并将优化过程整理如下。 1. React Native 0.76 体积增大的可能原因 (1) 新架构默认启用 React Native 0.76 默认…...

Java直通车系列14【Spring MVC】(深入学习 Controller 编写)

目录 基本概念 编写 Controller 的步骤和要点 1. 定义 Controller 类 2. 映射请求 3. 处理请求参数 4. 调用业务逻辑 5. 返回响应 场景示例 1. 简单的 Hello World 示例 2. 处理路径变量和请求参数 3. 处理表单提交 4. 处理 JSON 数据 5. 异常处理 基本概念 Cont…...

文章被检测出是AI写的怎么办?

随着人工智能技术的飞速发展&#xff0c;AI辅助写作工具逐渐普及&#xff0c;为学生、科研人员以及创作者带来了诸多便利。然而&#xff0c;随之而来的是对学术诚信和内容原创性的担忧。当文章被检测出是AI写作时&#xff0c;应该如何应对&#xff1f;本文将探讨这一问题&#…...

Linux教学总目录

Linux教学总目录&#xff1a; 1、Linux常见指令 2、Linux权限理解 3、Linux环境基础开发工具使用...

SpringBoot(1)——创建SpringBoot项目的方式

目录 1、idea直接从spring.io官网下载即可 ​编辑2、 自己从spring官网下载再用idea打开 3、Idea从阿里云的官网&#xff08;https://start.aliyun.com&#xff09;下载打开 4、Maven项目改造成springboot项目 我的平台是idea2021 Spring Boot 由 Pivotal 团队开发&#xff…...

Oracle数据恢复:闪回查询

Oracle数据恢复:闪回查询 SQL语法闪回查询:AS OF闪回版本查询:VERSIONS BETWEEN数据恢复示例闪回查询最佳实践应用场景使用限制注意事项最佳实践在误删除业务数据时,Oracle数据库通常支持以下几种数据恢复途径。 闪回查询(Flashback Query):闪回查询通过查询系统的UNDO数…...

LiveCommunicationKit OC 实现

一、实现效果: ‌ LiveCommunicationKit‌是苹果公司在iOS 17.4、watchOS 10.4和visionOS 1.1中引入的一个新框架,旨在优化VoIP通话的交互体验。该框架提供了与...

django中路由配置规则的详细说明

在 Django 中,路由配置是将 URL 映射到视图函数或类视图的关键步骤,它决定了用户请求的 URL 会触发哪个视图进行处理。以下将详细介绍 Django 中路由配置的规则、高级使用方法以及多个应用配置的规则。 基本路由配置规则 1. 项目级路由配置 在 Django 项目中,根路由配置文…...

机器学习基础(4)

超越基于常识的基准 除了不同的评估方法&#xff0c;还应该利用基于常识的基准。训练深度学习模型就好比在平行世界里按下发射火箭的按钮&#xff0c;你听不到也看不到。你无法观察流形学习过程&#xff0c;它发生在数千维空间中&#xff0c;即使投影到三维空间中&#xff0c;…...

技术的魅力与价值

区块链技术正改变公益事业。它能极大提高公益透明度和公信力。通过区块链&#xff0c;每一笔捐款的流向都清晰可查&#xff0c;无法篡改&#xff0c;让捐赠者放心。比如某公益平台利用区块链记录捐赠信息&#xff0c;大家随时能看到善款使用情况。还有些项目用区块链追踪物资发…...

【报错】微信小程序预览报错”60001“

1.问题描述 我在微信开发者工具写小程序时&#xff0c;使用http://localhost:8080是可以请求成功的&#xff0c;数据全都可以无报错&#xff0c;但是点击【预览】&#xff0c;用手机扫描二维码浏览时&#xff0c;发现前端图片无返回且报错60001&#xff08;打开开发者模式查看日…...