RabbitMQ-api开发
前言
MQ就是接收并转发消息
核心概念
admin是用户
每个虚拟机上都有多个交换机
快速入门
引入依赖
<dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.22.0</version></dependency>
生产者
建立连接
消费者
其实这里消费了两条消息的,因为释放太快了,有一条还来不及打印
如果没有释放资源的话
这两个就会一直存在东西
connection关闭的话,channel会自动关闭的,所以会报错这里
工作模式的介绍
官网
简单模式,一个生产者,一个消费者
工作队列模式:一个生产者,多个消费者,c1和c2共同消费p生产的消息
交换机类型
作⽤: ⽣产者将消息发送到Exchange, 由交换机将消息按⼀定规则路由到⼀个或多个队列中(上图中⽣产
者将消息投递到队列中, 实际上这个在RabbitMQ中不会发⽣. )
RabbitMQ交换机有四种类型: fanout,direct, topic, headers, 不同类型有着不同的路由策略. AMQP协
议⾥还有另外两种类型, System和⾃定义, 此处不再描述.
- Fanout:⼴播,将消息交给所有绑定到交换机的队列(Publish/Subscribe模式),就是消息会重复消费的,交换机是广播类型
- Direct:定向,把消息交给符合指定routing key的队列(Routing模式)
- Topic:通配符,把消息交给符合routing pattern(路由模式)的队列(Topics模式),就是bingdingkey是通配符,但是routingkey一定是字符串,看匹不匹配
- headers类型的交换器不依赖于路由键的匹配规则来路由消息, ⽽是根据发送的消息内容中的
headers属性进⾏匹配. headers类型的交换器性能会很差,⽽且也不实⽤,基本上不会看到它的存在.
Exchange(交换机)只负责转发消息, 不具备存储消息的能⼒, 因此如果没有任何队列与Exchange绑
定,或者没有符合路由规则的队列,那么消息就会丢失
RoutingKey: 路由键.⽣产者将消息发给交换器时, 指定的⼀个字符串, ⽤来告诉交换机应该如何处理这个消息.
Binding Key:绑定. RabbitMQ中通过Binding(绑定)将交换器与队列关联起来, 在绑定的时候⼀般会指
定⼀个Binding Key, 这样RabbitMQ就知道如何正确地将消息路由到队列了
就是看routingkey匹配哪个bindingkey,匹配哪个的话,就去哪个队列
当消息的Routing key与队列绑定的Bindingkey相匹配时,消息才会被路由到这个队列
BindingKey其实也属于路由键中的⼀种, 官⽅解释为:the routingkey to use for the binding.
可以翻译为:在绑定的时候使⽤的路由键. ⼤多数时候,包括官⽅⽂档和RabbitMQJava API 中都把
BindingKey和RoutingKey看作RoutingKey, 为了避免混淆,可以这么理解:
- 在使⽤绑定的时候,需要的路由键是BindingKey.
- 在发送消息的时候,需要的路由键是RoutingKey
第三个,发布订阅模式,x表示的是交换机,有特殊作用,每个生产者都收到的相同消息
也是广播模式
第四个路由模式,增加了routingkey,发布订阅模式没有bingdingkey,会转发到匹配的队列,发布订阅模式的升级
第五个是通配符模式,是路由模式的升级,就是bindingkey支持通配符
星表示一个单词,#表示多个单词
第六个是RPC模式,RPC通信
- 客⼾端发送消息到⼀个指定的队列, 并在消息属性中设置replyTo字段, 这个字段指定了⼀个回调队
列, ⽤于接收服务端的响应. - 服务端接收到请求后, 处理请求并发送响应消息到replyTo指定的回调队列
- 客⼾端在回调队列上等待响应消息. ⼀旦收到响应,客⼾端会检查消息的correlationId属性,以
确保它是所期望的响应
第七个发布确认模式
Publisher Confirms模式是RabbitMQ提供的⼀种确保消息可靠发送到RabbitMQ服务器的机制。在这
种模式下,⽣产者可以等待RabbitMQ服务器的确认,以确保消息已经被服务器接收并处理.
- ⽣产者将Channel设置为confirm模式(通过调⽤channel.confirmSelect()完成)后, 发布的每⼀条消
息都会获得⼀个唯⼀的ID, ⽣产者可以将这些序列号与消息关联起来,以便跟踪消息的状态. - 当消息被RabbitMQ服务器接收并处理后,服务器会异步地向⽣产者发送⼀个确认(ACK)给⽣产者
(包含消息的唯⼀ID),表明消息已经送达
通过Publisher Confirms模式,⽣产者可以确保消息被RabbitMQ服务器成功接收, 从⽽避免消息丢失
的问题
是生产者和队列之间的保证
工作队列模式
简单模式中的生产者,就是把消息转发到和routingkey相同的队列中
多个消费者
因为使用的是默认交换机,所以就可以根据routingkey找到相同队列名称
先启动消费者,因为先启动生产者的话,消费者一个就一下消费完了
而且消费者要关闭close
工作队列模式就是共同消费的意思
一个生产者,一个队列,多个消费者,默认交换机
发布订阅模式
多了exchange的角色
在发布/订阅模型中,多了⼀个Exchange⻆⾊.
Exchange 常⻅有三种类型, 分别代表不同的路由规则
a) Fanout:⼴播,将消息交给所有绑定到交换机的队列(Publish/Subscribe模式)
b) Direct:定向,把消息交给符合指定routing key的队列(Routing模式)
c) Topic:通配符,把消息交给符合routing pattern(路由模式)的队列(Topics模式)
也就分别对应不同的⼯作模式
就是广播了
与上面的区别就是生产者要声明交换机,然后队列与交换机的绑定关系
发布订阅模式就是把收到的消息全部转发到所有的队列中,每个队列都有这个消息,所以routingkey为空
消费者的话,就是两个消费者分别消费两个队列
路由模式
发布订阅模式就是会把消息发给所有和这个交换机绑定的队列
而路由模式交换机类型不同,第二就是与队列建立绑定关系的时候,要建立bindingkey
第三就是发送消息的时候,要指定routingkey,routingkey与bindingkey一致的时候就会发送了
第三个参数就是bindingkey
通配符模式
在topic类型的交换机在匹配规则上, 有些要求:
- RoutingKey 是⼀系列由点( . )分隔的单词, ⽐如 " stock.usd.nyse ", " nyse.vmw ",
" quick.orange.rabbit " - BindingKey 和RoutingKey⼀样, 也是点( . )分割的字符串.
- Binding Key中可以存在两种特殊字符串, ⽤于模糊匹配
◦ * 表⽰⼀个单词,不是一个字母
◦ # 表⽰多个单词(0-N个)
消费者获取到消息,默认就删除了
RPC通信-客户端
RPC(Remote Procedure Call), 即远程过程调⽤. 它是⼀种通过⽹络从远程计算机上请求服务, ⽽不需要了解底层⽹络的技术. 类似于Http远程调⽤.
RabbitMQ实现RPC通信的过程, ⼤概是通过两个队列实现⼀个可回调的过程
RabbitMQ 消息确定机制
在RabbitMQ中,basicConsume⽅法的autoAck参数⽤于指定消费者是否应该⾃动向消息队列确认
消息
⾃动确认(autoAck=true): 消息队列在将消息发送给消费者后, 会⽴即从内存中删除该消息. 这意味
着, 如果消费者处理消息失败,消息将丢失,因为消息队列认为消息已经被成功消费
⼿动确认(autoAck=false): 消息队列在将消息发送给消费者后,需要消费者显式地调⽤basicAck
⽅法来确认消息. ⼿动确认提供了更⾼的可靠性, 确保消息不会被意外丢失, 适⽤于消息处理重要且需
要确保每个消息都被正确处理的场景
发布确认
就是最后一个模式
作为消息中间件, 都会⾯临消息丢失的问题.
消息丢失⼤概分为三种情况:
- ⽣产者问题. 因为应⽤程序故障, ⽹络抖动等各种原因, ⽣产者没有成功向broker发送消息.
- 消息中间件⾃⾝问题. ⽣产者成功发送给了Broker, 但是Broker没有把消息保存好, 导致消息丢失.
- 消费者问题. Broker 发送消息到消费者, 消费者在消费消息时, 因为没有处理好, 导致broker将消费
失败的消息从队列中删除了
RabbitMQ也对上述问题给出了相应的解决⽅案. 问题2可以通过持久化机制. 问题3可以采⽤消息应答机制. (后⾯详细讲)
针对问题1, 可以采⽤发布确认(Publisher Confirms)机制实现.
⽣产者将信道设置成confirm(确认)模式, ⼀旦信道进⼊confirm模式, 所有在该信道上⾯发布的消息都
会被指派⼀个唯⼀的ID(从1开始), ⼀旦消息被投递到所有匹配的队列之后, RabbitMQ就会发送⼀个确认给⽣产者(包含消息的唯⼀ID), 这就使得⽣产者知道消息已经正确到达⽬的队列了, 如果消息和队列是可持久化的, 那么确认消息会在将消息写⼊磁盘之后发出. broker回传给⽣产者的确认消息中
deliveryTag 包含了确认消息的序号, 此外 broker 也可以设置channel.basicAck⽅法中的multiple参
数, 表⽰到这个序号之前的所有消息都已经得到了处理
第一个是批量确认,第二个不是
发送⽅确认机制最⼤的好处在于它是异步的, ⽣产者可以同时发布消息和等待信道返回确认消息.
- 当消息最终得到确认之后, ⽣产者可以通过回调⽅法来处理该确认消息.
- 如果RabbitMQ因为⾃⾝内部错误导致消息丢失, 就会发送⼀条nack(Basic.Nack)命令, ⽣产者同样
可以在回调⽅法中处理该nack命令.
使⽤发送确认机制, 必须要信道设置成confirm(确认)模式.
发布确认是 AMQP 0.9.1 协议的扩展, 默认情况下它不会被启⽤. ⽣产者通过channel.confirmSelect()将信道设置为confirm模式
有三种确认方式,单独确认,批量确认(就是发布数量达到一定数量的时候开始去确认),异步确认(另外开一个线程却确认)
可以去看官网
单独确认
这个确认的话,是虚拟机自己确认的,不关我们的事,不关消费者的事,这个一个一个确认就很慢
如果队列还要持久化这个数据的话,就更慢了
批量确认
异步确认
异步confirm⽅法的编程实现最为复杂. Channel 接⼝提供了⼀个⽅法addConfirmListener. 这个⽅法
可以添加ConfirmListener 回调接⼝.
ConfirmListener 接⼝中包含两个⽅法: handleAck(long deliveryTag, boolean
multiple) 和 handleNack(long deliveryTag, boolean multiple) , 分别对应处理
RabbitMQ发送给⽣产者的ack和nack.
deliveryTag 表⽰发送消息的序号. multiple 表⽰是否批量确认
我们需要为每⼀个Channel 维护⼀个已发送消息的序号集合. 当收到RabbitMQ的confirm 回调时, 从集
合中删除对应的消息. 当Channel开启confirm模式后, channel上发送消息都会附带⼀个从1开始递增的
deliveryTag序号. 我们可以使⽤SortedSet 的有序性来维护这个已发消息的集合.
- 当收到ack时, 从序列中删除该消息的序号. 如果为批量确认消息, 表⽰⼩于等于当前序号
deliveryTag的消息都收到了, 则清除对应集合 - 当收到nack时, 处理逻辑类似, 不过需要结合具体的业务情况, 进⾏消息重发等操作
可以一下发布多个消息,然后multiple =true就是批量确认,deliveryTag =3,就是确认它之前的,包括它,要么multiple =false,就是确认单个
如果数据量很大的话,异步确认就要比批量确认快得多
总结
相关文章:
RabbitMQ-api开发
前言 MQ就是接收并转发消息 核心概念 admin是用户 每个虚拟机上都有多个交换机 快速入门 引入依赖 <dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.22.0</version></dependen…...
const MachineTree getMachineTree() ; MachineTree getMachineTree() const; 区别?
这两个函数声明在语法和语义上有明显的区别,它们的用途和行为也不同。让我们逐一分析它们的区别: 1. const MachineTree &getMachineTree(); 这个函数声明表示: 返回类型:const MachineTree &,即返回一个 M…...
使用DevTools工具调试前端页面,便捷脚本,鸿蒙调试webView
参考官方文章 便捷脚本 创建文本,复制修改后缀为bat 建立bat文件 echo off setlocal enabledelayedexpansion:: Initialize port number and PID list set PORT9222 set PID_LIST:: Get the list of all forwarded ports and PIDs for /f "tokens2,5 delims…...
浏览器存储 Cookie,Local Storage和Session Storage
什么是Cookie? 存储容量:一般限制在 4KB 以内。数据有效期:可以设置过期时间,若未设置,则在浏览器关闭时失效。数据共享:在同一域名下,不同页面可以共享cookie数据。并且在每次 HTTP 请求时&am…...
校内周赛题(思维题)
这次周赛的题目没有什么很难的代码实现,基本上都是对思路的把握。 与君共勉🌹 选取x个数,看能不能使得这x个数相加的结果是奇数。 如果x是偶数,他的分布肯定是一个奇数一个偶数若干个两两配对的奇数若干个两两配对的偶数。 如果…...
在 GitLab 中部署Python定时任务
在 GitLab 中部署定时任务(如每天早8点运行Python脚本并存储结果)可以通过 GitLab CI/CD 结合 计划任务(Scheduled Pipelines) 实现。以下是详细步骤和准备工作: 1. 准备工作 (1) 项目结构准备 确保项目包含: Python脚本(如 main.py):执行核心算法逻辑。 结果存储模…...
学习黑客Windows权限体系
已思考 24 秒 借着 Week 2 Day 4 的号角,我们把权限系统这条「双持长枪」摆上擂台:一边是 Windows DACL/icacls,另一边是 Linux sudoers。你将看到二者在授权语法、常见配置漏洞与提权打法上的一一对照——尤其关注 可写服务(Wr…...
DXFViewer进行中2 -> 直线 解析+渲染 ✅已完成
DXFViewer进行中 : ->封装OpenGL -> 解析DXF直线-CSDN博客https://blog.csdn.net/qq_25547755/article/details/147723906 上篇博文 解析dxf直线635条 1. DXFViewer.h #pragma once #include "Application.h" #include <stdio.h> #inc…...
当智能科技遇上医疗行业会帮助疫苗如何方便管理呢?
随着科技的发展,智能科技在医疗行业的应用日益广泛,在疫苗管理方面,温湿度监控设备的安装可以简化管理流程,提高监测效率,降低疫苗损坏的风险。 疫苗管理面临着诸多挑战和需求。疫苗的存储、运输、接种等环节都…...
Excel 数据 可视化 + 自动化!Excel 对比软件
各位Excel小能手们!你们有没有过要对比两个Excel表格数据差异,却看得眼睛都花了的经历?其实啊,现在有专门的Excel文件比较软件能帮咱解决这大难题。这软件就是用来快速找出两个或多个Excel表格数据不同之处,还能把修改…...
Selenium模拟人类行为,操作网页的方法(全)
看到有朋友评论问,用selenium怎么模仿人类行为,去操作网页的页面呢? 我想了想,这确实是一个很大的点,不应该是一段代码能解决的, 就像是,如果让程序模拟人类的行为。例如模拟人类买菜,做饭&am…...
LVS负载均衡群集解析:理解LVS-NAT的工作原理
目录 一、LVS群集应用基础 1.群集技术概述 2.LVS虚拟服务器 3.NFS共享存储服务 二、案例:地址转换模式(LVS-NAT) 1.资源清单 2.修改主机名 3.配置负载调度器(LVS上) 4.配置节点服务器(web1、web2) 5.测试LVS…...
Leetcode Hot 100最长连续序列
题目描述 思路 思路1 我们对数组进行排序,通过遍历数组,如果前一个数组的值1等于当前数组的值,计数count,如果中断了,计算当前最大连续长度的值ans,并且统计值count重新置为1,最后返回count与…...
【东枫科技】代理英伟达产品:交换机系统
文章目录 总体详细:NVIDIA Spectrum SN5000详细:NVIDIA Spectrum SN2100详细:NVIDIA Spectrum SN4700详细:NVIDIA Spectrum SN2010详细:NVIDIA Spectrum SN4600详细:NVIDIA Spectrum SN3700详细:…...
[前端]Javascript获取元素宽度
元素宽度属性对比示意图 ---------------------------------- | 外边距(margin) | -------------------------------- | | 边框(border) | | | -------------------------- | | | …...
MySQL + Qwen3-0.5B + Flask + Dify 工作流部署指南
1. 安装MySQL和PyMySQL 安装MySQL # 在Ubuntu/Debian上安装 sudo apt update sudo apt install mysql-server sudo mysql_secure_installation# 启动MySQL服务 sudo systemctl start mysql sudo systemctl enable mysql 安装PyMySQL pip install pymysql 使用 apt 安装 My…...
项目三 - 任务3:学生多态方式喂养宠物
在本次实战中,我们通过创建动物类及其子类(猫、狗、鸟),并设计学生类的喂养方法,深入学习了Java中的多态和方法重载。学生类通过重载方式为每种动物提供专门的喂养方法,而通过多态方式则仅用一个方法即可喂…...
TypeScript速成
1、类型推断 这里的str已经推断为string类型,不能像JavaScript一样直接给str赋值number类型 2、类型注解 let str:stringabc 或者 let str:string strabc 3、类型断言 因为typescript会判定这个item可能为undefined类型,但是我们人为可以确定item一…...
CompletableFuture的底层ForkJoinPool
什么是 ForkJoinPool?它和普通线程池(ThreadPoolExecutor)有什么区别? 答案要点: ForkJoinPool 是 Java 7 引入的线程池,专为 分治任务 设计,支持递归任务拆分(Fork)和…...
高等数学第五章---定积分(§5.1定积分的概念、性质和应用)
5.1 定积分的概念及性质 一、引例 在学习定积分之前,我们先通过两个具体的例子来感受其思想和方法。 例1 曲边梯形的面积 定义:曲边梯形 由连续曲线 y f ( x ) y f(x) yf(x)(假设 f ( x ) ≥ 0 f(x) \ge 0 f(x)≥0 在所讨论的区间上&…...
Java基础学完,继续深耕(0506)SQL--多表关系
多表关系 一对多(多对一) 一对一 多对多 一对多 场景:部门与员工的关系 (一个部门下有多个员工)。 实现:在数据库表中多的一方,添加字段,来关联一的一方的主键。 现在只是在语法上关联了,…...
python打卡day17
聚类的基础知识 知识点 聚类的指标聚类常见算法:kmeans聚类、dbscan聚类、层次聚类三种算法对应的流程 实际在论文中聚类的策略不一定是针对所有特征,可以针对其中几个可以解释的特征进行聚类,得到聚类后的类别,这样后续进行解释也…...
洛谷---P1629 邮递员送信
题目描述 有一个邮递员要送东西,邮局在节点 1。他总共要送 n−1 样东西,其目的地分别是节点 2 到节点 n。由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有 m 条道路。这个邮递员每次只能带一样东西,并且运…...
第11次:用户注册(简要版)
1、定义模板 在templates文件夹下边新建register.html,代码如下: <html lang"en"> <head><meta charset"UTF-8"><title>注册</title> </head> <body><!--{%是模板标签, …...
【IP101】图像特征提取技术:从传统方法到深度学习的完整指南
🌟 特征提取魔法指南 🎨 在图像处理的世界里,特征提取就像是寻找图像的"指纹",让我们能够识别和理解图像的独特性。让我们一起来探索这些神奇的特征提取术吧! 📚 目录 基础概念 - 特征的"体…...
对windows的简单介绍
目录 一、Windows 操作系统概述 1. 定义与定位 2. 核心目标 二、历史与版本演变 1. 早期阶段(1985–1995) 2. NT 内核时代(1996–2009) 3. 现代操作系统(2012–至今) 三、系统架构与技术特性 1. 内…...
Waymo公司正在加快其位于亚利桑那州新工厂的无人驾驶出租车(robotaxi)生产进度
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
JavaSE核心知识点01基础语法01-03(流程控制:顺序、分支、循环)
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 JavaSE核心知识点01基础语法01-03࿰…...
信息论01:从通信到理论的飞跃
信息论01:从通信到理论的飞跃 1. 信息论的诞生与发展 1.1 前信息论时代(1920s之前) 信息与消息的混淆:传统认知中将信息等同于消息本身先驱者奠基: 哈里奈奎斯特 (1924):提出《影响电报速度的某些因素》…...
Pandas 的透视与逆透视
目录 1. 透视 1.1 pivot 1.2 pivot_table 2.逆透视 1. 透视 透视是长表变宽表。 pivot() 和 pivot_table()两个函数都可以做到,后者可以聚合前者不行。 特性df.pivot()df.pivot_table()重复值处理要求索引和列的组合唯一,否则报错 ValueError允许…...
AI大模型驱动的智能座舱研发体系重构
随着AI大模型(如LLM、多模态模型)的快速发展,传统智能座舱研发流程面临巨大挑战。传统座舱研发以需求驱动、功能固定、架构封闭为特点,而AI大模型的引入使得座舱系统向自主决策、动态适应、持续进化的方向发展。 因此思考并提出一…...
【东枫科技】代理英伟达产品:DPU
NVIDIA BlueField-3 DPU 400Gb/s 基础设施计算平台 NVIDIA BlueField -3 数据处理单元 (DPU) 是第三代基础设施计算平台,使企业能够构建从云端到核心数据中心再到边缘的软件定义、硬件加速的 IT 基础设施。借助 400Gb/s 以太网或 NDR 400Gb/s InfiniBand 网络连接…...
【KWDB 创作者计划】一文掌握KWDB的时序表管理
前言 本文是在对时序数据库有一定了解,并且KWDB的数据库操作了解后进行学习的文章安排,如果对时序数据库与KWDB的数据库操作还不怎么了解的可以查阅官网的文档进行提前学习,当有了这些基础后,本文就是对时序数据表的一个管理操作…...
《算法导论(第4版)》阅读笔记:p9-p9
《算法导论(第4版)》学习第 6 天,p9-p9 总结,总计 1 页。 一、技术总结 1. data structure A data structure is a way to store and organize data in order to facilitate access and modifications(数据结构是一种存储和组织数据的方式,…...
Facebook隐私保护措施的优缺点解析
在这个数字化的时代,隐私保护已成为公众关注的热点话题。Facebook,作为全球最大的社交媒体平台之一,其隐私保护措施自然也受到了广泛的关注和讨论。本文将对Facebook的隐私保护措施进行解析,探讨其优点与缺点,并探讨如…...
深入了解linux系统—— 进程地址空间
前言 程序地址空间 在之前,我们学习C/C时,多多少少都看过这样的一张图 我们现在通过下面这一段代码看一下: #include <stdio.h> #include <unistd.h> #include <stdlib.h> int g_unval; int g_val 100; int main(int…...
电动加长杆金属硬密封法兰式蝶阀泄漏等级解析:水、蒸汽、油品介质的可靠选择-耀圣
电动加长杆金属硬密封法兰式蝶阀泄漏等级解析:水、蒸汽、油品介质的可靠选择 在工业流体控制领域,电动金属硬密封蝶阀凭借其卓越的密封性能和耐高温高压特性,成为水、蒸汽、油品等介质的核心控制设备。其泄漏等级作为衡量阀门性能的关键指标…...
win11共享打印机主机设置
1.首先打开设置,选择打印机和扫描仪点击打印机属性,将共享窗口的共享这台打印机和在客户端计算机上呈现打印作业这两项勾选上。 2.通过cmd命令 gpedit.msc 打开本地组策略编辑器。 3.网络访问选择仅来宾 4.将账户来宾状态选择启用 5.将拒绝从网络访问这台…...
Flowable7.x学习笔记(二十)查看流程办理进度图
前言 本文是基于继承Flowable的【DefaultProcessDiagramCanvas】和【DefaultProcessDiagramGenerator】实现的自定义流程图生成器,通过自定义流程图生成器可以灵活的指定已经执行过的节点和当前正在活跃的节点样式,比如说已经执行完成的节点我们标绿&…...
【计算机网络 第8版】谢希仁编著 第四章网络层 地址类题型总结
小结 个人觉得地址类在网络层算好做的题,这部分知识本身并不多,理解到位了就是2进制和10进制的换算题了。而且这种题给你一小时例题和标答,肯定自己都能悟出来。但是计网网络层的整体我感觉很散,老师讲的也乱七八糟的,…...
一种基于条件生成对抗网络(cGAN)的CT重建算法
简介 简介:该文提出了一种基于条件生成对抗网络(cGAN)的CT重建算法,通过引入CBAM注意力机制增强网络对关键特征的提取能力,有效解决了CT成像中因噪声干扰导致的重建精度下降问题。实验采用固体火箭发动机模拟件数据集,将正弦图分为五组并添加不同程度的噪声进行训练。结…...
欧拉系统(openEuler)上部署OpenStack的完整指南 ——基于Yoga版本的全流程实践
(资源区里有上传的配置好的openstack镜像) 一、环境规划与前置准备 1. 硬件与节点规划升级 存储节点(可选):若需Cinder后端,建议配置SSDHDD混合存储网络拓扑强化: 管理网络:启用V…...
oceanbase不兼容SqlSugarCore的问题
问题发现 C#程序使用SqlSugarCore5.1.4.166进行数据库操作,而且项目需要在多台服务器上面部署,结果发现A服务器部署运行没有问题, B服务器部署却报错:SqlSugar.SqlSugarException:Connect timeout expired. 但是我们的C#代码是一…...
深入理解分布式锁——以Redis为例
一、分布式锁简介 1、什么是分布式锁 分布式锁是一种在分布式系统环境下,通过多个节点对共享资源进行访问控制的一种同步机制。它的主要目的是防止多个节点同时操作同一份数据,从而避免数据的不一致性。 线程锁: 也被称为互斥锁(…...
OrangePi Zero 3学习笔记(Android篇)1 - 搭建环境
目录 1. 下载安装Ubuntu22.04 1.1 安装增强功能 1.2 设置共享文件夹 1.3 创建AOSP.vdi 1.4 更新相关软件包 2. 解压AOSP源代码 3. 编译代码 3.1 编译uboot/Linux 3.2 编译AOSP源代码 3.3 内存问题调试记录 3.3.1 查看具体什么问题 3.3.2 关闭dex2oat(无…...
RabbitMq(尚硅谷)
RabbitMq 1.RabbitMq异步调用 2.work模型 3.Fanout交换机(广播模式) 4.Diret交换机(直连) 5.Topic交换机(主题交换机,通过路由匹配) 6.Headers交换机(头交换机) 6…...
OpenAI的“四面楚歌”:从营利到非营利,一场关于AGI控制权的革命
引言 当“奥特曼妥协”与“四面楚歌”并置时,OpenAI的这次重大调整,仿佛在科技史上投下一颗震撼弹。这家曾因“拒绝盈利”而备受争议的人工智能公司,如今却在资本与理想之间艰难抉择——放弃营利性转型,回归非营利初心。这不仅是对…...
[250505] Arch Linux 正式登陆 Linux 的 Windows 子系统
目录 Arch Linux 正式登陆 Windows Subsystem for Linux (WSL) Arch Linux 正式登陆 Windows Subsystem for Linux (WSL) Arch Linux 社区与 Microsoft 合作,正式宣布 Arch Linux 现已提供官方的 Windows Subsystem for Linux (WSL) 镜像。这意味着 Windows 用户现…...
MySQL 日期格式化:DATE_FORMAT 函数用法
MySQL 日期格式化:DATE_FORMAT 函数用法 在 MySQL 中,DATE_FORMAT() 函数用于将日期或时间值格式化为指定的字符串格式。 正确语法 DATE_FORMAT(date, format)常用格式说明符 说明符描述%Y四位数的年份(例如:2023)…...
java springboot解析出一个图片的多个二维码
引入 <dependencies><!-- ZXing --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.4.1</version></dependency><dependency><groupId>com.google.zxing…...