库存同步shopify
场景:当trendsi的sku库存发生变更后,需要将sku的实时库存同步shopify.同步过程中有三个条件约束
1.shopify的推送接口,针对shopId有限流设置,即相同shop ID,一秒内只能有2次推送
2.数据量庞大,相同sku可能被shopify的多个店铺导出,需要查询出sku的关联店铺,全部进行推送
3.sku变更后,推送有优先级顺序,例如 sku库存0->N或者N->0的优先级高于 5->7或9->6
设计思路:
这对以上三个卡点,分别采用一下方式实现:
1.接口限流,
将shopify推送接口分装为本地bean的public方法 syncShopify(Long shopId,Sku sku),使用sentinel的热点数据限流,对参数shopId进行限流,保证每秒只有2个请求。被限的请求数据,重新返回队列(每个店铺一个redis队列,FIFO队列,异常请求sku返回对尾,保证最早变更的sku优先同步)
2.数据量庞大
每次消费sku,都需要获取导出过此sku的店铺列表。数据查询缓慢,可以通过redis Bitmap(步长为shopId,value true表示导出,false表示未导出)快速判断
3.sku推送优先级
接收sku队列设置三个,SkuLevel1(最高) ,SkuLevel2(中等),SkuLevel3(最低),消费数据获取顺序
SkuLevel1>SkuLevel2>SkuLevel3.
4.兜底方案
为防止redis异常,使用rocketmq做兜底。
设置全局开关,
开关关闭,sku通过redis进行消费。
开发开启,sku通过mq发布订阅消费(消费异常,重置回对列)
流程图:
1.sku变更流程
2.sku消费