程序员子龙(Java面试 + Java学习) 程序员子龙(Java面试 + Java学习)
首页
学习指南
工具
开源项目
技术书籍

程序员子龙

Java 开发从业者
首页
学习指南
工具
开源项目
技术书籍
  • 基础

  • JVM

  • Spring

  • 并发编程

  • Mybatis

  • 网络编程

  • 数据库

  • 缓存

  • 设计模式

  • 分布式

  • 高并发

  • SpringBoot

  • SpringCloudAlibaba

  • Nginx

  • 面试

    • 集合框架 面试题
    • Redis 面试题
    • RabbitMQ 面试题
      • 面试官:聊聊kafka线上使用会有哪些问题?
      • 面试官:如何设计一个高并发系统
      • 面试官:你们项目中是怎么做防重复提交的?
      • 面试官:你能聊聊高并发下的接口幂等性如何实现吗?
      • 面试官:怎么实现数据脱敏
      • 面试官:你知道Api 接口优化的几个技巧
      • 面试官:怎么优雅的接口防刷处理方案
    • 生产问题

    • 系统设计

    • 消息中间件

    • Java
    • 面试
    程序员子龙
    2024-01-29
    目录

    RabbitMQ 面试题

    # 消息丢失

    发送方确认机制:

    信道需要设置为 confirm 模式,则所有在信道上发布的消息都会分配一个唯一 ID。

    一旦消息被投递到queue(可持久化的消息需要写入磁盘),信道会发送一个确认给生产者(包含消息唯一 ID)。

    如果 RabbitMQ 发生内部错误从而导致消息丢失,会发送一条 nack(未确认)消息给生产者。

    所有被发送的消息都将被 confirm(即 ack) 或者被nack一次。但是没有对消息被 confirm 的快慢做

    任何保证,并且同一条消息不会既被 confirm又被nack 发送方确认模式是异步的,生产者应用程序在等待确认的同时,可以继续发送消息。当确认消息到达生产者,

    生产者的回调方法会被触发。

    ConfirmCallback接口:只确认是否正确到达 Exchange 中,成功到达则回调

    ReturnCallback接口:消息失败返回时回调

    接收方确认机制:

    消费者在声明队列时,可以指定noAck参数,当noAck=false时,RabbitMQ会等待消费者显式发回ack信号

    后才从内存(或者磁盘,持久化消息)中移去消息。否则,消息被消费后会被立即删除。

    消费者接收每一条消息后都必须进行确认(消息接收和消息确认是两个不同操作)。只有消费者确认了消息,

    RabbitMQ 才能安全地把消息从队列中删除。

    RabbitMQ不会为未ack的消息设置超时时间,它判断此消息是否需要重新投递给消费者的唯一依据是消费该

    消息的消费者连接是否已经断开。这么设计的原因是RabbitMQ允许消费者消费一条消息的时间可以很长。保

    证数据的最终一致性;

    如果消费者返回ack之前断开了链接,RabbitMQ 会重新分发给下一个订阅的消费者。(可能存在消息重复消

    费的隐患,需要去重)

    上次更新: 2024/01/30, 15:08:57
    Redis 面试题
    面试官:聊聊kafka线上使用会有哪些问题?

    ← Redis 面试题 面试官:聊聊kafka线上使用会有哪些问题?→

    最近更新
    01
    一个注解,优雅的实现接口幂等性
    11-17
    02
    MySQL事务(超详细!!!)
    10-14
    03
    阿里二面:Kafka中如何保证消息的顺序性?这周被问到两次了
    10-09
    更多文章>
    Theme by Vdoing | Copyright © 2024-2024

        辽ICP备2023001503号-2

    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式