第三方商城对接架构设计

本文详细介绍了第三方商城对接的架构设计,包括商品搜索、渠道分配器的工厂模式实现、商品下单的批量处理策略、限流器设计、库存扣减方案以及防止重复提交订单的策略。同时,讨论了库存数据的回滚机制和并发购买时的安全扣减问题,旨在保证系统稳定性和业务的顺利进行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 概述

由于业务需要,公司需要将原来的积分兑换商品功能由人工下单改为直接对接第三方商城对接,考虑到以后可能会对接多个第三方商城平台,所以采用统一接口门户调用,不同渠道调用不同实现类的设计方式,方便以后渠道的扩展。整体架构图如下:
这里写图片描述
第三方商城对接系统本身并不复杂,但是其中的实现细节方面需要注意的方面还是挺多的。比如:商品搜索如何实现,如何保证的库存,如何保证接口的限流,数据如何回滚等等。下面就一些系统实现中遇到的问题一一描述,不妥之处还望大家多多提建议。

2 商品搜索

商品搜索功能可以使用ELK来做,实现思路如下:
1. 晚上定时器从第三方商城拉取商品,更新到ELK。
2. 商品库存有更新时候,第三方商城回调我们的接口更新库存。
但是,这样的话面临一个问题:如果商品数量很多,那么晚上拉取商品时候将会是一个很耗时的操作,如果商品过多,就不能用这种方式来实现。所以这种方式只能适用少量商品的情况。

3 渠道分配器

整个渠道分配器采用工厂模式,思路如下:根据渠道号,工厂类会去渠道池中获取到对应的渠道实现类。

3.1 渠道池枚举类

public enum ShoppingRouteEnum {
    JD(1, ShoppingRouteConstant.JD_BEAN_NAME, "京东", false),
    YX(2, ShoppingRouteConstant.YX_BEAN_NAME, "严选", true);

    private int channel;
    private String beanName;
    private String name;
    private boolean available;

    ShoppingRouteEnum(int channel, String beanName, String name, boolean available) {
        this.channel = channel;
        this.beanName = beanName;
        this.name = name;
        this.available = available;
    }

    public int getChannel() {
        return channel;
    }

    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值