MQ面试总结(精简)

1、RabbitMq如何保证消息可靠性

主要从四个层面来考虑

  1. 生产者方面:开启生产者确认机制, 给每个消息指定一个唯一ID , 消息发送到MQ以后,会返回一个结果给发送者,表示消息是否处理成功 (发送者确认:ack和nack,发送者回执:ack,路由失败原因),来确保生产者的消息能到达队列。
  2. mq自身方面,开启消息持久化(交换机持久化、队列持久化、消息持久化)功能,确保消息在mq中不会因为宕机丢失
  3. 开启消费者确认机制为auto,由spring来监听消费者是否出现异常, 出现异常时返回nack,消息回滚到mq;没有异常,返回ack 。
  4. 开启消费者失败重试机制,并设置重试策略,多次重试失败后将消息投递给处理异常的交换机,交给人工处理。

在这里插入图片描述


2、RabbitMq如何实现延迟队列

死信交换机TTL实现 如下图:

在这里插入图片描述

死信:消息过期无人消费;队列满了,早期消息会成为死信;消费无效;
TTL:过期时间,超时未被消费,消息过期。

实现过程原理:给队列绑定一个死信交换机,在死信交换机上绑定一个队列,消费者监听这个队列,然后发送消息的时候,设置TTL超时时间,就可以实现延时队列。

死信插件:DelayExchange:只需要申明交换机的时候,指定为死信交换机,发消息指定ttl就行。


3、消息堆积问题

解决方案:

  1. 绑定多个消费者,提高消费速度
  2. 给消费者开启线程池,提高消费速度
  3. 使用惰性队列,在mq中存储更多的消息

惰性队列:优点:基于磁盘存储,消息上限高,性能比较稳定;支持数百万条的消息存储

缺点:消息时效的会降低;性能受限于磁盘IO


4、RabbitMq集群

  1. 普通集群:分布式集群,将队列分散到集群的各个节点,从而提升整体并发能力。
  2. 镜像集群:主从集群,在普通集群的基础上,添加了主从备份功能,提高集群的数据可用性。
  3. 仲裁队列:RabbitMq 3.8版本以上,代替镜像集群,确保主从集群的数据一致性。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值