rabbitmq-- 面试

面试题1:如何解决消息丢失?

  • ack(消费者确认)

  • 持久化

  • 生产者确认(publisher confirm):生产者发送消息后,等待mq的ACK,如果没有收到或者收到失败信息,则重试。如果收到成功消息则业务结束。

  • 可靠消息服务(可选):对于部分不支持生产者确认的消息队列,可以发送消息前,将消息持久化到数据库,并记录消息状态,后续消息发送、消费等过程都依赖于数据库中消息状态的判断和修改。

面试题2:如何避免消息堆积

  • 通过同一个队列多消费者监听,实现消息的争抢,加快消息消费速度。

面试题3:如何保证消息的有序性?

答:大部分业务对消息的有序性要求不高,如果遇到对时序要求较高的业务,分两种情况来处理:

  • 业务同时对并发要求不高:

    • 保证消息发送时有序同步发送

    • 保证消息发送被同一个队列接收

    • 保证一个队列只有一个消费者,可以有从机(待机状态),实现高可用。

    • 实现主从(Zookeeper集群选主)

  • 业务同时对并发要求较高:

    • 满足上述第一个场景的条件

    • 可以有多个队列

    • 有时序要求的一组消息,通过hash方式分派到一个固定队列

面试题4:如何避免消息重复消费?

  • 保证接口幂等即可,那么如何保证接口幂等呢?

    • 某些接口天生幂等,例如查询请求

    • 某些接口天生不幂等,比如新增,还有某些接口的修改功能

      • 能根据具体的业务或状态来确定的,在消费端通过业务判断是否执行过

posted @   myWang  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示