什么是生产端的可靠性投递
- 保障消息的成功发出
- 保障MQ节点的成功接收
- 发送端收到MQ节点(broke)确认应答
- 完善的消息补偿机制
消息落库,对消息状态进行打标记
消息的延迟投递,做二次确认,回调检查
Q:事务?保证数据源一致 tcc 用补偿机制
设定一个time lock 分布式定时任务 (可能出现重复抓取任务) 保证统一个时间点 只有一个任务执行
定时任务会造成的问题是:时间临界问题,就是有消息本来就可以ACK,但是你给我重新发一次,导致网络资源以及io资源的浪费。这就要规定超时大小 retry send
极端问题:routingkey错误导致,发送失败问题。所以就要限制重发次数的限制了。
记录下来 然后再走补偿机制。
缺点是:
最少有一次的数据库写入操作,以及更新操作,甚至有两次写入操作。
所以可能在高并发的场景下可能会遇到瓶颈。
优化方案就是,只需要对业务进行数据库落地处理,对消息不需要进行落地处理。
消息的延迟投递,做二次确认,回调检查(非100,只能人工补偿,定时任务)
目的是减少数据库的操作
一定要对业务消息先入库,然后再进行消息的发送,互联网大厂不加任何的事务,事务可能会造成事务瓶颈。