消息中间件之八股面试回答篇:一、问题概览+MQ的应用场景+RabbitMQ如何保证消息不丢失(生产者确认机制、持久化、消费者确认机制)+回答模板

这篇具有很好参考价值的文章主要介绍了消息中间件之八股面试回答篇:一、问题概览+MQ的应用场景+RabbitMQ如何保证消息不丢失(生产者确认机制、持久化、消费者确认机制)+回答模板。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题概览

消息中间件之八股面试回答篇:一、问题概览+MQ的应用场景+RabbitMQ如何保证消息不丢失(生产者确认机制、持久化、消费者确认机制)+回答模板,RabbitMQ,消息队列面试,面试,rabbitmq,职场和发展,spring cloud,java,后端,分布式
目前主流的消息队列技术(MQ技术)分为RabbitMQ和Kafka,其中深蓝色为只要是MQ,一般都会问到的问题。浅蓝色是针对RabbitMQ的特性的问题。蓝紫色为针对Kafka的特性的问题。

MQ的应用场景

MQ主要提供的功能为:异步 解耦 削峰 。
展开来讲就是

  • 异步发送(验证码、短信、邮件…)
  • MYSQL和Redis/ES之间的数据同步
  • 分布式事务
  • 削峰填谷

RabbitMQ如何保证消息不丢失

RabbitMQ的工作流程应该如下,其中每个环节都可能导致消息丢失。
消息中间件之八股面试回答篇:一、问题概览+MQ的应用场景+RabbitMQ如何保证消息不丢失(生产者确认机制、持久化、消费者确认机制)+回答模板,RabbitMQ,消息队列面试,面试,rabbitmq,职场和发展,spring cloud,java,后端,分布式
publisher叫做发布者,也可叫做生产者。consumer叫做消费者。

生产者确认机制(解决消息未到达交换机或队列的问题)

生产者确认机制是用来确认生产者将消息发送给交换器,交换器传递给队列的过程中,消息是否成功投递的。发送确认分为两步,一是确认是否到达交换器,二是确认是否到达队列。
消息中间件之八股面试回答篇:一、问题概览+MQ的应用场景+RabbitMQ如何保证消息不丢失(生产者确认机制、持久化、消费者确认机制)+回答模板,RabbitMQ,消息队列面试,面试,rabbitmq,职场和发展,spring cloud,java,后端,分布式
如果没有成功到达交换器,那么就会返回一个nack publish-confirm
如果没有成功到达队列,那么就会返回一个ack publish-return

那确认消息发送失败之后如何处理捏?
一般有以下三种做法:

  • 回调方法即时重发
  • 记录日志
  • 保存到数据库然后定时重发,成功发送后即刻删除表中的数据

持久化技术(解决消息在队列中丢失的问题)

MQ默认是内存存储消息,需要持久化。分为交换机持久化、队列持久化和消息持久化,都通过代码来完成。
消息中间件之八股面试回答篇:一、问题概览+MQ的应用场景+RabbitMQ如何保证消息不丢失(生产者确认机制、持久化、消费者确认机制)+回答模板,RabbitMQ,消息队列面试,面试,rabbitmq,职场和发展,spring cloud,java,后端,分布式

消费者确认机制(解决消息未到达消费者的问题)

RabbitMQ支持消费者确认机制,即:消费者处理消息后可以向MQ发送ack回执,MQ收到ack回执后才会删除该消息。而SpringAMQP则允许配置三种确认模式:

  1. manual:手动ack,需要在业务代码结束后,调用api发送ack。
  2. auto:自动ack,由spring监测listener代码是否出现异常,没有异常则返回ack;抛出异常则返回nack
  3. none:关闭ack,MQ假定消费者获取消息后会成功处理,因此消息投递后立即被删除。
    在实际生产场景中使用的是auto模式。
    如果确认消息丢失了怎么办捏?
    我们可以利用Spring的retry机制,在消费者出现异常时利用本地重试,设置重试次数,当次数达到了以后,如果消息依然失败,将消息投递到异常交换机,交由人工处理。

常见问题和回答模板

RabbitMQ如何保证消息不丢失?

回答:(背熟以下回答大概用时2min)

RabbitMQ分别提供了三个机制,第一个是生产者确认机制,用来保证消息成功到达交换机,且成功到达队列。第二个是持久化机制,用来保证消息不在队列中丢失。第三个是消费者确认机制,用来保证消息成功到达消费者。通过以上三种机制可以综合保证消息不丢失。

首先是生产者确认机制,如果消息未能成功到达交换机,那么就返回nack publish-confirm,如果消息未能成功到达队列,那么就返回ack publish-return。通过返回的信号不同,我们可以判断具体是哪个环节出了问题并采取对应手段,譬如:用回调方法即使重发或者保存到数据库然后定时重发等。

然后是持久化机制,因为MQ是基于内存的存储,所以我们需要持久化来保证消息不会在队列中丢失。我们一共需要持久化三部分,分别是交换机、队列和消息本身,都是通过代码完成的。

最后是消费者确认机制,只有消费者接受到消息并返回ack信号后,RabbitMQ才会删除该消息。框架一般支持自动确认、手动确认和不确认三种模式。我们一般选的都是自动确认。如果确认发现消息在这个环节丢失,那么也会有相应的retry机制。文章来源地址https://www.toymoban.com/news/detail-821240.html

到了这里,关于消息中间件之八股面试回答篇:一、问题概览+MQ的应用场景+RabbitMQ如何保证消息不丢失(生产者确认机制、持久化、消费者确认机制)+回答模板的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java面试丨消息中间件】Kafka

    1. 介绍 使用kafka在消息的收发过程都有可能会出现消息丢失 (1)生产者发送消息到broker丢失 (2)消息在broker中存储丢失 (3)消费者从broker接收消息丢失 2. 生产者发送消息到broker丢失 设置异步发送:同步发送会发生阻塞,一般使用异步发送方式发送消息 消息重试:由于网

    2024年02月11日
    浏览(32)
  • 消息中间件中常见问题

    MQ的用途 异步发送(验证码,短信,邮件) MySQL,ES,Redis之间的数据同步 分布式事务 削峰填谷 消息可能丢失的环境 消息在产生端时候生产端挂掉,消息未到达交换机,消息丢失 消息在交换机未到达队列,消息丢失 消息队列中如果队列挂掉消息也可能丢失 消费者未接收消

    2024年02月15日
    浏览(30)
  • 消息中间件学习笔记--RabbitMQ(二、模式,一次违反常规的Java大厂面试经历

    .Fanout:转发消息到所有绑定队列 比较常用的是Direct、Topic、Fanout. Fanout 这种Fanout模式不处理路由键,只·需要简单的将队列绑定到exchange上,一个发送到exchange的消息都会被转发到与该exchange绑定的所有队列上。很像广播子网,每台子网内的主机都获得了一份复制的消息。Fan

    2024年04月09日
    浏览(84)
  • 【中间件】消息中间件之Kafka

    一、概念介绍 Apache Kafka是一个分布式流处理平台,用于构建实时数据管道和流应用。它可以处理网站、应用或其他来源产生的大量数据流,并能实时地将这些数据流传输到另一个系统或应用中进行处理。 核心概念: Topic(主题) :消息的分类,用于区分不同的业务消息。

    2024年01月20日
    浏览(48)
  • 【JAVA开发面试】如何处理并发访问如何进行代码的单元测试Java多线程编程消息中间件设计模式技术难题是如何解决的

    【 点我-这里送书 】 本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题 中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明

    2024年02月03日
    浏览(35)
  • RabbitMQ 消息中间件 消息队列

    RabbitMQ 1、RabbitMQ简介 RabbiMQ是⽤Erang开发的,集群⾮常⽅便,因为Erlang天⽣就是⼀⻔分布式语⾔,但其本身并 不⽀持负载均衡。支持高并发,支持可扩展。支持AJAX,持久化,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 2、RabbitMQ 特点 可

    2024年02月03日
    浏览(42)
  • 【消息中间件】详解mq消息积压

    作者简介 目录 1.产生原因 2.解决办法 2.1.事前处理机制 2.2.事中处理机制 2.3.事后处理机制 消息积压(Message Backlog)指的是在消息队列(MQ)系统中等待被处理的消息数量超过了正常的处理速度,导致消息在队列中积压堆积的情况。 消息积压的常见表现: 系统资源使用率上升

    2024年02月07日
    浏览(36)
  • 消息中间件RabbitMQ

    1.1.1. 什么是MQ MQ(message queue) ,从字面意思上看,本质是个队列,FIFO 先入先出,只不过队列中存放的内容是message 而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ 是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了 MQ 之后,

    2024年01月17日
    浏览(52)
  • 常用消息中间件介绍

    RocketMQ   阿里开源,阿里参照kafka设计的,Java实现   能够保证严格的消息顺序   提供针对消息的过滤功能   提供丰富的消息拉取模式   高效的订阅者水平扩展能力   实时的消息订阅机制   亿级消息堆积能力   RabbitMQ Erlang实现,非常重量级,更适合于企业级的开发。同时实

    2024年02月12日
    浏览(33)
  • 消息队列中间件介绍

    消息队列介绍   消息队列中间件是大型系统中的重要组件,已经逐渐成为企业系统内部通信的核心手段。它具有松耦合、异步消息、流量削峰、可靠投递、广播、流量控制、最终一致性等一系列功能,已经成为异步RPC的主要手段之一。 目前常见的消息中间件有ActiveMQ、Rabbi

    2024年02月04日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包