网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
- 异步发送(验证码、短信、邮件…)
- MySQL和Redis , ES之间的数据同步
- 分布式事务
- 削峰填谷
消息发送者(publisher )把消息发送给交换机(exchange),由交换机路由到队列,最后由消费者(consumer)进行消费消息。
出现消息丢失的四种情况:
- 消息未到达交换机
- 消息未到达队列
- 队列中消息丢失
- 消费者未接收到消息
生产者确认机制(解决消息未到达交换机、消息未到达队列问题)
RabbitMQ提供了publisher confirm机制来避免消息发送到MQ过程中丢失。消息发送到MQ以后,会返回一个结果(ack)给发送者,表示消息是否处理成功
如果消息发送失败,有两种情况:
- 消息到达交换机失败(publisher-confirm nack)
- 交换机路由到队列失败(publisher-return ack)
消息失败之后如何处理呢?
- 回调方法即时重发(知道哪一个消息发送失败,可以再发)
- 记录日志(如果还是发送失败,可以记录日志,通过查看日志进行补偿)
- 保存到数据库然后定时重发,成功发送后即刻删除表中的数据
如果重发失败了怎么办?
- 一般消息发送失败了,很大几率是服务提供者宕机了或者是MQ宕机了,这两者不可能一直处于宕机状态。
- 如果还是不能解决,需要人工来解决这些问题
消息已经正常发送到队列,但是MQ 宕机了,也会导致消息丢失,该怎么解决?
消息持久化(解决队列中消息丢失问题**)**
MQ默认是内存存储消息,开启持久化功能可以确保缓存在MQ中的消息不丢失。(MQ宕机或重启后,在内存中的消息肯定会丢失,需要持久化)
1.交换机持久化:
<
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**