美文网首页
基础推送服务组件封装

基础推送服务组件封装

作者: 传达室马大爷 | 来源:发表于2021-04-25 17:36 被阅读0次

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

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

支持全量数据重新推送

支持全量数据下线

支持并发推送数据

设计方案如下:
  • 查询所有报名中推送记录列表A
  • 查询推送中、已推送、已暂停(支持推暂停)的记录列表B
  • 列表A和列表B数据做对比
    • 列表A中存在,列表B中不存在:推上线
    • 列表A中不存在,列表B中存在:推下线
    • 列表A和列表B均存在
      • 列表A中数据最新编辑时间大于列表B中最新推送时间:推修改
      • 列表A中数据最新编辑时间小于于列表B中最新推送时间:本次推送无需处理
架构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

相关文章

  • 基础推送服务组件封装

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

  • 第七章 RabbitMQ基础架构设计思路

    课程导航 一线大厂的MQ组件实现思路和架构设计方案 基础组件封装设计 - 迅速消息发送 基础组件封装设计 - 确认...

  • iOS_组件化开发

    思路:将网络、本地存储等封装成基础组件,将用户、活动等封装成业务组件.然后将这些组件使用cocoapods 私有库...

  • iOS开发中的组件化开篇

    什么是组件化? 它是一种App架构思路,对代码进行封装,封装成组件,组件可以单独使用。项目中使用组件包括基础组件(...

  • Vue-基础-04-重点

    Vue-基础-day04-重点 01-基础-组件-局部组件 组件: 封装html+css+js 两类+三步 定义 ...

  • 最新前端面试题(2018-08-21)

    扒来最新的面试题:基础 基础 怎么去设计一个组件封装(这也是我刚接触vue所头大的问题)1、组件封装的目的是为了重...

  • react搭建后台前端框架

    前言: react框架搭建,自定义搭建前端框架包含基础的crud组件封装、基础图表组件内置(d3、echarts)...

  • 封装组件

    封装tab组件封装曝光加载组件封装轮播组件 代码

  • iOS开发中的组件化思考

    怎么实现组件化? 1.对于基础组件、功能组件我们只需进行封装操作即可,如我们自己封装一个图片浏览器供项目中其他人员...

  • 封装组件基础设计

    可参照官方已废弃的UIAlertController: 有UIView、UILabel、UIButton三者组装成...

网友评论

      本文标题:基础推送服务组件封装

      本文链接:https://www.haomeiwen.com/subject/okodrltx.html