常见面试题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索引的方式。但根据词条查询时,必须先逐条获取每个文档,然后判断文档中是否包含所需要的词条,是根据文档找词条的过程

目录
相关文章
|
3月前
|
负载均衡 Java API
《深入理解Spring》Spring Cloud 构建分布式系统的微服务全家桶
Spring Cloud为微服务架构提供一站式解决方案,涵盖服务注册、配置管理、负载均衡、熔断限流等核心功能,助力开发者构建高可用、易扩展的分布式系统,并持续向云原生演进。
|
3月前
|
缓存 监控 Java
《深入理解Spring》拦截器(Interceptor)——请求处理的艺术
Spring拦截器是Web开发中实现横切关注点的核心组件,基于AOP思想,可在请求处理前后执行日志记录、身份验证、权限控制等通用逻辑。相比Servlet过滤器,拦截器更贴近Spring容器,能访问Bean和上下文,适用于Controller级精细控制。通过实现`HandlerInterceptor`接口的`preHandle`、`postHandle`和`afterCompletion`方法,可灵活控制请求流程。结合配置类注册并设置路径匹配与执行顺序,实现高效复用与维护。常用于认证鉴权、性能监控、统一异常处理等场景,提升应用安全性与可维护性。
|
消息中间件 数据库 RocketMQ
分布式事务常见解决方案
分布式事务常见解决方案
2808 0
|
3月前
|
消息中间件 人工智能 Kafka
AI 时代的数据通道:云消息队列 Kafka 的演进与实践
云消息队列 Kafka 版通过在架构创新、性能优化与生态融合等方面的突破性进展,为企业构建实时数据驱动的应用提供了坚实支撑,持续赋能客户业务创新。
497 45
|
3月前
|
监控 Java 数据库连接
《深入理解Spring》事务管理——数据一致性的守护者
Spring事务管理确保数据一致性,支持声明式与编程式两种方式。通过@Transactional注解简化配置,提供传播行为、隔离级别、回滚规则等灵活控制,结合ACID特性保障业务逻辑可靠执行。
|
2月前
|
关系型数据库 Java MySQL
《理解MySQL数据库》InnoDB事务深度解析
本文深入解析InnoDB事务机制,涵盖ACID特性、隔离级别、MVCC、锁机制及Spring事务管理,结合SQL与Java代码示例,系统阐述事务原理与最佳实践,助力构建高性能、高可靠数据库应用。
|
3月前
|
运维 小程序 搜索推荐
小程序制作平台哪个好?小程序开发工具推荐
在数字化浪潮席卷的当下,小程序凭借其便捷性、易用性和强大的功能,成为企业拓展业务、提升用户体验的重要工具。然而,选择合适的小程序开发模式,是确保项目成功的关键所在。目前,主流的小程序开发模式主要有自主开发、利用SaaS小程序制作平台开发以及外包开发这三种。它们在成本投入、开发周期、控制力度和灵活性等方面各有优劣,适用于不同发展阶段和类型的企业。接下来,我们将对这三种模式进行详细剖析。
586 17
|
3月前
|
负载均衡 监控 算法
《服务治理》负载均衡:微服务架构的"智能调度器"
负载均衡是微服务架构中实现高可用与高性能的核心技术,通过流量分发优化资源利用、降低延迟、避免单点过载。本文系统介绍了客户端与服务端负载均衡模式,涵盖轮询、权重、最少连接等算法,并深入实战Spring Cloud LoadBalancer配置与自定义策略。同时探讨了区域感知、标签路由、响应时间感知等高级特性及监控运维方案,助力构建稳定高效的分布式系统。
|
3月前
|
Web App开发 安全 Java
并发编程之《彻底搞懂Java线程》
本文系统讲解Java并发编程核心知识,涵盖线程概念、创建方式、线程安全、JUC工具集(线程池、并发集合、同步辅助类)及原子类原理,帮助开发者构建完整的并发知识体系。