Day05

简介: 本文介绍RabbitMQ消息可靠性传输的三大机制:生产者确认、消息持久化与消费者确认,结合实际场景解析如何防止消息丢失。同时探讨延迟消息实现方式及消息积压解决方案,并简要涉及MyBatis核心知识点。

Day05

每日必会
怎么确保消息不丢失

面试官这个问题我们生产还真遇到过,后面也去了解了一下,我们用的是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模式(或者多线程同理)
扩大队列容积,提高堆积上限

理论专项
MyBatis
#和&区别
一级/二级缓存
一条SQL执行流程


相关文章
|
2月前
|
负载均衡 Dubbo 应用服务中间件
Day01
本文介绍微服务架构的适用场景及技术选型,对比单体与微服务优劣,详解Nacos与Eureka注册中心的心跳机制、服务治理差异,并涵盖常见负载均衡算法及SpringCloud Alibaba常用组件实践。
 Day01
|
2月前
|
运维 Devops 开发工具
生产环境缺陷管理
针对大型团队多分支开发中bug管理难题,本文介绍基于go-git实现的分布式工具git-poison,通过“投毒-解药-银针”机制,实现bug的自动化追溯、发布卡点与影响范围精准识别,有效避免人为疏漏导致的生产事故,提升缺陷管理效率与系统稳定性。
生产环境缺陷管理
Day07
简介:本文讲解CAP与BASE理论核心要点,阐述分布式系统中一致性、可用性与分区容错性的权衡,解析Seata AT模式的执行流程,并探讨MQ消息防丢失、重复消费及积压处理等关键问题。
Day07
|
2月前
|
uml C语言
系统时序图
时序图(Sequence Diagram)是UML中描述对象间消息传递时间顺序的交互图,横轴为对象,纵轴为时间。它用于展示系统动态协作过程,强调交互的时间先后关系,直观呈现并发行为。主要元素包括角色、对象、生命线、控制焦点和消息等,广泛应用于软件设计建模。
系统时序图
|
2月前
|
消息中间件 存储 数据挖掘
应用架构图
本文介绍应用架构图的设计原理,涵盖单体与分布式架构模式。重点解析展现层、业务层、数据层及基础通用层的分层设计,阐述系统间调用关系与外部依赖,明确应用边界,指导技术方案落地。
|
2月前
|
消息中间件 运维 物联网
语音通知
语音通知服务适用于科技公司服务器或物联网设备异常时的告警通知。通过语音电话形式,向处理人播报预设模板内容,支持变量替换实现个性化提醒。需开通语音服务并申请资质、话术、号码及模板,可通过API发起呼叫并查询记录,支持主动查询与消息回执两种结果获取方式,提升运维响应效率。
语音通知
|
2月前
|
项目管理 开发者
业务架构图
业务架构图是梳理业务层级与关系的工具,通过分层、分模块、分功能,抽象出业务核心结构,明确各部分职责与协作,服务于客户理解与系统开发,是连接业务与技术的重要桥梁。
|
2月前
|
缓存 算法 Java
线程池
线程池是一种池化技术,通过复用线程减少创建和销毁开销,提升多线程编程效率。它由Executor框架支持,核心实现为ThreadPoolExecutor,可管理线程生命周期、任务队列与调度策略。ScheduledThreadPoolExecutor在此基础上扩展了周期性任务调度能力,借助DelayedWorkQueue实现延迟执行。Executors提供多种工厂方法,便于创建适配不同场景的线程池,如固定大小、缓存型或单线程池。合理使用线程池能有效控制系统资源消耗,避免线程过度切换,是高并发编程的重要基础。
|
2月前
|
设计模式 Linux 开发工具
Day03
Day03:掌握Docker部署常用命令如docker run、pull、exec等,熟悉Linux基础指令如ls、cd、grep、ps、top等,能通过cat+grep查看日志,了解SpringMVC执行流程与注解,具备项目实战能力。
|
2月前
|
设计模式 消息中间件 缓存
Day04
本文介绍了MQ在异步通信与系统解耦中的应用,结合订单模块支付后通知配送的场景,说明其适用性。同时讲解了RabbitMQ的四种交换机模式:默认、Fanout、Direct与Topic,项目中采用Topic模式。最后梳理Spring核心知识点,涵盖IOC、AOP、三级缓存、设计模式及事务失效等。