八股中间件

ps:中间件蛮多的,但是这里注意走RabbtMQ把

RabbitMQ如何保证消息不丢失?

信息的保证性

生产者 开启生产者确认机制,到达队列返回ack

队列 交换机 开启持久化功能

消费者

开启消费者确认机制,开启消费者重试机制

RabbitMQ重复

服务发送信息,然后宕机重启。

服务在发送信息,幂等性

  • 通过业务唯一标识检查数据库中数据是否存在,若不存在则处理消息,若存在则忽略,避免重复消费。

主要是要思考到这个问题,要么给Redis记录库,要么自己想办法想想怎么解决

  • 使用Redis分布式锁或数据库锁来确保操作的幂等性。

  • 以 RabbitMQ + Redis 分布式锁为例,完整流程如下(新手友好版): 生成唯一锁标识:用消息的唯一 ID(如消息的message_id或业务唯一标识,比如订单 ID)作为 Redis 锁的key; 抢占分布式锁:消费者拿到消息后,先尝试向 Redis 写入这个锁(带过期时间,防止死锁); 判断锁是否获取成功: 成功:执行业务逻辑,执行完成后手动确认消息(RabbitMQ 建议用手动确认模式); 失败:说明已有其他消费者在处理这条消息,直接放弃处理,不确认消息(或直接忽略); 释放锁:业务执行完成后,主动删除 Redis 中的锁(需保证原子性,避免误删其他锁)

  • 加锁不可靠,无法解决宕机的问题

死信队列

延迟队列:进入队列的消息会被延迟消费的队列 场景:超时订单、限时优惠、定时发布

TTL,也就是Time-To-Live。如果一个队列中的消息TTL结束仍未消费,则会变为死信,ttl超时分为两种情况: 消息所在的队列设置了存活时间 消息本身设置了存活时间

延迟队列

DelayExchange插件,需要安装在RabbitMQ中 RabbitMQ有一个官方的插件社区,地址为:https://www.rabbitmq.com/community-plugins.html

  • 另一种方法是安装RabbitMQ的死信插件,简化配置,在声明交换机时指定为死信交换机,并设置消息超时时间。
100W消息堆积MQ

1.提供消费者能力,采取多线程或加机器

2.惰性消息,磁盘保存

3.增加消费者数量,采用工作队列模式,让多个消费者并行消费同一队列。

工作队列:通过多个消费者并发消费同一个队列,提高消息处理速度,缓解消费瓶颈。

惰性队列:将消息直接存储在磁盘上,仅在消费时加载,适用于海量消息堆积场景,降低内存压力

RabbitMQ高可用

普通集群
镜像集群

可能主节点宕机,未同步,暑假丢失

  1. 那出现丢数据怎么解决呢?

仲裁集群

只需要指定是仲裁队列即可-

相关推荐
哥本哈士奇2 天前
LangChain Deepagent 版本0.6.1中间件一个bug
中间件·langchain·bug
逍遥德2 天前
SpringBoot自带TaskScheduler 接口使用详解:(02)微服务多实例模式下,爆发任务重复执行问题
spring boot·分布式·后端·微服务·中间件
灰乌鸦乌卡2 天前
关于OA自定义接口不能解析汉字记录
java·中间件
fuquxiaoguang2 天前
从“能跑起来”到“能跑稳”:Google Genkit如何用中间件思维改写AI工程化规则
人工智能·中间件·genkit
June bug3 天前
【AI赋能测试笔记】3中间件
人工智能·中间件
fuquxiaoguang3 天前
修一个Bug,引入另一个Bug:从Tomcat高危漏洞看中间件安全修复的困境
中间件·tomcat·安全漏洞·cve-2026-34486
creaDelight3 天前
Django 中间件钩子函数 & CBV vs FBV 实战验证
python·中间件·django
喵了几个咪4 天前
Kratos 生态双定时器中间件:高精度 hptimer 与标准 cron 选型与实践
微服务·中间件·架构·golang·kratos
lifewange4 天前
常用中间件压力测试命令(极简速查)
中间件·压力测试
喵了几个咪4 天前
Kratos KCP 传输中间件:游戏开发低延迟网络通信实战指南
微服务·中间件·golang·游戏开发·kratos