App Push系统(3)--推送服务

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 消息存储

App Push系统(3)--推送服务

上一篇:新的人工智能在模拟战斗中击败人类专家


下一篇:Flash正确的口型吻合动画技巧