基本原理
- RabbitMQ提供了一种QOS(服务质量保证)功能。
在非自动确认消息的前提下,如果一定数目的消息还未被消费确认,则不进行新消息的消费。 - 我们可以将该消息数量设置为商品的库存数量,并给消息设置过期时间;
- 开启手动应答模式,在执行完秒杀后,对消息进行应答;这样,秒杀的并发量将大大降低;假设每秒内有10000个请求去秒杀100件商品,则在服务器未执行完秒杀之前,最多只有100个请求发送到服务器,其他请求要么过期进入死信队列,要么等待前面的请求得到响应后再发送。对消息进行限流,可以有效缓解数据库的压力。
- 对于过期的消息,我们放入死信队列中,创建消费者,对消息进行消费。若无库存,则直接返回秒杀结束的消息,否则,继续进行秒杀操作。
- 使用websocket实现,服务器与客户端的通信,服务器可以提供webSocket将秒杀结果发送给客户端。