消息队列(MQ)本身的作用、如下图:
秒杀系统中,消息队列(MQ)的主要作用是削峰、解耦、异步处理、增强系统的并发处理能力
**解耦:**系统组件之间通过消息队列进行解耦,我们只需要依赖于mq,避免了各个子系统间的强依赖问题,提高系统的可扩展性和可维护性。
**异步处理:**消息队列可以实现异步处理,用户提交订单后,可以直接返回结果,无需等待秒杀后续流程完成。这样能避免总耗时比较长,从而提高用户体验。
**削峰:**突然出现的请求峰值,导致系统不稳定的问题。使用mq后,由于消费者的消费能力有限,会按照自己的节奏来消费消息,多的请求不处理,保留在mq的队列中,不会对系统的稳定性造成影响,能够起到消峰的作用。
MQ消息队列存在的主要问题包括消息丢失、消息顺序问题、消息堆积、重复消费、延时及过期失效问题。
消息丢失:
消息在生产、传输、消费过程中可能会因为各种原因丢失
1、生产者发送失败(网络原因)
2、MQ服务器处理失败(mq服务器持久化时,磁盘出现异常)