Rabbit 基础消息组件封装 概要
1.迅速消息发送
2.确认消息发送
3.批量消息发送
4.延迟消息发送
5.顺序消息发送
6.事务消息发送
7.消息幂等性保障
迅速消息发送
1)迅速消息指消息不进行落库存储,不做可靠性的保障
2)在一些非核心消息,日志数据,或者统计分析等场景下比较合适
3)迅速消息的优点就是性能最高,吞吐量最大
确认消息发送
批量消息发送
多条消息合并放在集合里(map,list),做一次发送
延迟消息发送
Message 封装的时候添加delayTime 属性,使我们消息可以延迟发送
场景:7天后电商自动确认支付,优惠卷自动到期作废
顺序消息发送
1)发送顺序消息,必须保证投递到一个队列,且这个消费者只能有一个(独占模式)
2) 统一提交(可能合并成一个大消息,也可能查分成多个小消息)且有所消息的会话ID一致
3)添加消息属性:顺序标记的序号,和本溪顺序消息的SIZE属性,进行落库
4)并行进行发送给自己的延迟消息(带上关键属性:会话ID,SIZE) 进行后续处理消费
事务消息发送
1)采用类似可靠性投递的机制,补偿机制
2)我们的数据源必须是同一个,也就是操作DB1数据库和消息记录DB2数据库使用同一个数据源
3)然后利用重写Spring DataSourceTransactionManager,在本地事务提交的时候进行发送消息,但是
也有可能事务提交成功但是消息发送失败,这个时候就需要进行补偿了。
消息幂等性保障
导致非幂等性原因:
1)可靠性信息投递机制问题,MQ接收到消息没返回发送端 ACk
2)MQ Broker 服务于消费端传输消息的过程中网络波动,导致ACK失败,重新发送给消费端