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

基础推送服务组件封装

作者: 传达室马大爷 | 来源:发表于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

    相关文章

      网友评论

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

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