rabbitmq-- 面试
面试题1:如何解决消息丢失?
-
ack(消费者确认)
-
持久化
-
生产者确认(publisher confirm):生产者发送消息后,等待mq的ACK,如果没有收到或者收到失败信息,则重试。如果收到成功消息则业务结束。
-
可靠消息服务(可选):对于部分不支持生产者确认的消息队列,可以发送消息前,将消息持久化到数据库,并记录消息状态,后续消息发送、消费等过程都依赖于数据库中消息状态的判断和修改。
面试题2:如何避免消息堆积
-
通过同一个队列多消费者监听,实现消息的争抢,加快消息消费速度。
面试题3:如何保证消息的有序性?
答:大部分业务对消息的有序性要求不高,如果遇到对时序要求较高的业务,分两种情况来处理:
-
业务同时对并发要求不高:
-
保证消息发送时有序同步发送
-
保证消息发送被同一个队列接收
-
保证一个队列只有一个消费者,可以有从机(待机状态),实现高可用。
-
实现主从(Zookeeper集群选主)
-
-
业务同时对并发要求较高:
-
满足上述第一个场景的条件
-
可以有多个队列
-
有时序要求的一组消息,通过hash方式分派到一个固定队列
-
面试题4:如何避免消息重复消费?
-
保证接口幂等即可,那么如何保证接口幂等呢?
-
某些接口天生幂等,例如查询请求
-
某些接口天生不幂等,比如新增,还有某些接口的修改功能
-
能根据具体的业务或状态来确定的,在消费端通过业务判断是否执行过
-
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了