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执行流程

相关文章
|
11月前
|
canal Java 关系型数据库
|
7月前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
本文介绍了Claude Code终端AI助手的使用指南,主要内容包括:1)常用命令如版本查看、项目启动和更新;2)三种工作模式切换及界面说明;3)核心功能指令速查表,包含初始化、压缩对话、清除历史等操作;4)详细解析了/init、/help、/clear、/compact、/memory等关键命令的使用场景和语法。文章通过丰富的界面截图和场景示例,帮助开发者快速掌握如何通过命令行和交互界面高效使用Claude Code进行项目开发,特别强调了CLAUDE.md文件作为项目知识库的核心作用。
52150 73
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
|
4月前
|
人工智能 自然语言处理 数据可视化
2026企业AI办公工作流搭建全指南
本文深度剖析AI办公提效的四大核心场景:内容生产、会议沟通、任务管理、知识沉淀,并对比主流工具特点,结合管理者、HR、行政、销售等角色需求给出落地建议,附实操心得与FAQ,助职场人告别重复劳动,专注高价值决策。(239字)
|
11月前
|
监控 Java 测试技术
|
11月前
|
运维 Kubernetes Java
|
11月前
|
uml C语言
|
11月前
|
开发者
|
11月前
|
测试技术
|
11月前
|
Java 开发工具 数据安全/隐私保护