1 如何解决保证消息幂等性?
这个问题其实就是说防止消费者重复消费的问题,假设因为网络问题,消费者消费成功但是没有返回ack,那么mq可能会认为没有消费,那么则会再次发送消息,导致消费者重复消费
解决办法:给消息加上一个业务id,在消费者方进行判断
2 如何保证消息不丢失?
首先是生产者端,可以采用发送同步消息,结果是同步感知的
其次是Broker端,broker端要把mq中的消息从内存同步到硬盘需要进行刷盘,那么mq默认是异步刷盘,如果要保证消息不丢失可以改成同步刷盘,同步刷盘和异步刷盘的区别在于,同步刷盘安全性更高,但是效率更低,异步刷盘则是效率高,但是有可能丢失消息
然后是消费者端 完全消费正常后在进行手动ack确认。
3 如何保证消息顺序
在mq中一个topic包含多个队列,如果生产者把消息发送给不同队列,那么则无法保证消费者去按顺序消费
所以说生产者要发给同一个队列,而消费者则需要一次性消费整个队列中的消息