热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

【面试题】消息队列

目录1.为什么要用消息队列(应用场景)?2.各种消息队列产品的比较3.消息队列的优势和缺点4.如何保证消息队列的高可用࿱

目录

1.为什么要用消息队列(应用场景)?

2.各种消息队列产品的比较

3.消息队列的优势和缺点

4.如何保证消息队列的高可用?

5.如何保证消息不丢失?

6.如何保证消息不被重复消费?(消费幂等性)

重复消息产生的原因

消息幂等性

7.如何保证消息消费的顺序性?

8.大量消息堆积如何处理?

9.消息过期如何处理?




1.为什么要用消息队列(应用场景)?

(考察是否知道为什么要用消息队列?消息队列在项目中解决的是什么问题)

消息队列的本质:是一种“先进先出”的数据结构

常见应用场景:解耦、异步、削峰






2.各种消息队列产品的比较

(考察面试者是否对市面上的MQ产品做过调研?

在选择MQ时是否根据不同MQ的产品特点做过对比和取舍?)

常见消息队列:Kafka、RocketMQ、RabbitMQ、ActiveMQ


3.消息队列的优势和缺点

(考察面试者在项目中引入一个新的技术后,是否全面考虑过新技术对当前项目的影响)

优点:解耦、异步、削峰

缺点:系统可用性降低、系统复杂度提高、一致性问题



4.如何保证消息队列的高可用?

(考察面试者针对可用性降低问题的思考和解决思路,回答自己使用过的一两个MQ产品的高可用方案即可)

RabbitMQ高可用——镜像集群

RocketMQ高可用——双主双从


5.如何保证消息不丢失?

(1.考察是否清楚消息丢失的原因  2.如何保证消息不丢失)

总结:

消息丢失的原因:发送方、MQ、消费方都有可能导致消息丢失

如何保证消息不丢失


  • 发送可靠发送
  • MQ进行消息持久化
  • 消费方消费完毕进行ACK确认,MQ收到消费方的ACK确认再删除本地消息

6.如何保证消息不被重复消费?(消费幂等性)

消息的重复消费和保证幂等性会经常被连着问,当出现了重复消费后,为了保证系统数据的正常,就必须要保证幂等性。

(考察点1.重复消息产生的原因的思考  2.保证消息幂等性的方案)


重复消息产生的原因



消息幂等性

总结:

消息重复原因:网络不可达,不可避免。

幂等性:消息携带全局ID,消费方接到消息时先查询再处理,根据全局ID做判重操作。


7.如何保证消息消费的顺序性?

(1.考察是否理解什么是消息顺序消费 2.考察是否思考过确保消息顺序消费的方案)


8.大量消息堆积如何处理?

(1.考察面试者是否清楚消息堆积的原因  2.消息堆积如何处理)


9.消息过期如何处理?


 


推荐阅读
  • 一文了解消息中间件RabbitMQ
    消息中间件---RabbitMQ1消息中间件的作用2.常用的消息中间件3消息中间件RabbitMQ3.1RabbitMQ介绍3.3RabbitMQ的队列模式3.3RabbitMQ的 ... [详细]
  • RocketMQ在秒杀时的应用
    目录一、RocketMQ是什么二、broker和nameserver2.1Broker2.2NameServer三、MQ在秒杀场景下的应用3.1利用MQ进行异步操作3. ... [详细]
  • 启动activemq_「Java」SpringBoot amp; ActiveMQ
    一、消息队列消息队列中间件是分布式系统中重要的组件,主要解决应用耦合、异步消息、流量削锋等问题,实现高性能、高可用、可伸缩和最终一致性架构, ... [详细]
  • 修复一个 Bug 竟耗时两天?真的有那么复杂吗?
    修复一个 Bug 竟然耗费了两天时间?这背后究竟隐藏着怎样的复杂性?本文将深入探讨这个看似简单的 Bug 为何会如此棘手,从代码层面剖析问题根源,并分享解决过程中遇到的技术挑战和心得。 ... [详细]
  • 本文提供了 RabbitMQ 3.7 的快速上手指南,详细介绍了环境搭建、生产者和消费者的配置与使用。通过官方教程的指引,读者可以轻松完成初步测试和实践,快速掌握 RabbitMQ 的核心功能和基本操作。 ... [详细]
  • 在RabbitMQ中,消息发布者默认情况下不会接收到关于消息在Broker中状态的反馈,这可能导致消息丢失的问题。为了确保消息的可靠传输与投递,可以采用确认机制(如发布确认和事务模式)来验证消息是否成功抵达Broker,并采取相应的重试策略以提高系统的可靠性。此外,还可以配置消息持久化和镜像队列等高级功能,进一步增强消息的可靠性和高可用性。 ... [详细]
  • 背景最近面试面得心力交瘁,由于没有高并发架构的实际项目经验,经常是在场景设计的面试题目上面栽跟头。上次就被问到了关于秒杀系统的设计,竟无 ... [详细]
  • SpringCloud之Bus(消息总线)
    说明:关于SpringCloud系列的文章中的代码都在码云上面地址:https:gitee.comzh_0209_javaspringcloud-ali ... [详细]
  • .Net下RabbitMQ发布订阅模式实践
    一、概念AMQP,即AdvancedMessageQueuingProtocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的 ... [详细]
  • 阿里巴巴终面技术挑战:如何利用 UDP 实现 TCP 功能?
    在阿里巴巴的技术面试中,技术总监曾提出一道关于如何利用 UDP 实现 TCP 功能的问题。当时回答得不够理想,因此事后进行了详细总结。通过与总监的进一步交流,了解到这是一道常见的阿里面试题。面试官的主要目的是考察应聘者对 UDP 和 TCP 在原理上的差异的理解,以及如何通过 UDP 实现类似 TCP 的可靠传输机制。 ... [详细]
  • 在当今的软件开发领域,分布式技术已成为程序员不可或缺的核心技能之一,尤其在面试中更是考察的重点。无论是小微企业还是大型企业,掌握分布式技术对于提升工作效率和解决实际问题都至关重要。本周的Java架构师实战训练营中,我们深入探讨了Kafka这一高效的分布式消息系统,它不仅支持发布订阅模式,还能在高并发场景下保持高性能和高可靠性。通过实际案例和代码演练,学员们对Kafka的应用有了更加深刻的理解。 ... [详细]
  • 掌握PHP框架开发与应用的核心知识点:构建高效PHP框架所需的技术与能力综述
    掌握PHP框架开发与应用的核心知识点对于构建高效PHP框架至关重要。本文综述了开发PHP框架所需的关键技术和能力,包括但不限于对PHP语言的深入理解、设计模式的应用、数据库操作、安全性措施以及性能优化等方面。对于初学者而言,熟悉主流框架如Laravel、Symfony等的实际应用场景,有助于更好地理解和掌握自定义框架开发的精髓。 ... [详细]
  • 在Linux系统中,原本已安装了多个版本的Python 2,并且还安装了Anaconda,其中包含了Python 3。本文详细介绍了如何通过配置环境变量,使系统默认使用指定版本的Python,以便在不同版本之间轻松切换。此外,文章还提供了具体的实践步骤和注意事项,帮助用户高效地管理和使用不同版本的Python环境。 ... [详细]
  • 深入解析十大经典排序算法:动画演示、原理分析与代码实现
    本文深入探讨了十种经典的排序算法,不仅通过动画直观展示了每种算法的运行过程,还详细解析了其背后的原理与机制,并提供了相应的代码实现,帮助读者全面理解和掌握这些算法的核心要点。 ... [详细]
  • Alibaba珍藏版mybatis手写文档,值得一读!
    一面问题:MySQLRedisKafka线程算法mysql知道哪些存储引擎,它们的区别mysql索引在什么情况下会失效mysql在项目中的优化场景&# ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有