rabbitmq-- 面试
面试题1:如何解决消息丢失?
-
ack(消费者确认)
-
持久化
-
生产者确认(publisher confirm):生产者发送消息后,等待mq的ACK,如果没有收到或者收到失败信息,则重试。如果收到成功消息则业务结束。
-
可靠消息服务(可选):对于部分不支持生产者确认的消息队列,可以发送消息前,将消息持久化到数据库,并记录消息状态,后续消息发送、消费等过程都依赖于数据库中消息状态的判断和修改。
面试题2:如何避免消息堆积
-
通过同一个队列多消费者监听,实现消息的争抢,加快消息消费速度。
面试题3:如何保证消息的有序性?
答:大部分业务对消息的有序性要求不高,如果遇到对时序要求较高的业务,分两种情况来处理:
-
业务同时对并发要求不高:
-
保证消息发送时有序同步发送
-
保证消息发送被同一个队列接收
-
保证一个队列只有一个消费者,可以有从机(待机状态),实现高可用。
-
实现主从(Zookeeper集群选主)
-
-
业务同时对并发要求较高:
-
满足上述第一个场景的条件
-
可以有多个队列
-
有时序要求的一组消息,通过hash方式分派到一个固定队列
-
面试题4:如何避免消息重复消费?
-
保证接口幂等即可,那么如何保证接口幂等呢?
-
某些接口天生幂等,例如查询请求
-
某些接口天生不幂等,比如新增,还有某些接口的修改功能
-
能根据具体的业务或状态来确定的,在消费端通过业务判断是否执行过
-
-

浙公网安备 33010602011771号