1.项目中在什么地方是用了MQ
1.使用mq异步发送优惠券
2.使用mq异步发送短信
3.使用mq异步扣减库存
4.使用mq异步审核贷款金额
实现异步的方式: MQ 和多线程
2.为什么需要使用MQ
1.异步处理(MQ和多线程)
2.实现解耦
3.流量削峰 (实现高并发)
3.MQ实现异步和多线程有什么区别?
1.多线程实现异步可能会消耗我们的CPU资源,可能会影响我们业务线程执行会发生CPU竞争问题
2.MQ实现异步完全是解耦的,适合大型互联网项目
3.小的项目使用多线程实现异步,大项目建议使用MQ
4.MQ如何避免消息堆积问题?
1.长生背景:
生产者投递消息的速率与消费者消费的速率不匹配
2.生产者投递消息的速率>消费者消费的速率
导致消息会堆积在MQ中,没有及时被消费者消费 ,所以产生了消息堆积的问题
3.注意:
rabbitmq 消费者消费消息成功后,消息会被立即删除
kafka和rocketMQ消息被消费后,不会被立即删除
4.解决办法:
1.提高消费者的消费速率(消费者实现集群)
2.消费者应该批量形式获取消息,减少网络传输的次数
5.MQ如何保证消息不丢失
1.MQ服务器端
将消息进行持久化到磁盘上
2.生产者
消息发布确认(单个确认,批量确认,异步确认)
可以将消息进行缓存到redis或者mysql中,根据日志进行补偿机制
3.消费者
必须确认消息消费成功(消息应答)
rabbitMQ 消息消费成功 会删除消息
rocketMQ消费成功,不会删除消息