常见面试题24

简介: MQ死信队列用于处理消费失败或过期消息,通过死信交换机转发至指定队列,实现延迟处理。结合TTL可构建延迟队列。为防重复消费,可用去重表记录已处理消息。消息积压可通过并发消费、多线程、设置TTL和队列长度限制缓解,消费失败可转入死信队列避免阻塞。RabbitMQ支持简单、工作、广播、定向、主题五种消息模式。Elasticsearch正向索引以文档ID为主键,记录词位置,适合按文档查词,但检索效率低。

MQ死信队列(延迟队列)

当一个队列中的消息满足下列情况之一时,可以成为死信(dead letter):

  • 消费者使用basic.rejectbasic.nack声明消费失败,并且消息的requeue参数设置为false
  • 消息是一个过期消息,超时无人消费
  • 要投递的队列消息满了,无法投递

如果一个队列中的消息已经成为死信,并且这个队列通过dead-letter-exchange属性指定了一个交换机,那么队列中的死信就会投递到这个交换机中,而这个交换机就称为死信交换机(Dead Letter Exchange)。而此时加入有队列与死信交换机绑定,则最终死信就会被投递到这个队列中;这个队列称为 死信队列

一般情况;都是对一个消息设置过期时间,然后再到时间之后接收消息,达到延迟处理的效果;这样的死信队列也被称为延迟队列。

如何防止消息重复消费

利用去重表来解决,每次接收到消息之后,先从去重表查询该消息是否已经消费,如果已经消费就不处理本来的业务,否则处理本来的业务并且往去重表添加一行消息去重记录。

如何解决消息解压问题

  1. 消息过多,消费者消费速度太慢。
  • 多个消费者并发消费
  • 多线程并发消费
  • 设置消息存活时间(TTL) Time To Live
  • 设置队列中存储消息的界限(Lim) limit
  1. 消费者消费失败,消息还在业务队列中。
  • 再重试一次,如果还不行,扔到死信队列,避免队列阻塞。

RabbitMQ的消息模式

模式有常见的五种:

  • 简单队列模式:一个生产者,一个消费者,一个消息被一个消费者接收;
  • 工作队列模式:一个生产者,生产一个消息到一个队列中,多个消费者同时监听这个队列;消息被竞争消费。(默认平均,可配置为 能者多得)
  • 交换机模式
  • Fanout 广播模式:每个绑定到该类交换机的队列都能接收到消息,实现广播的效果
  • Direct 定向模式:每个绑定到交换机的队列,还有一个路由key;发送的key与绑定同类key的队列才能接收到消息
  • Topic 主题模式:每个绑定到交换机的队列,还有一个路由key;发送的key与绑定同类key的队列才能接收到消息;这个key可以使用通配符;*表示一个字符,#表示多个

elasticsearch正向索引

正向索引:以文档的ID为关键字,表中记录文档中每个字的位置信息,查找时扫描表中每个文档中字的信息直到找出所有包含查询关键字的文档

正向索引是最传统的,根据id索引的方式。但根据词条查询时,必须先逐条获取每个文档,然后判断文档中是否包含所需要的词条,是根据文档找词条的过程

目录
相关文章
|
2月前
|
负载均衡 Java API
《深入理解Spring》Spring Cloud 构建分布式系统的微服务全家桶
Spring Cloud为微服务架构提供一站式解决方案,涵盖服务注册、配置管理、负载均衡、熔断限流等核心功能,助力开发者构建高可用、易扩展的分布式系统,并持续向云原生演进。
|
2月前
|
缓存 监控 Java
《深入理解Spring》拦截器(Interceptor)——请求处理的艺术
Spring拦截器是Web开发中实现横切关注点的核心组件,基于AOP思想,可在请求处理前后执行日志记录、身份验证、权限控制等通用逻辑。相比Servlet过滤器,拦截器更贴近Spring容器,能访问Bean和上下文,适用于Controller级精细控制。通过实现`HandlerInterceptor`接口的`preHandle`、`postHandle`和`afterCompletion`方法,可灵活控制请求流程。结合配置类注册并设置路径匹配与执行顺序,实现高效复用与维护。常用于认证鉴权、性能监控、统一异常处理等场景,提升应用安全性与可维护性。
|
消息中间件 数据库 RocketMQ
分布式事务常见解决方案
分布式事务常见解决方案
2591 0
|
1月前
|
Prometheus 监控 数据可视化
我用 Spring AOP 做了一个可插拔的日志追踪系统
基于Spring AOP设计的可插拔日志追踪系统,通过注解实现方法级日志监控,无侵入、易配置。支持全局开关、日志级别控制与TraceId链路追踪,有效解耦业务代码与日志逻辑,提升系统可维护性与可观测性。
93 6
|
2月前
|
消息中间件 人工智能 Kafka
AI 时代的数据通道:云消息队列 Kafka 的演进与实践
云消息队列 Kafka 版通过在架构创新、性能优化与生态融合等方面的突破性进展,为企业构建实时数据驱动的应用提供了坚实支撑,持续赋能客户业务创新。
373 28
|
2月前
|
缓存 NoSQL 关系型数据库
MySQL 与 Redis 如何保证双写一致性?
我是小假 期待与你的下一次相遇 ~
392 7
|
2月前
|
关系型数据库 Apache 微服务
《聊聊分布式》分布式系统基石:深入理解CAP理论及其工程实践
CAP理论指出分布式系统中一致性、可用性、分区容错性三者不可兼得,必须根据业务需求进行权衡。实际应用中,不同场景选择不同策略:金融系统重一致(CP),社交应用重可用(AP),内网系统可选CA。现代架构更趋向动态调整与混合策略,灵活应对复杂需求。
|
4月前
|
人工智能 监控 搜索推荐
使用LangGraph从零构建多智能体AI系统:实现智能协作的完整指南
本文将通过构建AI研究助手的完整案例,展示如何使用LangGraph框架实现这种架构转变,从理论基础到具体实现,帮助你掌握下一代AI系统的构建方法。
952 0
使用LangGraph从零构建多智能体AI系统:实现智能协作的完整指南
|
2月前
|
监控 Java 数据库连接
《深入理解Spring》事务管理——数据一致性的守护者
Spring事务管理确保数据一致性,支持声明式与编程式两种方式。通过@Transactional注解简化配置,提供传播行为、隔离级别、回滚规则等灵活控制,结合ACID特性保障业务逻辑可靠执行。