基础推送服务组件封装

2021-04-25  本文已影响0人  传达室马大爷

在项目开发过程中,我们经常会涉及到用Job将活动数据推送到别的业务线,这中间涉及到数据增量更新和上下线逻辑。

基础推送服务组件就是对数据的上线、下线、修改等状态判断,数据入库、回调等一切公共操作逻辑的封装。

支持全量数据重新推送

支持全量数据下线

支持并发推送数据

设计方案如下:
架构UML图
image-20210420162318919
支持的推送状态
NO_PUSH(0, "未推送"),
PUSH_ING(1, "推送中"),
PUSHED(2, "已上线"),
PUSH_END(3, "已下线"),
PUSH_PAUSE(4, "已暂停");
使用说明

场景1:实现一个没有子业务线推送逻辑、活动下线推结束、推送后不需要回调的推送服务

直接继承AbstractBasePushService抽象类,实现上线、下线操作即可

@Service
public class ActivityPushService extends AbstractBasePushService {

    /**
     * 定义的业务线id
     */
    @Override
    public BasePushBusinessEnum getBasePushBusinessEnum() {
        return null;
    }

    /**
     * 定义推送记录的唯一id
     */
    @Override
    protected String getUniqueId(BasePushProtocol basePushProtocol) {
        return null;
    }

    /**
     * 子业务线id
     */
    @Override
    public int getSubBusinessId() {
        return 0;
    }

    /**
     * 推送下线
     */
    @Override
    public PushHandleContext pushDownLine(BasePushRecord basePushRecord) {
        return null;
    }

    /**
     * 推送上线或修改
     */
    @Override
    public PushHandleContext pushOnline(BasePushProtocol basePushProtocol, String returnUniqueId) {
        return null;
    }

    /**
     * 查询所有需要推送的记录列表
     */
    @Override
    public List<BasePushProtocol> getBasePushProtocolList() {
        return null;
    }
}

场景2:实现一个没有子业务线推送逻辑、活动下线推暂停、推送后需要回调的推送服务(业务方异步通知数据是否推送成功)

直接继承AbstractCallBackPauseBasePushService抽象类,实现上线、下线操作即可

@Service
public class ActivityPushService extends AbstractCallBackPauseBasePushService {}

场景3:实现一个多个子业务线推送逻辑、活动下线推结束、推送后不需要回调的推送服务

直接继承AbstractMultiBasePushService抽象类,实现上线、下线操作即可

@Service
public class ActivityPushService extends AbstractMultiCallBackPauseBasePushService {
    // 数据处理交由IPushHandleService处理
    @Resource
    private IPushHandleService activityPushHandlerService;

    @Override
    public BasePushBusinessEnum getBasePushBusinessEnum() {
        return BasePushBusinessEnum.ACTIVITY_PUSH;
    }

    @Override
    protected String getUniqueId(BasePushProtocol basePushProtocol) {
        return String.valueOf(basePushProtocol.getActivityId());
    }

    @Override
    public int getSubBusinessId() {
        return 1;
    }

    @Override
    protected IPushHandleService pushHandlerService() {
        return activityPushHandlerService;
    }
}

public abstract class AbstractPushHandleService implements IPushHandleService {

    @Override
    public PushHandleContext pushDownLine(BasePushRecord basePushRecord) {
        // 真正实现下线逻辑
    }

    @Override
    public PushHandleContext pushOnline(BasePushProtocol basePushProtocol, String returnUniqueId) {
        // 真正实现上线、修改逻辑
    }
    
    protected abstract TaskParam createTaskParam(BasePushProtocol basePushProtocol);
}

@Service
public class ActivityPushHandleService extends AbstractPushHandleService {
    
    @Override
    protected TaskParam createTaskParam(BasePushProtocol basePushProtocol) {
        // 推送数据封装
    }

    @Override
    public List<BasePushProtocol> getBasePushProtocolList() {
        // 查询可推送的记录列表
    }
}

场景4:实现一个多个子业务线推送逻辑、活动下线推暂停、推送后需要回调的推送服务(业务方异步通知数据是否推送成功)

直接继承AbstractMultiCallBackPauseBasePushService抽象类,实现上线、下线操作即可

完整源码地址

https://github.com/shawntime/shawn-base-push

上一篇下一篇

猜你喜欢

热点阅读