您现在的位置是:首页 > 原理深入 > Java面试总结Java面试总结

消息队列面试专栏

第十三双眼睛2023-10-25【Java面试总结】人已围观

简介消息队列面试专栏

消息队列面试专栏
3.1什么是消息队列
消息队列Message Queue,简称MQ。
是一种应用间的通信方式,主要由三个部分组成。
生产者:Producer
消息的产生者与调用端
代理:Broker
负责消息的存储、投递、及各种队列附加功能的实现
是消息队列最核心的组成部分
消费者:Consumer一个消息队列的终端
消息队列的应用场景较多,常用的可以分为三种:
异步处理
主要应用于对实时性要求不严格的场景
应用解耦
流量削峰
目前市面上常见的消息队列中间件主要有:ActiveMQ、RabbitMQ、Kafka、RocketMQ这几种

消息队列如何解决消息丢失问题?
一个消息从生产者产生,到被消费者消费,主要经过这 3 个过程:生产消息,存储消息,消费消息
因此如何保证 MQ 不丢失消息,可以从这三个阶段阐述:
生产者保证不丢消息
存储端不丢消息
消费者不丢消息
生产端如何保证不丢消息呢?确保生产✁消息能到达存储端。
如果RocketMQ 消息中间件,Producer 生产者提供了三种发送消息方式,分别:
同步发送
异步发送
单向发送
生产者要想发✲息时保证消息不丢失,可以:
采用同步方式发送,send 消息方法返回成功状态,就表示✲息正常到达了存储端 Broker。
如果 send 消息异常或者返回非成功状态,可以重试。
可以使用事务消息,RocketMQ ✁事务消息机制就✁为了保证零丢失来设计✁
3.1.2存储端不丢消息
如何保证存储端✁消息不丢失呢? 确保消息持久化到磁盘。大家很容易想到就
✁刷盘机制。
刷盘机制分同步刷盘和异步刷盘:
生产者消息发过来时,只有持久化到磁盘,RocketMQ ✁存储端 Broker 才返回一个成功✁ ACK 响应,这就✁同步刷盘。它保证消息不丢失,但✁影响了性能。
异步刷盘✁话,只要消息写入 PageCache 缓存,就返回一个成功✁ ACK 响应。这样提高了 MQ ✁性能,但✁如果这时候机器断电了,就会丢失消息。
Broker 一般✁集群部署✁,有 master 主节点和 slave 从节点。消息到 Broker 存储端,只有主节点和从节点都写入成功,才反馈成功✁ ack 给生产者。这就✁同步复制,它保证了消息不丢失,但✁降低了系统✁吞吐量。与之对应✁就✁异步复制,只要消息写入主节点成功,就返回成功✁ ack,它速度快,但✁会有性能问题。
3.1.3消费阶段不丢消息
消费者执行完业务逻辑,再反馈会 Broker 说消费成功,这样才可以保证✲费阶段不丢消息。







 

Tags:

很赞哦! ()

上一篇:mysql面试专栏

下一篇:面试总结

文章评论

    共有条评论来说两句吧...

    用户名:

    验证码:

本站推荐

站点信息

  • 网站名称:JavaStudy
  • 建站时间:2019-1-14
  • 网站程序:帝国CMS7.5
  • 文章统计242篇文章
  • 标签管理标签云
  • 统计数据百度统计
  • 微信公众号:扫描二维码,关注我们