有奖捉虫:办公协同&微信生态&物联网文档专题 HOT

秒杀场景

秒杀是电商系统中一个非常常见的场景。解决方案比较多,但是使用消息队列 RabbitMQ 版是一个比较好的做法。
如果是复杂的扣减库存(如涉及商品信息本身或牵连其他系统),则建议使用数据库进行库存数量的扣减,可以使用异步的方式来应对这种高并发的库存更新。
1. 在用户下单时,不立刻生成订单,而是将所有订单依次放入队列。
2. 下单模块依据自身的处理速度,从队列中依次获取订单进行“下单扣库存”操作。
3. 在订单生成成功后,用户即可进行支付操作了。
这种方式是针对“秒杀”场景的,依据“先到先得”原则来保证公平公正,所有用户都可以抢购,然后等待订单处理,最后生成订单(如果库存不足,则生成订单失败)。




优先级消息

在消费消息时,如果消息的重要程度不同,重要性高的消息希望被优先消费,这时可以使用消息队列 RabbitMQ 版优先级队列的能力,让优先级高的消息优先被消费。
参考如下业务场景:
例如系统中有订单催付的场景,客户在电商系统下的订单,系统会及时将订单推送给客户。如果在设定的时间内未付款那么就会给客户推送一条短信提醒。但是,电商系统会分大客户和小客户,大客户的订单催收消息需要优先处理,其他的小客户的催收相对优先级会低一些。
使用消息队列 RabbitMQ 版的优先级队列可以很好的支持这个场景,让优先级高的消息不会积压太久。如果发现是大客户的订单给一个相对比较高的优先级,优先被处理;否则就是默认优先级。




延迟消息场景

实际业务系统中,有发送延迟消息的需求。如果自己实现延迟逻辑,可靠性和延迟精度很难得到保障。使用消息中间件,如消息队列 RabbitMQ 版可以很好的处理此类需求。延迟消息的使用场景有:
订单系统中,用户下单后有30分钟时间进行支付。如果30分钟内没有支付成功,那么这个订单将进行异常处理。这里可以使用消息队列 RabbitMQ 版延迟消息能力来处理这些超时订单。
物联网系统中,用户希望通过手机遥控智能设备在指定的时间工作,这时就可以将指令发到延迟队列,当指令设定的时间到了,再将控制指令推送到智能设备。




消息广播

很多业务系统需要将信息广播给下游的系统。如果通过 RPC 的方式,耦合比较重,对上游业务系统的压力也比较大。此时,可以使用消息队列 RabbitMQ 版的 Fanout Exchange 来处理此类需求。可以使用的场景:
大型多人在线游戏(MMO)可以将其用于排行榜更新或其他全局事件;
体育新闻网站可以使用扇形交换机向客户端近乎实时的分发比分信息;
分布式系统使用它来广播各种状态和配置更新;
群聊可以使用它在参与者之间分发消息。




灵活路由场景

随着微服务架构的流行,服务拆分得较细,服务的数据会以消息的形式,使用精心设计的分发策略发送到不同的队列中去。这时可以充分的利用消息队列 RabbitMQ 版灵活的消息路由的能力,将消息分发到目标 Queue 中。可以使用的场景:
日志处理场景,可以将日志按类型投递到不同的 Queue。例如 Error 单独一个处理队列,优先处理。
电商物流系统的物流信息按地域分发给不同的消费端进行处理。
复杂路由场景。