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

面试题——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:给消息设置最大生存时间,超过这个时间的消息发到死信队列。


http://www.lryc.cn/news/377823.html

相关文章:

  • 前端开发之浏览器垃圾回收机制
  • less-loader的less转成CSS的底层原理
  • 解锁Flutter中的ProcessResult:让外部命令执行变得轻松
  • 第二十五篇——信息加密:韦小宝说谎的秘诀
  • Redis 主从复制+哨兵+集群
  • cpolar:通过脚本自动更新主机名称和端口号进行内网穿透【免费版】
  • 【Python日志模块全面指南】:记录每一行代码的呼吸,掌握应用程序的脉搏
  • SpringBoot 多种优雅的线程池配置与使用(异步执行函数,反射机制,动态识别参数,有返回值)
  • ansible copy模块--持续创作中
  • 自学SAP是学习ECC版本还是S4版本?
  • 银河麒麟4.0.2安装带有opengl的Qt5.12.9
  • django学习入门系列之第二点《浏览器能识别的标签3》
  • git常见实用命令,简单上手操作
  • 2-11 基于matlab的BP-Adaboost的强分类器分类预测
  • Neo4j图形数据库查询,Cypher语言详解
  • C# Winform Datagridview控件使用和详解
  • xshell传输文件速率为0
  • 2.spring cloud gateway 源码编译
  • [Linux] UDP协议介绍:UDP协议格式、端口号在网络协议栈那一层工作...
  • Spring Boot 中如何解决跨域问题、Spring Cloud 5大组件、微服务的优缺点是什么?
  • [Vulnhub] Sleepy JDWP+Tomcat+Reverse+Reverse-enginnering
  • 基于MATLAB的误码率与信噪比(附完整代码与分析)
  • 【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 字符串筛选排序(100分) - 三语言AC题解(Python/Java/Cpp)
  • # 开发安全
  • Qt MaintenanceTool.exe使用镜像源更新Qt
  • Java 8 Stream API介绍
  • 【前端技巧】css篇
  • 2024年6月20日 (周四) 叶子游戏新闻
  • Zookeeper 一、Zookeeper简介
  • 普通一本能找到嵌入式linux工作吗?