一,如何保证消息的有序性?
1,发送同步消息M1,M2,M3 M1 ack了之后再发送M2,M2 ack了之后再发送M3
局部顺序:消费者消费某个topic的某个队列中的消息是顺序的,消费者使用MessageListenerOrderly类做消息监听,实现局部顺序
全局顺序:消费者消费全部消息都是顺序的(消费者按照顺序消费全部消息),通常需要满足特定主题只有一个队列,并确保消费者按照顺序从队列中获取消息,这种应用场景相对较少且性能较差(因为只有一个broker,也就意味着不能实现高可用)
二,消息的可靠性如何保证?
使用事务消息或者同步消息保证生产端的可靠性,使用同步刷盘的方式保证mq消息的可靠性,消费端处理完消息ack保证消费端消息的可靠性
三,消息堆积?
多个消费者批量消费消息
四,幂等性如何解决?
消费者端加一个带有幂等字段的消息表
同步刷盘:消息到达mq的缓存刷新到磁盘才ack
异步刷盘:消息到达mq的缓存就ack,有消息丢失的风险