在项目开发过程中,我们经常会涉及到用Job将活动数据推送到别的业务线,这中间涉及到数据增量更新和上下线逻辑。
基础推送服务组件就是对数据的上线、下线、修改等状态判断,数据入库、回调等一切公共操作逻辑的封装。
支持全量数据重新推送
支持全量数据下线
支持并发推送数据
设计方案如下:
- 查询所有报名中推送记录列表A
- 查询推送中、已推送、已暂停(支持推暂停)的记录列表B
- 列表A和列表B数据做对比
- 列表A中存在,列表B中不存在:推上线
- 列表A中不存在,列表B中存在:推下线
- 列表A和列表B均存在
- 列表A中数据最新编辑时间大于列表B中最新推送时间:推修改
- 列表A中数据最新编辑时间小于于列表B中最新推送时间:本次推送无需处理
架构UML图
支持的推送状态
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抽象类,实现上线、下线操作即可