RabbitMq常见面试题

本文详细探讨了RabbitMQ的使用好处,如系统解耦、异步处理和削峰。介绍了断连重连机制,包括定时重连和Shutdown监听策略。强调了消息的幂等性和顺序性保证,以及消费者确认机制确保消息被消费。讨论了消息正确发送至RabbitMQ的发送方确认模式。此外,还涵盖了RabbitMQ的信道、vhost、broker、cluster、消息路由和交换器类型。最后,阐述了消费端限流的必要性、API及限流配置,以及死信队列的处理流程和设置方法。
摘要由CSDN通过智能技术生成

使用RabbitMQ有什么好处?

1.解耦,系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码,过于麻烦!

2.异步,将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度

3.削峰,并发量大的时候,所有的请求直接怼到数据库,造成数据库连接异常

rabbitmq组件断连重连机制

方案一:
Rabbitmq在启动时,为rabbitmq设置一个status,在第一次建立连接的时候将其变为true,rabbitmq client在初始化时启动一个定时器,每隔一段时间开启一个线程,查询当前status的状态,如果status变为false,重新建立连接(包括connection、channel的连接)。
方案二:
Implement shutdown listener,如果rabbitmq断线,在shutdown方法执行相应的重连方法。

mq在生产者发送消息时,mq内部会对每条消息生成一个唯一id,作为去重和幂等性的依据((消息投递失败并重传))避免重复的消息进入队列;在消息消费时,要求消息体中必须要有一个bizId(对于同一业务全局唯一,如支付ID、订单ID、帖子ID等)作为去重和幂等的依据,避免同一条消息被重复消费。

这个问题针对业务场景来答分以下几点:

1.比如,你拿到这个消息做数据库的insert操作。那就容易了,给这个消息做一个唯一主键,那么就算出现重复消费的情况,就会导致主键冲突,避免数据库出现脏数据。

2.再比如,你拿到这个消息做redis的set的操作,那就容易了,不用解决,因为你无论set几次结果都是一样的,set操作本来就算幂等操作。

3.如果上面两种情况还不行,上大招。准备一个第三方介质,来做消费记录。以redis为例,给消息分配一个全局id,只要消费过该消息,将<id,message>以K-V形式写入redis。那消费者开始消费前,先去redis中查询有没消费记录即可。
 

如何保证消息的顺序性?

针对这个问题,通过某种算法,将需要消息排完序放到同一个消息队列中。然后只用一个消费者去消费该队列。同一个queue里的消息一定是顺序消息的。我的观点是保

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值