RabbitMQ面经 手打浓缩版

保证可靠性

生产者

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

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

MQ

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

消费者

改成手动回应

不重复消费

生产者

保证不重复发送消息

消费者

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

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

顺序消费

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

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

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

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

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

延迟消息

死信

缺点:需要过期时间一致

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

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

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

消息堆积

原因

消费者消费的慢

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

解决

增加消费者

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

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

相关推荐
Wang's Blog4 分钟前
Java 项目实战:交友项目环信云通信全解——体系集成、执行链路与 REST API 实战
java·spring·交友
god_cvz8 分钟前
第三章:12、经验沉淀与自优化
java·ai
小冯不疯10 分钟前
查询旺店通货品策略实战教程:从源系统拉取到轻易云的端到端落地
java·大数据·数据库
SunnyDays101115 分钟前
Java 实现 Excel 与 Markdown 相互转换:表格导出、格式设置与多表提取
java·excel转markdown·markdown转excel
zjx238828 分钟前
java很老的web工程重构,加入详细异常链信息分析
java·重构
山东孙燕姿40 分钟前
设备台账重构:从一张表到三层模型
android·java·网络·低代码·重构·rxjava
萧瑟余晖1 小时前
Spring缓存抽象详解
java·spring·缓存
贾伟康1 小时前
【共创稿事节】一个 UserDataManager 管八类数据:Preferences 持久化的克制用法
java·服务器·前端·harmonyos·arkts·鸿蒙
卓豪终端管理1 小时前
【无标题】
java·服务器·前端
智_永无止境1 小时前
又找到一个纯Java的OCR项目,识别的格式还挺多
java·开发语言·ocr