RabbitMq 消息中间件问题
分布式场景下如何确保并发的幂等性(不重复消费)?
- 数据库唯一索引
- 先select后insert方案
- 基于redis分布式锁或者zookeeper分布式锁(一般选择)
MQ使用场景
削锋填谷
例如
每个订单下单-扣减库存-扣减积分活动-扣减活动预算这个活动时间耗费太长
调用链路太长影响接口性能,其次分布式事务问题很难处理。
这时我们就需要对实时一致性要求没那么高的请求可以通过MQ异步的方式做处理。
考虑不一致问题,我们可以通过job去重试保证接口调用成功。都有核对平台
比如:下单成功但是未扣减积分这种可以通过核对作为兜底数据的处理方案。
为什么使用rabbitMQ
- qps压力比较大,性能首要考虑
- 高并发场景 支持分布式架构
- 可能用到顺序消息,