RabbitMQ面经 手打浓缩版

保证可靠性

生产者

本地事务完成和消息发送同时完成 通过事务消息完成

重写confirm在里面做逻辑处理 确保发送成功(不成功就放入到重试队列)

MQ

打开持久化确保消息不会丢失

消费者

改成手动回应

不重复消费

生产者

保证不重复发送消息

消费者

确保它不重复消费 把消费过的消息存入redis

(把消息中的多个字段进行组合加密得到字符串,如果能在缓存中取到值表示已消费)

顺序消费

传统做法:用单一的消费者,就能确保消息按照顺序消费

缺点:并发度较高的时候,效率会很低

(顺序消费和多线程本身就是矛盾的关系,并发多线程的意义就是因为不在乎顺序,所以才变成多线程)

解决方法:将需要保证顺序的消息放在一块,进行分组然后由单一的消费者消费

将需要保证顺序的放在一组,然后用同一个work进行处理

延迟消息

死信

缺点:需要过期时间一致

如果时间不一致 (例如: 消息A 5分钟过期 消息B 10分钟过期)

另一种方式 :本地库存然后通过轮询重新发送一次信息

缺点:性能上有损耗 但是更加灵活

消息堆积

原因

消费者消费的慢

消费出现问题导致nack队列太多

解决

增加消费者

消费过程改用异步或者多线程

'将当前业务的topic改成新的topic,然后新增多几个消费者在这新的topic上,保证后续业务的正常执行,前面堆积的这些单独开一些消费者在这里消费

相关推荐
京师20万禁军教头几秒前
33面向对象(中级)-object类详解
java
一个小浪吴啊几秒前
重构 AI 编程流:基于 Hermes 记忆中枢与 OpenCode 执行终端的 Harness 工程化实践
java·人工智能·opencode·harness·hermes
Lyyaoo.6 分钟前
【JAVA网络面经】应用层协议
java·开发语言·网络
下地种菜小叶10 分钟前
订单中心怎么设计?一次讲清订单主链路、状态流转、拆单模型与核心边界
安全·缓存·rabbitmq
無限進步D11 分钟前
Java 面向对象高级 继承
java·开发语言
云烟成雨TD13 分钟前
Spring AI Alibaba 1.x 系列【37】ReactAgent 构建、执行流程分析
java·人工智能·spring
是宇写的啊22 分钟前
MyBaties
java·开发语言·mybatis
钝挫力PROGRAMER25 分钟前
程序中事件机制的实现
java·后端·python·软件工程
程序员威哥29 分钟前
Java调用YOLO模型性能优化实战:CPU/GPU加速与内存优化全指南
java·人工智能·后端
Xpower 1735 分钟前
OpenClaw Token 优化的技术方案与实践:OpenSpace 自进化 Skill 引擎
java·开发语言·人工智能