面试经常被问到的RabbitMQ知识

目前开发中用的比较多的有阿里系的RockctMQ,kafka,以及RabbitMQ,ActiveMQ由于社区的活跃性以及不支持高并发等特性逐渐被淘汰。

消息队列的应用场景: 异步(例如注册账号时发送短信,以及注册后的邮件确认)、解耦、流量削峰(限流,多应用于秒杀、商家限时优惠活动等)。

消息的匹配模式有direct(指定路由键,需要完全匹配) 、topic(模糊匹配路由键,*匹配一个,#匹配1个或多个) fanout(广播模式,不需要路由键,所有监听的队列都可以收到消息)。

如何确保消息不丢失?
一条消息从生产到发送要经历这些过程----->生产者发送消息到Exchange,Exchange发送到指定路由绑定的队列中存储,消费者到队列中拉取消息进行消费。

消息丢失分3种情况:
1.消息发送到Exchange时Exchange宕机或者网络故障,导致消息没有发送成功。
解决方案:开启生产者confirm模式,消息发送成功或失败的时候会触发回调函数,根据业务需要再次发送消息或进行其他操作。

2.Exchange根据路由发送消息到队列中,队列宕机导致消息丢失。
解决方案:开启队列的持久化操作,将消息保存到本地,防止丢失。

3.消费者从队列中拉取消息后,还没来得及消费消息,消费者就宕机了,导致消费者以为消息已经消费过了。
解决方案:修改消费者的消息确认模式,由自动确认改为手动ack。

posted @ 2021-05-18 09:25  kingdumpling  阅读(114)  评论(0)    收藏  举报