面试八股——RabbitMQ

消息丢失问题

消息确认机制

生产者与MQ之间的消息确认:

当MQ成功接收消息后,会返回给生产者一个确认消息。如果在规定时间内生产者未收到确认消息,则任务消息发送失败。

MQ与消费者之间的消息确认:

当MQ成功接收消息后,会返回给MQ一个确认消息,MQ此时会将对应消息删除。如果在规定时间内MQ未收到确认消息,则任务消息发送失败。

补发机制

当确认消息丢失后,可通过补发机制重发消息:

通过回调方法即时完成重发。

将发送的消息记录于日志文件当中。然后进行重发。

持久化

MQ通过内存存储消息,如果系统突然断电会导致消息丢失。因此可使用持久化方法(交换机持久化、队列持久化、消息持久化):

重复消费问题

出现原因举例:在保证MQ消息不重复的情况下,消费者消费消息成功后,在给MQ发送消息确认的时候出现了网络异常(或者是服务中断),MQ没有接收到确认,此时MQ会补发一条消息,从而导致重复消费。

解决方法:

  1. 每条消息设置唯一id。消费者接收到消息时会校验id是否存在(是否已在数据库中),如果存在则不处理该条消息。

  2. 幂等方案。

死信交换机

死信交换机的定义:

  1. 消息被消费者拒绝
  1. 消息超过生存时间TTL:这个方法可实现超时队列。如订单支付,给订单消息创建TTL,如果超时,订单消息变为死信,订单失效。

3.队列满了,则处于对头的消息也可能成为死信。

消息堆积问题

问题描述:

解决方法:

扩大队列容积的办法------惰性队列(将队列中的消息存入磁盘而非内存):

相关推荐
扉页的墨13 分钟前
Go Channel 高级用法:那个让线上服务半夜宕机的 select 死锁,我排查了6个小时
后端·面试·go
Mahir0815 分钟前
MySQL 事务全解:从 ACID 特性到并发问题,再到底层实现与线上最佳实践
数据库·mysql·面试
m0_7162550015 分钟前
二、Hadoop 面试必背 | 三、Hive 面试必背
大数据·hadoop·面试
XovH22 分钟前
Python 中间件系列:redis 深入浅出
面试
前进的李工26 分钟前
高效索引优化:数据库查询提速指南(适合创建索引的11种情况)
数据库·mysql·面试
青山师35 分钟前
CompletableFuture深度解析:异步编程范式与源码实现
java·单例模式·面试·性能优化·并发编程
星辰_mya35 分钟前
Docker “超级大厨”
运维·docker·容器·面试·架构
AI人工智能+电脑小能手35 分钟前
【大白话说Java面试题 第42题】【JVM篇】第2题:JVM内存模型有哪些组成部分?
java·开发语言·jvm·面试
AI人工智能+电脑小能手42 分钟前
【大白话说Java面试题 第43题】【JVM篇】第3题:GC分为哪两种?Young GC 和 Full GC有什么区别?
java·开发语言·jvm·后端·面试
逆境不可逃1 小时前
黑马 RabbitMq 基础篇 学习记录
学习·rabbitmq·ruby