常见面试题02

简介: 本内容介绍MQ的应用场景、交换机模式、消息不丢失机制、延迟消息处理及消息挤压解决方案,涵盖RabbitMQ的确认机制、持久化、消费者配置及实际项目应用。

什么场景下你们用MQ

主要还是一些异步通信的场景吧,我们会用他去做系统解耦,比如我最近负责的这个项目里面的订单模块,它支付完成就需要告知下游的配送中心,去创建一条待配送的数据,这种又不要求强一致性,就是一个很好的MQ使用场景。

MQ有哪几种交换机模式,你们用的哪种

我了解到的有4种,一个是默认交换机,给基本队列和工作队列使用的;还有FanoutExchange广播模式,DirectExchange定向路由模式和TopicExchange话题路由模式,我们项目用的Topic模式。

怎么确保消息不丢失

面试官这个问题我们生产还真遇到过,后面也去了解了一下,我们用的是RabbitMQ,它本身是有生产者确认机制、MQ消息持久化和消费者确认机制三个保证的,如果面试官还想再了解深一点我可以再展开一下。

生产者确认机制就是给每个消息指定一个唯一ID,当消息发送到MQ之后会有一个结果返回给发送者,如果是消息未投递到交换机就返回publish-confirm的nack,如果到了交换机但是没到队列就返回publish-return的ack,从而保证消息是百分百存储到消息队列中。

消息持久化就比较简单,因为RabbitMQ本身就做了队列持久化、消息持久化、交换机持久化,所以它本身是没有问题的。

消费者确认机制是通过消费者回执来确认消费者是否成功处理消息的:消费者获取消息后,应该向RabbitMQ发送ACK回执,表明自己已经处理消息。有三种配置方式:

•manual:手动ack,需要在业务代码结束后,调用api发送ack。

•auto:自动ack,由spring监测listener代码是否出现异常,没有异常返回ack;抛出异常返回nack

•none:关闭ack,MQ假定消费者获取消息后会成功处理,因此消息投递后立即被删除

我们项目中采用的事auto+重试次数来配置解决的。

了解过MQ的延迟消息吗

了解过的面试官,他是可以通过基于消息的延迟发送或者基于消息队列的延迟消费,前者就是给消息设置一下TTL时间,后者我们是通过安装一个DelayExchange的插件来解决的。

过去我们是在一些取消超时订单的业务场景下有实施过这个解决方案。

怎么解决消息挤压呢

可以通过

  • 增加更多消费者,提高消费速度。也就是我们之前说的work queue模式(或者多线程同理)
  • 扩大队列容积,提高堆积上限


目录
相关文章
|
3月前
|
消息中间件 Java Kafka
消息队列比较:Spring 微服务中的 Kafka 与 RabbitMQ
本文深入解析了 Kafka 和 RabbitMQ 两大主流消息队列在 Spring 微服务中的应用与对比。内容涵盖消息队列的基本原理、Kafka 与 RabbitMQ 的核心概念、各自优势及典型用例,并结合 Spring 生态的集成方式,帮助开发者根据实际需求选择合适的消息中间件,提升系统解耦、可扩展性与可靠性。
226 1
消息队列比较:Spring 微服务中的 Kafka 与 RabbitMQ
|
消息中间件 缓存 架构师
关于 Kafka 高性能架构,这篇说得最全面,建议收藏!
Kafka 是一个高吞吐量、高性能的消息中间件,关于 Kafka 高性能背后的实现,是大厂面试高频问题。本篇全面详解 Kafka 高性能背后的实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
关于 Kafka 高性能架构,这篇说得最全面,建议收藏!
|
3月前
|
存储 SQL 关系型数据库
常见面试题11
MySQL索引主要使用B+tree结构,具有层级少、检索快、支持范围查询等优点。InnoDB中聚簇索引将数据存于叶子节点,主键为默认索引;二级索引则存储主键值,需回表查询完整数据。创建索引需遵循最左前缀、避免类型转换、函数操作等原则,并通过explain分析执行计划,防止索引失效,提升查询效率。
74 0
|
3月前
|
消息中间件 Java Kafka
搭建ELK日志收集,保姆级教程
本文介绍了分布式日志采集的背景及ELK与Kafka的整合应用。传统多服务器环境下,日志查询效率低下,因此需要集中化日志管理。ELK(Elasticsearch、Logstash、Kibana)应运而生,但单独使用ELK在性能上存在瓶颈,故结合Kafka实现高效的日志采集与处理。文章还详细讲解了基于Docker Compose构建ELK+Kafka环境的方法、验证步骤,以及如何在Spring Boot项目中整合ELK+Kafka,并通过Logback配置实现日志的采集与展示。
806 64
搭建ELK日志收集,保姆级教程
|
SpringCloudAlibaba 负载均衡 算法
SpringCloudAliBaba篇之Ribbon负载均衡器:让你的应用从容应对高并发
SpringCloudAliBaba篇之Ribbon负载均衡器:让你的应用从容应对高并发
682 0
|
2月前
|
数据库 微服务
常见面试题19
BASE理论提出“基本可用、软状态、最终一致性”,是分布式系统中对CAP定理的实践妥协。相比强一致的刚性事务(ACID),它属于柔性事务,强调高可用与最终一致,适用于Seata等分布式事务方案中的AT、TCC、SAGA模式,而非传统2PC的强一致性。
67 7
|
3月前
|
存储 网络协议 关系型数据库
常见面试题10
HTTP是超文本传输协议,基于TCP,规定客户端与服务器通信规则。常见请求方式有GET和POST,区别在于参数传递、安全性和用途。HTTPS通过SSL加密更安全,但耗资源。常用状态码如200成功、404未找到、500服务器错误。转发在服务端完成,重定向由浏览器发起两次请求。MySQL中char定长、varchar变长;事务具ACID特性,隔离级别解决并发问题。
103 3
|
3月前
|
缓存 搜索推荐 算法
常见面试题09
排序算法分为比较类(如快排、归并、堆排)和非比较类(如计数、桶、基数)。快排平均最快但不稳定,归并稳定且复杂度恒定,插入排序适合小规模或近有序数据。工业级常混合多种算法优化性能。
93 2
|
3月前
|
人工智能 Java 关系型数据库
使用数据连接池进行数据库操作
使用数据连接池进行数据库操作
125 11
|
3月前
|
NoSQL Java 关系型数据库
超全 Java 学习路线,帮你系统掌握编程的超详细 Java 学习路线
本文为超全Java学习路线,涵盖基础语法、面向对象编程、数据结构与算法、多线程、JVM原理、主流框架(如Spring Boot)、数据库(MySQL、Redis)及项目实战等内容,助力从零基础到企业级开发高手的进阶之路。
313 1