面试题——RabbitMQ
★1.如何保证消息的幂等性?(如何避免消息重复投递)
生产端:
在消息发送前,先查询数据库此消息是否被处理过。处理过则忽略、否则继续处理,并在处理完成后修改状态为已处理。
消费端:
每个消息都生成全局唯一ID或业务ID(BizID),以确保能识别重复的消息。
2.消息基于什么传输?
RabbitMQ是基于信道(Channel)的方式进行数据传输的,几乎所有的RabbitMQAPI调用都必须通过Channel对象来实现,是客户端与RabbitMQ通信的基本单位,。信道是建立在真实TCP中的虚拟连接,每条TCP连接上的信道数量基本没有限制。
3.如何保证消息的有序性?
如果想保证消息的有序性就需要保证生产端和消费端都有序。RabbitMQ生产端只需要发送消息就可以了,消息会按顺序发送,但如果有多个消费者,轮询机制下虽然消费者虽然获取消息时是有序的,但每个消费者处理消息的速度是不一样的,就会导致去执行时无序,所以要保证一个生产者,一个队列,一个消费者。
4.使用RabbitMQ有什么好处?
削峰:把消息放进RabbitMQ能减轻系统压力,避免因高压而崩溃
异步:允许将消息发放到队列然后执行其他任务,后续由其他服务来异步处理这些任务
解耦:生产者和消费者独立运作,增强灵活性和可扩展性
可靠性:提供持久化,确认机制和事务处理,确保消息的可靠性和完整性
5.Rabbitmq的手动ACK和自动ACK
自动ACK:消息一旦被接收,不论是否成功处理,消费者自动执行发送ACK
手动ACK:消息被接收后,不会自动发送ACK,消费者需要手动调用ACK
6.消息怎么路由?
路由:
直连模式:通过routing key去寻找绑定的对应队列
广播模式:无视routing key,将消息发送到所有绑定的队列上
主题模式:可以使用统配符表示bingKey:’*'表示匹配一个单词, '#'则表示匹配没有或者多个单词。由此可以实现一个queue接收多个路由的消息。
7.如何解决死循环?
①死信队列:消息无法成功处理时,将消息发到死信队列中,避免无休止的循环重试。
②重试机制:在消费者设置最大重试次数,超过最大次数直接发到死信队列中。
③设置TTL:给消息设置最大生存时间,超过这个时间的消息发到死信队列。
相关文章:
面试题——RabbitMQ
★1.如何保证消息的幂等性?(如何避免消息重复投递) 生产端: 在消息发送前,先查询数据库此消息是否被处理过。处理过则忽略、否则继续处理,并在处理完成后修改状态为已处理。 消费端: 每个消息都生成全局唯一ID或业务I…...
前端开发之浏览器垃圾回收机制
前端开发之浏览器垃圾回收机制 V8引擎,作为Chrome浏览器和Node.js等环境下的JavaScript运行引擎,其垃圾回收机制是确保高效内存管理的关键。 V8垃圾回收机制的深度解析与优化 V8 JavaScript引擎采用了高效的垃圾回收机制,其中核心的实现特…...
less-loader的less转成CSS的底层原理
在现代Web开发中,CSS预处理器如LESS极大地提高了编写样式的效率和灵活性。而less-loader作为webpack的一个加载器,用于将LESS文件转换为CSS文件。本文将深入探讨less-loader如何工作,从解析LESS文件到生成最终的CSS文件的底层原理。 工作流程…...
解锁Flutter中的ProcessResult:让外部命令执行变得轻松
介绍 在我们的编程世界中,有时候我们需要与外部系统或者命令行交互。这就像在一场迷宫中寻找出口一样,我们需要向迷宫的门口询问正确的道路。而在 Flutter 中,这个问路的过程就是通过 ProcessResult 来实现的。 为什么要使用 ProcessResult…...
第二十五篇——信息加密:韦小宝说谎的秘诀
目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 加密这件事,对于这个时代的我们来说非常重要,那么…...
Redis 主从复制+哨兵+集群
1、总结写在前面 Redis 集群 数据分片 高可用性 Redis 哨兵 主从复制 故障转移 2、主从复制 2.1、准备配置 查看docker 容器 ip docker inspect 容器id | grep IPAddressdocker inspect -f{{.Name}} {{.NetworkSettings.IPAddress}} $(docker ps -aq)修改配置文件 初始…...
cpolar:通过脚本自动更新主机名称和端口号进行内网穿透【免费版】
cpolar 的免费版经常会重新分配 HostName 和 Port,总是手动修改太过麻烦,分享一下自动更新配置文件并进行内网穿透的方法。 文章目录 配置 ssh config编写脚本获取 csrf_token打开登陆界面SafariChrome 设置别名 假设你已经配置好了服务器端的 cpolar。 …...
【Python日志模块全面指南】:记录每一行代码的呼吸,掌握应用程序的脉搏
文章目录 🚀一、了解日志🌈二、日志作用🌈三、了解日志模块⭐四、日志级别💥五、记录日志-基础❤️六、记录日志-处理器handler🎬七、记录日志-格式化记录☔八、记录日志-配置logger👊九、流程梳理 &#x…...
SpringBoot 多种优雅的线程池配置与使用(异步执行函数,反射机制,动态识别参数,有返回值)
想要明白生活你需要先经历它,而不是总在分析它。 —萨莉鲁尼 文章目录 前言一、@Async注解1. 概念2. 使用2.1 使用@EnableAsync启动函数异步支持2.2 不会异步执行的坑2.2.1 为什么内部调用不会异步执行?2.2.2 如何确保@Async方法异步执行?3. 配置线程池3.1 通过代码配置3.1.…...
ansible copy模块--持续创作中
copy模块用于将文件从ansible控制节点(管理主机)或者远程主机复制到远程主机上。其操作类似于scp(secure copy protocol)。 关键参数标红。 参数: src:(source:源) 要复制到远程…...
自学SAP是学习ECC版本还是S4版本?
很多人想学SAP,问我应该学ECC版本还是S4版本,我的建议如果你是自学的话,我个人建议使用ECC版本就行,因为这两个版本前台业务和后台配置的操作差异并不大,主要差异在于数据库的差异,前台业务操作和后台系统配…...
银河麒麟4.0.2安装带有opengl的Qt5.12.9
银河麒麟4.0.2下载地址:银河麒麟-银河麒麟(云桌面系统)-银河麒麟最新版下载v4.0.2-92下载站 VirtualBox:https://www.virtualbox.org/wiki/Downloads qt下载:Index of /archive/qt/5.12/5.12.9 1安装VirtualBox:网上教材比较多 1)安装完后安…...
django学习入门系列之第二点《浏览器能识别的标签3》
文章目录 列表表格往期回顾 列表 无序列表 <!-- <ul </ul> 无序列表 --> <ul><li> 内容1 </li><li> 内容2 </li><li> 内容3 </li><li> 内容4 </li> </ul>有序列表 <!-- <ol> &…...
git常见实用命令,简单上手操作
常用命令: 添加远程账号名称:git config --global user.name ‘’ 添加用户eamil:git config --global user.email ‘’ 初始化厂库:git init 新建文件夹:mkdir 文件夹名 新建文件:touch 文件名 查看…...
2-11 基于matlab的BP-Adaboost的强分类器分类预测
基于matlab的BP-Adaboost的强分类器分类预测,Adaboost是一种迭代分类算法,其在同一训练集采用不同方法训练不同分类器(弱分类器),并根据弱分类器的误差分配不同权重,然后将这些弱分类器组合成一个更强的最终…...
Neo4j图形数据库查询,Cypher语言详解
Cypher语言详解 Cypher是一种专为Neo4j图形数据库设计的声明式查询语言。它类似于SQL,但其设计目标是便于表达图数据库中常见的图形结构和操作。本文将详细介绍Cypher语言的基本语法、常见操作、高级功能以及使用Cypher进行图形数据分析的技巧。 1. Cypher的基本概…...
C# Winform Datagridview控件使用和详解
DataGridView 是一种以表格形式显示数据的控件,由Rows(行),Columns(列),Cells(单元格)构成。本实例将综合利用DataGridView的属性和事件,展示不同的表格风格数据和操作。包含: 添加Datagridview行,列数据设…...
xshell传输文件速率为0
你们好,我是金金金。 场景 此时我通过xshell客户端上传文件,速率一直为0 解决 安装 yum -y install lrzsz 即可 这个工具主要提供 rz 和 sz 命令,用于通过 Zmodem 协议在本地计算机和远程服务器之间传输文件 编写有误还请大佬指正࿰…...
2.spring cloud gateway 源码编译
spring cloud gateway编译 1.编译 命令 mvn clean compile -U2.报错 报错信息 核心信息 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:3.1.2:check (checkstyle-validation) on project spring-cloud-gateway-mvc: Failed during …...
[Linux] UDP协议介绍:UDP协议格式、端口号在网络协议栈那一层工作...
TCP/IP网络模型, 将网络分为了四层: 之前的文章中以HTTP和HTTPS这两个协议为代表, 简单介绍了应用层协议. 实际上, 无论是HTTP还是HTTPS等应用层协议, 都是在传输层协议的基础上实现的 而传输层协议中最具代表性的就是: UDP和TCP协议了. 以HTTP为例, 在使用HTTP协议通信之前, …...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果 *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...
《Docker》架构
文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器,docker,镜像,k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...
React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构
React 实战项目:微前端与模块化架构 欢迎来到 React 开发教程专栏 的第 30 篇!在前 29 篇文章中,我们从 React 的基础概念逐步深入到高级技巧,涵盖了组件设计、状态管理、路由配置、性能优化和企业级应用等核心内容。这一次&…...
goreplay
1.github地址 https://github.com/buger/goreplay 2.简单介绍 GoReplay 是一个开源的网络监控工具,可以记录用户的实时流量并将其用于镜像、负载测试、监控和详细分析。 3.出现背景 随着应用程序的增长,测试它所需的工作量也会呈指数级增长。GoRepl…...
如何把工业通信协议转换成http websocket
1.现状 工业通信协议多数工作在边缘设备上,比如:PLC、IOT盒子等。上层业务系统需要根据不同的工业协议做对应开发,当设备上用的是modbus从站时,采集设备数据需要开发modbus主站;当设备上用的是西门子PN协议时…...
