RabbitMQ面试题

1.RabbitMQ如何保证消息不丢失

从三方面说

  1. 开启生产者确认机制,确保生产者的消息能到达队列,如果报错可以先记录到日志,后续进行人工处理修复数据

  2. 开启持久化功能,确保消息没有被消费前不会再队列中丢失,在java中声明的交换机队列消息默认就是开启持久化的

  3. 开启消费者确认机制为auto,由spring确认消息处理成功的一个ack回执,我们当时设置了三次重试, 如果都失败,就交给人工处理

2.RabbitMQ消息的重复性问题如何解决

给每个消息一个唯一标识,比如我们在处理支付订单的时候,每个订单有一个唯一标识,我们进行消费的时候,要现在数据库里查询一下,如果不存在数据的话,我们再进行一个消息,如果存在,那么说明消息已经被消费过了。

利用分布式锁

3.RabbitMQ中的延迟队列

我们当时再用户提交订单支付的时候,用到了延迟队列,我们是再RabbitMQ中安装了一个插件,这个时候我们只需要在声明交换机的时候,指定这个就是死信交换机,然后再发送消息的时候指定超时时间就行。

4.如果有100万消息堆积在MQ,怎么解决

  1. 提高消费者的消费能力,比如使用多线程

  2. 增加更多的消费者,提高消费速度

  3. 使用惰性队列

    1. 接收到消息后直接存入磁盘并非内存

    2. 只有当消费者需要消费消息的时候才会从磁盘中读取并加载消息到内存中

    3. 它因为是存储在磁盘上的,所以它支持数百万的消息存储

5.RabbitMQ的高可用

我们当时使用到了镜像集群,用了三台机器

镜像队列结构是一主多从,所有的操作都是主节点完成的,然后同步到镜像节点,如果主节点宕机后,镜像节点会称为新的主节点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MingZhe1008

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值