热门标签 | 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.消息过期如何处理?


 


推荐阅读
  • 利用GitHub热门资源,成功斩获阿里、京东、腾讯三巨头Offer
    Spring框架作为Java生态系统中的重要组成部分,因其强大的功能和灵活的扩展性,被广泛应用于各种规模的企业级应用开发中。本文将通过一份在GitHub上获得极高评价的Spring全家桶文档,探讨如何掌握Spring框架及其相关技术,助力职业发展。 ... [详细]
  • 历经两个月,他成功斩获阿里巴巴Offer
    经过两个月的努力,一位普通的双非本科毕业生最终成功获得了阿里巴巴的录用通知。 ... [详细]
  • 收割机|篇幅_国内最牛逼的笔记,不接受反驳!!
    收割机|篇幅_国内最牛逼的笔记,不接受反驳!! ... [详细]
  • 一、搭建项目创建Maven项目导入rabbitmq包com.rabbitmqamqp-clien ... [详细]
  • RabbitMQ 核心组件解析
    本文详细介绍了RabbitMQ的核心概念,包括其基本原理、应用场景及关键组件,如消息、生产者、消费者、信道、交换机、路由键和虚拟主机等。 ... [详细]
  • 电商高并发解决方案详解
    本文以京东为例,详细探讨了电商中常见的高并发解决方案,包括多级缓存和Nginx限流技术,旨在帮助读者更好地理解和应用这些技术。 ... [详细]
  • 本文总结了近年来在实际项目中使用消息中间件的经验和常见问题,旨在为Java初学者和中级开发者提供实用的参考。文章详细介绍了消息中间件在分布式系统中的作用,以及如何通过消息中间件实现高可用性和可扩展性。 ... [详细]
  • Spring Boot + RabbitMQ 消息确认机制详解
    本文详细介绍如何在 Spring Boot 项目中使用 RabbitMQ 的消息确认机制,包括消息发送确认和消息接收确认,帮助开发者解决在实际操作中可能遇到的问题。 ... [详细]
  • MainActivityimportandroid.app.Activity;importandroid.os.Bundle;importandroid.os.Handler;im ... [详细]
  • 本文探讨了在C#服务中捕获控制台输出的有效方法,特别是在远程系统部署的应用场景下。文中不仅提供了基础的解决方案,还深入讨论了最佳实践,如使用日志库和事件日志等。 ... [详细]
  • MQTT协议:轻量级消息传输的基石
    MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是一种基于发布/订阅模式的轻量级通信协议,适用于低带宽、高延迟或不可靠的网络环境。该协议基于TCP/IP构建,由IBM在1999年首次推出,旨在通过最小化网络流量和代码量,为远程设备提供高效、可靠的消息传输服务。 ... [详细]
  • 使用AE创作可爱小狗MG动画教程
    本教程详细介绍了如何使用Adobe After Effects (AE) 创作一只活泼可爱的小狗MG动画,包括从AI绘图到AE动画制作的全过程。 ... [详细]
  • 本文总结了一次针对大厂Java研发岗位的面试经历,探讨了面试中常见的问题及其背后的原因,并分享了一些实用的面试准备资料。 ... [详细]
  • 本文探讨了有效学习专业技能的方法,包括编程语言、操作系统、软件组件及前沿技术的探索,旨在为初学者提供一套系统的自学指南。 ... [详细]
  • 流处理中的计数挑战与解决方案
    本文探讨了在流处理中进行计数的各种技术和挑战,并基于作者在2016年圣何塞举行的Hadoop World大会上的演讲进行了深入分析。文章不仅介绍了传统批处理和Lambda架构的局限性,还详细探讨了流处理架构的优势及其在现代大数据应用中的重要作用。 ... [详细]
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社区 版权所有