【从零开始学习RabbitMQ | 第二篇】生成交换机到MQ的可靠性保障
目录
编辑前言
交换机
Direct交换机与Fanout交换机的差异
Topic交换机
Topic交换机相比Direct交换机的差异
生成我们的交换机,队列,以及绑定关系
基于代码去生成交换机和队列
基于注解去声明队列和交换机
消息转换器
消息队列的高可靠性
发送者可靠性
发送者重连
发送者确认机制
发送者确认机制的写法
数据持久化
Lazy Queue
消费者确认机制
消费者重试机制
业务的幂等性
延时消息
延时消息插件
下载
死信交换机
总结
前言
这是我在学习rabbitMQ所进行的记录,这章我主要学习了RabbitMQ的交换机生成,以及如何保障我们消息队列MQ的安全性,本文章所借鉴的图片主要为黑马视频,主要文章学习来自csdn,b站等。在学习一门新技术的过程中,我们要先会使用,从整体上去大概了解这门技术,然后我们再抽丝剥茧的去学习,这样不仅会让我们有学习全局观,还会更能理解使用场景,事半功倍。
交换机
什么时候会有这样子的需求呢:就比如我们在电商项目中,用户下单玩去支付,并且支付成功,我们就可以去异步通知我们的交易服务,积分服务等等。但是如果取消订单那么我们就不用发送给通知服务,积分服务了,这时候就用到了定向路由
Direct交换机与Fanout交换机的差异
- anout交换机将消息路由给每一个与之绑定的队列
- Direct交换机根据RoutingKey判断路由给哪个队列
- 如果多个队列具有相同RoutingKey,则与Fanout功能类似
Topic交换机
Topic交换机相比Direct交换机的差异
- Topic的RoutingKey和bindingKey可以是多个单词,以.分割
- Topic交换机与队列绑定时的bindingKey可以指定通配符
- #:代表0个或多个词
- *:代表1个词
可以使用通配符,routingkey和bindingkey可以多个单词
就比如写两个bindingkey,china.#,和#.news,再对应绑定两个队列,这时候发送routingkey,china.news就所有绑定队列都可以收到
生成我们的交换机,队列,以及绑定关系
基于代码去生成交换机和队列
通过工厂类去构建我们的队列,交换机,以及我们的绑定关系。当然交换机和队列也可以使用new的方法,很多人说通过注解更加方便,就不去学习我们根据bean的方法生成交换机,队列,和绑定关系了,但是其实后面无论是我们自己生成私信交换机需要使用,在引入延时插件和lazyqueue的时候我们也需要去主动声明。
基于注解去声明队列和交换机
消息转换器
对消息对象的默认处理是由jdk的序列化实现的
Spring的对消息对象的处理是由org.springframework.amqp.support.converter.MessageConverter来处理的。而
默认实现是SimpleMessageConverter,基于JDK的ObjectOutputStream完成序列化。
存在下列问题:
- JDK的序列化有安全风险
- JDK序列化的消息太大
- JDK序列化的消息可读性差,太长了很难去读
推荐使用json序列化,万物难读用Json,Json真是java的最好伙伴呀
引入依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
再consumer和publisher里面都要去配置我们的消息转换器
@Bean
public MessageConverter messageConverter(){
return new Jackson2JsonMessageConverter();}
消息队列的高可靠性
终于来到我们的消息队列高级可靠性篇章了,这一次我们将用多种机制去保障我们的消息队列可靠性,守护甚多,从发送者,接收者,mq本身,构建出了一套高安全性的mq机制
使用消息队列进行异步操作,可能出现的安全问题,主要来自于我们的发送者出现问题,消息队列出现安全问题,消费者出现安全问题
我们要学的就是如何使用mq去实现我们异步操作的高可靠性
发送者可靠性
发送者重连
配置yml文件的retry配置
由于发送者重试机制是阻塞式的重试,也就是我们再重试等待的过程中当前线程是阻塞的 ,会影响业务性能
默认连接超时时间是1s,默认等待重连实践是1s
发送者确认机制
返回nack的情况就是,我们的消息没有发送到我们的交换机里面,我们的消息发送成功了但是没有持久化到我们的持久化队列
发送者确认机制的写法
1.首先我们需要先去配置如同上文
首先我们需要在我们的yml文件当中去处理我们的配置信息,就比如我们的发送者确认机制和我们的发送者返回机制
2.因为一个发送者只能由一个return callback 所以我们采取使用配置类的方式去书写我们的返回回调函数
写config包
写我们的配置类,配置我们的 returncallback,这里我们采用了@PostConstructor 因为我们期望在bean创建好之后我们就会立刻去注入我们的返回回调函数
ctrl + p 可以知道我们要填入什么函数
3.然后我们可以去写我们的confirm callback 函数,这里我们要使用这个函数 注意cd 就是我们写的
cd 是correlationdata类型的我们可以nwe一个注意要给这个函数一个唯一id,这里用简单的唯一id;
然后我们就可以用cd。getfuture addcallback函数了,可以参考如下写法
数据持久化
*我们使用注解去创建的交换机和我们的队列默认是持久化的。
可以自定义的去构建非持久化消息
当我们消息发送过多,由于内存有限,消费者处理不过来,就会出现消息挤压,引起mq阻塞
每一次我们消息太多了要吧内存中的数据写到我们的磁盘中去,就是pageout,我们mq的吞吐能力直接降为0,直接阻塞
如果我们采用消息持久化呢?
看起来我们消息队列不会突然阻塞了,而且吞吐量还很平稳和高
Lazy Queue
因为我们lazyqueue的消息直接存储在我们的磁盘当中,所以不会出现我们的消息丢失问题,同时mq还对我们的磁盘io进行了优化
使用bean去创建我们的lazyqueue
lazyqueue的并发能力更强
使用lazyqueue不管如何消息都是持久化的
消费者确认机制
一般选择auto模式因为这个模式方便开发
throw MessageConvertException 如果抛出这个异常的话,那么我们消费者就会给mq消息队列返回reject,将消息删除
消费者重试机制
和我们的publisher发送者重试机制类似
代码可以这么写,然后我们就声明了一个处理error信息的交换机和队列,重点是我们的messagerecoverer的方法实现
业务的幂等性
幂等性就是我们的业务无论调用多少次,对我们业务状态的影响是一致的
在配置我们的消息转换器的时候我们可以去配置自动生成我们的唯一id
使用唯一消息id去实现我们业务的幂等性会存在如下问题,就比如会影响我们系统的性能,额外的mysql操作,业务侵入
这样可以实现无侵入式的去实现我们业务的幂等性
延时消息
延时消息就可以帮我们去实现我们的消息在交换机中去暂时存储,延时发送到我们的业务中去,可以保证我们消息发送如果出现不可抗因素而无法更新业务状态时,保障业务之间的状态一致性
延时消息插件
非常推荐非常推荐使用插件去实现我们的延时业务,因为我们如果使用死信交换机的话会有很多细节需要注意,一不小心就配置错误了
官方文档说明:
https://blog.rabbitmq.com/posts/2015/04/scheduling-messages-with-rabbitmq
下载
插件下载地址:
https://github.com/rabbitmq/rabbitmq-delayed-message-exchange
由于我们安装的MQ是3.8
版本,因此这里下载3.8.17
版本:
下载好后由于我们是基于docker部署的,所以我们去要去手动将我们的插件放到我们与之数据券挂载的地址
这里我们使用docker命令
docker volume ls
查看我们有那些数据券
docker volume inspect mq-plugins
进入容器中,更新我们的配置
然后我们就可以去更改我们的交换机配置了
设置过期时间
这是一个消息密集型操作,尽量避免在同一时刻有太多延迟消息的产生
死信交换机
当然我们的死信交换机还是很有价值的,在没有插件的情况下我们尽量也要受搓出来
死信:消息是一个国企消息,超时无人消费,或者我们的队列消息堆积满了,最早的消息可能成为死信,又或者我们消费者使用basic.reject,或者basic.nack声明消费失败,并且消息的requeue参数设置为false
总结
在学习 RabbitMQ 时,重点掌握了交换机类型及其应用,Direct、Fanout 和 Topic 交换机各有特点,可通过多种方式创建绑定;消息处理上,推荐使用 JSON 序列化替代 JDK 默认序列化以优化消息转换;为保障消息队列高可靠性,从发送者重连与确认机制、数据持久化(含 Lazy Queue 应用)、消费者确认与重试机制等多方面着手;此外,还学习了业务幂等性的实现、延时消息插件的使用以及死信交换机的原理与作用,这些知识共同构成了 RabbitMQ 从基础到高级特性的完整知识体系,有助于构建稳定高效的消息队列应用 。
就此我都RabbitMQ的基础知识学习就到这里了,之后我们还要将理论知识应用到实践当中去,这样才是真学会了!!!!!
当然其实我已经实践过了,只不过先写在了语雀平台上
相关文章:
【从零开始学习RabbitMQ | 第二篇】生成交换机到MQ的可靠性保障
目录 编辑前言 交换机 Direct交换机与Fanout交换机的差异 Topic交换机 Topic交换机相比Direct交换机的差异 生成我们的交换机,队列,以及绑定关系 基于代码去生成交换机和队列 基于注解去声明队列和交换机 消息转换器 消息队列的高可靠性 发送…...
在 Sheel 中运行 Spark:开启高效数据处理之旅
在大数据处理领域,Apache Spark 凭借其强大的分布式计算能力,成为了众多开发者和企业处理海量数据的首选工具之一。而 Sheel 作为一种便捷的运行环境,在其中运行 Spark 可以充分发挥两者优势,实现高效的数据处理与分析。本文将详细…...
前端、XSS(跨站脚本攻击,Cross-Site Scripting)
XSS 攻击的三种主要类型 存储型 XSS(持久型) 原理:恶意脚本被永久存储在服务器(如数据库、评论内容),用户访问包含恶意脚本的页面时触发示例:攻击者在论坛的评论区提交 ,其他用户查…...
第六节:图像基本操作-像素级操作
一、数字图像处理基础 1.1 图像数字化原理 数字图像本质上是二维离散信号,由按矩阵排列的像素点构成。每个像素点的数值代表特定位置的亮度或色彩信息... 1.2 OpenCV核心数据结构 import cv2 import numpy as np# 读取图像文件 img cv2.imread(image.jpg)# 获取…...
【东枫科技】代理销售 NVIDIA DGX Spark 您的桌上有一台 Grace Blackwell AI 超级计算机。
NVIDIA GB10 Grace Blackwell超级芯片 FP4 AI 性能达到 1,000 AI TOPS 128GB 一致、统一的系统内存 ConnectX-7 智能网卡 高达 4TB 存储空间 150毫米长 x 150毫米宽 x 50.5毫米高 NVIDIA DGX™ Spark 搭载 NVIDIA GB10 Grace Blackwell 超级芯片,以节能紧凑的外形提…...
即插即用!长安汽车复旦提出LMPOcc:长期记忆先验实现占用预测任务新SOTA
导读 在基于视觉的自动驾驶感知算法当中,3D语义占用预测任务可以出色的对静态场景和动态目标同时进行建模,实现细粒度的场景理解,目前受到了来自学术界和工业界的广泛关注。 ©️【深蓝AI】编译 论文题目:ConRFT: A Reinfo…...
Kubernetes弹性伸缩:让应用自动应对流量洪峰与低谷
🚀 Kubernetes弹性伸缩:让应用自动应对流量洪峰与低谷 🌍 什么是弹性伸缩? 弹性伸缩(Auto Scaling)是指系统能够根据实时负载自动调整计算资源,以优化性能并降低成本。在 Kubernetes࿰…...
深入解析 Linux/Unix 通信机制:从原理到观测实践
深入解析 Linux/Unix 通信机制:从原理到观测实践 配图建议:Linux系统架构与通信机制全景示意图 一、开篇:理解“一切皆文件”的哲学 Unix/Linux 操作系统的核心灵魂在于其独特的设计哲学。当 Dennis Ritchie 和 Ken Thompson 在贝尔实验室开…...
Vue 2.0 详解全教程(含 Axios 封装 + 路由守卫 + 实战进阶)
目录 一、Vue 2.0 简介1.1 什么是 Vue?1.2 Vue 2.x 的主要特性 二、快速上手2.1 引入 Vue2.2 创建第一个 Vue 实例 三、核心概念详解3.1 模板语法3.2 数据绑定3.3 事件绑定3.4 计算属性 & 侦听器 四、组件系统4.1 定义全局组件4.2 单文件组件(*.vue …...
《Python星球日记》 第36天:线性代数基础
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏:《Python星球日记》,限时特价订阅中ing 目录 一、标量、…...
使用 Spring Boot 构建 REST API
使用 Spring Boot 构建 REST API 使用 Spring Boot 构建 REST API1. Spring Initializr构建springboot2. API 合同 & JSONAPI 协定什么是 JSON? 3.先测试什么是测试驱动开发?测试金字塔Red, Green, Refactor 循环 4. 实施 GET…...
PHP分页显示数据,在phpMyadmin中添加数据
<?php $conmysqli_connect(localhost,root,,stu); mysqli_query($con,"set names utf8"); //设置字符集为utf8 $sql"select * from teacher"; $resultmysqli_query($con,$sql); $countmysqli_num_rows($result); //记录总条数$count。 $pagesize10;//每…...
Spring Boot操作MongoDB的完整示例大全
以下是基于Spring Boot操作MongoDB的完整示例大全,涵盖增删改查、聚合查询、索引、事务等核心功能: 一、基础CRUD操作 1. 环境配置 依赖配置(pom.xml) <dependency><groupId>org.springframework.boot</groupId…...
SpringCloud入门教程合集(1)-SpringCloud简介与Eureka+Feign实现服务注册中心、服务提供与服务消费
场景 SpringCloud 总体架构与核心子项目 SpringCloud 总体架构 1. 基础设施层 服务注册与发现:Eureka/Nacos 配置中心:Spring Cloud Config/Nacos 消息总线:Spring Cloud Bus 2. 服务通信层 负载均衡:Ribbon/LoadBalancer…...
【Linuc】深入理解 Linux 文件权限
文章目录 一、权限基础解析1. 权限三元组2. 权限类型与数字映射二、查看文件权限三、修改权限实战1. chmod 命令符号模式数字模式(推荐)2. chown 修改归属四、特殊权限机制1. SetUID (Set User ID)2. SetGID (Set Group ID)3. Sticky Bit五、高级权限管理1. 默认权限控制2. A…...
ExtraMAME:复古游戏的快乐“时光机”
嘿,小伙伴们!今天电脑天空要给大家安利一款超有趣的软件——ExtraMAME!如果你对复古街机游戏念念不忘,那它绝对能成为你的快乐源泉,带你瞬间穿越回那个充满游戏机的黄金时代。 ExtraMAME是一款基于MAME(Mu…...
没有 Mac,如何把 iOS App 成功上架?
开发者的 iOS 上架折腾记:没有 Mac,也能搞定? 最近在帮朋友把一个跨平台 Flutter 项目上架到 App Store,结果被 iOS 上架的那套流程卡得头都大了。其实这也不是第一次碰壁了——每次到“申请证书 打包 上传”的时候,…...
使用VMware Workstation pro 17.5.1在Windows上安装Ubuntu 24.04.2的 详细步骤
一、准备工作 1. 下载Ubuntu 24.04.2 ISO镜像 官方下载地址:Ubuntu 24.04.2 (Noble Numbat) 选择 ubuntu-24.04.2-desktop-amd64.iso(桌面版)或 ubuntu-24.04.2-live-server-amd64.iso(服务器版)。 2. 确认系统要求…...
栈与队列详解及模拟实现
目录 一、栈(Stack):后进先出 1.1 什么是栈 1.2 栈的使用 1.3 栈的模拟实现 1.4 栈的经典应用 二、队列(Queue):先进先出 2.1 什么是队列 2.2 队列的使…...
Cursor无法SSH远程连接服务器免密登录问题
在本地机器和Ubuntu服务器之间实现SSH远程免密连接,可按如下步骤操作: 1. 生成SSH密钥对 在本地机器上开启终端,使用以下命令生成SSH密钥对: ssh-keygen -t rsa按提示操作,一般直接回车,这样密钥会生成在…...
【Vue】全局事件总线 TodoList 事件总线
目录 一、 实现所有组件看到x事件 二、 实现$on $off 以及 $emit 总结不易~ 本章节对我有很大的收获, 希望对你也是!!! 本节素材已上传至Gitee:yihaohhh/我爱Vue - Gitee.com 全局事件总线图: 本节素材…...
动态规划背包问题
一、0-1背包问题 0-1背包问题就是给定n个物品和一个容量为C的背包,物品i的重量是Wi,其价值是Vi。问:应该如何选择装入背包的物品,使总价值最大且总重量不超过C? 1.确定状态表示 dp[i][j] 表示在背包容量为j时,从下标…...
ctfshow web入门 web49
信息收集 此%非彼%,%0a中的%不会被识别,因为识别之前就已经自动转化为了换行符 所以和之前一样的解法,没什么好说的 if(isset($_GET[c])){$c$_GET[c];if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|…...
AI+浏览器自动化:Nanobrowser Chrome 扩展的使用「详细教程」
AI+浏览器自动化:Nanobrowser Chrome 扩展的使用「详细教程」 一、前言二、Nanobrowser简介2.1 项目背景2.2 核心特性三、安装与配置3.1 安装方式3.1.1 Chrome Web Store安装3.1.2 手动安装最新版3.2 基本配置3.2.1 添加API Key3.2.2 选择模型3.2.3 其他设置四、核心功能详解4…...
【表设计】外键的取舍-分布式中逐渐消失的外键
在分布式大行其道的今天,为什么外键约束越来越少? 外键-数据链接带来强制完整性 在关系型数据库中,外键(Foreign Key)可以用于建立和强制两个表之间的数据链接。 在层次数据结构一篇的闭包表简单设计中,…...
HarmonyOS 5.0 分布式数据协同与跨设备同步
大家好,我是 V 哥。 使用 Mate 70有一段时间了,系统的丝滑使用起来那是爽得不要不要的,随着越来越多的应用适配,目前使用起来已经和4.3的兼容版本功能差异无碍了,还有些纯血鸿蒙独特的能力很是好用,比如&am…...
多行文本省略
方式1 兼容性不好 height: 100px; line-height: 25px; overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 4;方式2 利用浮动环绕、空白元素站位margin-top调整位置 <div class"wrap"><div class"more"…...
Adobe卸载清理工具Creative Cloud Cleaner Tool下载
Adobe Creative Cloud Cleaner Tool 是 Adobe 公司官方推出的一款卸载清理工具,主要用于清理 Creative Cloud 应用程序在安装、更新或卸载过程中可能遗留下来的错误配置文件、缓存、注册表项或其他系统级残留内容。相比一般的卸载程序,它更深入地处理系统…...
分布式、高并发-Day03
以下是 Day 3 详细学习内容(线程池拒绝策略实战:DiscardOldestPolicy与CallerRunsPolicy,30 分钟完整计划),包含策略原理、分步代码实战和场景解析: 📖 今日学习目标 掌握DiscardOldestPolicy…...
高等数学第四章---不定积分(4.4有理函数的不定积分2)
&4.4有理函数的不定积分2 篇幅有限制,例题的解答会占大量字符,html限制字符为22000个左右。这里继续探讨上文的有理函数的不定积分。 一、三角函数有理式的不定积分 由 sin x \sin x sinx, cos x \cos x cosx 以及常数经过有限次加、减、…...
C++中指针使用详解(4)指针的高级应用汇总
C 中指针的高级应用非常丰富,掌握这些内容能让你写出更高性能、更底层控制力强的代码。下面是应用模块梳理和例子讲解。 目录预览 函数指针与回调机制指针数组 vs 数组指针指针与类成员函数(成员函数指针)智能指针(unique_ptr, s…...
Java 8 非对称加密代码示例
以下是使用Java 8实现RSA非对称加密的完整代码示例,包括密钥生成、加密和解密过程。 1. 生成RSA密钥对 import java.security.*; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; import java.util.Base64; impor…...
Linux环境基础与开发工具使用
1. Linux编译器vim 1.1 vim的基本概念讲解 vim有很多种模式,我们初学者常用的就是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode)。 命令/正常模式(Normal mode) …...
【BUG】‘DetDataSample‘ object has no attribute ‘_gt_sem_seg‘
问题: 使用mmdetection框架使用COCO格式训练自定义数据集时,其中模型使用HTC模型时出现如下问题: AttributeError: ‘DetDataSample’ object has no attribute ‘_gt_sem_seg’. Did you mean: ‘gt_sem_seg’? results self(**data, mode…...
C# Winforms 本地化 多语言支持 字符串资源
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...
ts bug 找不到模块或相应类型的声明,@符有红色波浪线
解决方法:在env.d.ts文件中添加以下代码,这段代码是一个 TypeScript 的声明文件,用于让 TypeScript 知道如何处理 Vue 单文件组件(.vue 文件)的导入。 /// <reference types"vite/client" /> // 声明…...
赛灵思 XCZU11EG-2FFVC1760I XilinxFPGAZynq UltraScale+ MPSoC EG
XCZU11EG-2FFVC1760I 是 Zynq UltraScale MPSoC EG 系列中性能最强的器件之一,集成了四核 ARM Cortex-A53 应用处理器、双核 Cortex-R5 实时处理器与 Mali-400 MP2 GPU,并结合了 653,100 个逻辑单元与丰富的片上存储资源,可满足高性能计算、A…...
VSCode|IDEA|PyCharm无缝接入DeepSeek R1实现AI编程
文章目录 前言一、流程简介1. 获取DeepSeek R1的API密钥2. 在编程软件中下载安装 Continue 插件**IDEA**PyCharm 3. 配置Continue文件 二、使用体验利用 DeepSeek R1进行 AI 编程 前言 本文将介绍如何在 VSCode|IDEA|PyCharm 软件中接入 DeepSeek R1 实现 AI 编程,…...
深入浅出 PostgreSQL:从历史演进到高阶优化技术
引言 PostgreSQL 是一个免费开源的对象关系型数据库,既支持传统的 SQL 查询,也支持 JSON 等非关系数据类型,因其高度可扩展性和社区活跃度,已成为众多互联网、金融和企业级应用的首选数据库 (Introduction to PostgreSQL - W3Sch…...
塔能水泵节能方案:精准驱动工厂能耗优化
在工厂的能源消耗体系中,水泵作为关键的动力设备,其运行效率直接关系到整体能耗水平。传统水泵在长期运行中,受设计局限、工艺成本约束等因素影响,普遍存在效率低下、能源浪费严重的问题。塔能科技针对这一痛点,推出了…...
SSCLMD模型代码实现详解
SSCLMD模型代码实现详解 1. 项目源码结构 SSCLMD项目的源码结构如下: SSCLMD-main/ ├── README.md ├── ST4.xlsx ├── Supplementary File.docx ├── code/ │ ├── calculating_similarity.py │ ├── data_preparation.py │ ├── data_…...
【coze】故事卡片(图片、音频、文字)
【coze】故事卡片(图片、音频、文字) 1、创建智能体2、添加人设与回复逻辑3、添加工作流(1)创建工作流(2)添加大模型节点(3)添加提示词优化节点(4)添加豆包图…...
限免开关实施版本保护措施,保证项目灰度发布安全
迭代用户限免权限校验业务 新增限免开关实现普通用户权益更新,实施版本保护措施,保证项目灰度发布安全; // 是否展示限免标识 func (t *BasePrivilegeService) IsPromotionFree(p consumParams) bool {// 限免开关isFreeUseOpen : p.cfg.Vip…...
C#中从本地(两个路径文件夹)中实时拿图显示到窗口中并接收(两个tcp发送的信号)转为字符串显示在窗体中实现检测可视化
多窗口源码 C#中从本地(两个路径文件夹)中实时拿图显示到窗口中并接收(两个tcp发送的信号)转为字符串显示在窗体中实现检测可视化资源-CSDN文库 读图结果展示 字符串结果展示 利用TCP调试工具创建两个tcp 再次启动程序 就链接…...
了解一下OceanBase中的表分区
OceanBase 是一个高性能的分布式关系型数据库,它支持 SQL 标准的大部分功能,包括分区表。分区表可以帮助管理大量数据,提高查询效率,通过将数据分散到不同的物理段中,可以减少查询时的数据扫描量。 在 OceanBase 中操…...
生成了一个AI算法
import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms # 1. 数据预处理 transform transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,)) # MNIST单通道归一化 ]) train_da…...
C# 使用SunnyUI控件 (VS 2019)
前言:建议下载源码,源码中包含了各种控件的用法案例。 下载 帮助文档: 文档预览 - Gitee.comGitee: SunnyUI: SunnyUI.NET 是基于.NET Framework 4.0、.NET8、.NET9 框架的 C# WinForm UI、开源控件库、工具类库、扩展类库、多页面开发框架。GitHub: h…...
在 Win11 下安装 Wireshark 的详细步骤
目录 一、了解 Wireshark1. 作用和功能2. 使用步骤 二、下载安装包三、运行安装包四、使用 Wireshark1. 抓包2. 窗口介绍3. 过滤器(显示 / 捕获过滤器)4. 保存过滤后的报文1)显示过滤器表达式2)过滤表达式的规则 5. 封包列表6. 封…...
【AI提示词】六顶思考帽工具专家
提示说明 提供专业的六顶思考帽工具应用服务,帮助用户从多角度进行创新性问题解决。 提示词 # Role: 六顶思考帽工具专家## Profile - language: 中文 - description: 提供专业的六顶思考帽工具应用服务,帮助用户从多角度进行创新性问题解决 - backgr…...
解锁RAG:AI 2.0时代的“知识外挂”是如何炼成的?
——从原理到实战,揭秘检索增强生成如何颠覆传统AI 引言:当AI学会“开卷考试” 如果传统大模型是“闭卷学霸”,那RAG(Retrieval-Augmented Generation,检索增强生成)就是那个考试时带着“百科全书”的超级…...