1 按功能进行系统规划
1.1 设备管理
1.2 模板管理
1.3 推送服务(*)
1.4 渠道推送
1.5 流量控制
1.6 任务管理
1.7 统一回执
1.8 推送管理平台
1.3 推送服务
采用异步方式,为业务方提供RPC推送服务接口
1.3.1 发送过滤服务
* 过滤服务定义了很多策略,策略决定了消息是否能发送,所有的策略通过消息才能发送,如果被其中任意一条策略拦截消息将不能发送。
* 过滤策略接口设计,定义策略处理接口,并采用责任链模式,指定策略的执行的先后顺序
public interface StrategyChainHandler {
/**
* 处理消息, 返回成功继续执行下一个handle, 失败则过滤
*/
<T> Results handle(T t, UserPushMsg userPushMsg);
)
* 策略过滤和业务联系的比较紧密,规则实现也比较多
@Component
public class WhiteListService extends StrategyChainHandler{
@Override
public <T> Results handle(T t, UserPushMsg userPushMsg) {
Return new Result();
}
}
* 策略执行器按照策略的顺序执行
@Component
public class StrategyChainProcessor {
@Autowired
private List<StrategyChainHandler> strategys;
public <T> Results handle(T t, UserPushMsg userPushMsg) {
List<StrategyChainHandler> currentHandlers = strategys.stream().filter(s->s.isSupported(t)).collect(Collectors.toList());
for (StrategyChainHandler chain : currentHandlers) {
try {
Results results = chain.handle(t, userPushMsg);
if (results == null || ApiResultStatus.FAIL.getValue().equals(results.getResult())) {
return results;
}
} catch (Exception ex) {
log.error("通过handler:{}进行处理失败! context:{}", handler.getClass(), ex);
}
}
return new Results(ApiResultStatus.SUCCESS.getValue(), ApiResultStatus.SUCCESS.getValue(), ApiResultStatus.SUCCESS.getDesc());
}
}
1.3.2 发送路由策略
1.3.3 消息存储