服务端SDK

1. 使用方式

  1. 添加maven依赖

    <dependency>
      <groupId>com.github.mpusher</groupId>
      <artifactId>mpush-client</artifactId>
      <version>0.0.2</version>
    </dependency>

  2. 在工程resources目录增加配置文件application.conf,并配置zookeeper

       mp.zk.namespace=mpush
       mp.zk.server-address="127.0.0.1:2181"

  3. 使用com.mpush.api.push.PushSende.java进行推送,使用其create方法创建服务,start方法启动服务,stop方法停止服务。推送接口定义如下:

    public interface PushSender extends Service {
    
        /**
         * 创建PushSender实例
         *
         * @return PushSender
         */
        static PushSender create() {
            return SpiLoader.load(PusherFactory.class).get();
        }
    
        /**
         * 推送push消息
         *
         * @param context 推送参数
         * @return FutureTask 可用于同步调用
         */
        FutureTask<Boolean> send(PushContext context);
    }

2. 推送流程

2.1. 流程图

2.2. 流程分析

  1. PushSender启动后首先从ZK里获取可用的GatewayServer列表,然后创建相应的Client分别连接到对应的GatewayServer
  2. 当调用send方法去推送时,PushSender首先会通过RemoteRouterManager查询要推送的用户当前所登录的机器IP,然后通过IP选择GatewayServer并通过第1中对应的Client把消息发送到该机器,因为该机器拥有用户的链接。
  3. GatewayServer接收到Client发送过来的消息后,首先通过查询本地路由LocalRouterManager找到用户连接Connection,该链接是连接到ConnectionServer的。
  4. 如果连接存在,ConnectionServer会通过此连接把消息下发到客户端。
  5. 如果推送成功,GatewayServer会发送消息推送成功的消息给PushSender所持有的Client
  6. PushSender收到推送成功消息后,会通过Callback#onSuccess回调调用方,整个推送流程结束。
  7. 如果中间有任何失败则回调Callback#onFailure
  8. 如果用户不在线则回调Callback#onOffline
  9. 如果在一定时间内PushSender没有收到GatewayServer响应的消息则推送超时,回调Callback#onTimeout通知调用方。

3. 源码解读

  1. PushSender的实现类为com.mpush.client.push.PushClient.java

  2. PushClient使用的是ConnectionRouterManager该类继承自RemoteRouterManager增加了本地缓存可在消息频繁时减轻Redis压力,但会存在一定情况的误判。

  3. com.mpush.client.push.PushRequestBus.java用于维持异步推送任务,线程的调整可通过配置设置,任务的拒绝策略为在调用线程执行Callback。具体见DefaultThreadPoolFactory.java。线程池默认配置如下:

    mp.thread.pool.push-callback={
      min:2//核心线程数
      max:2//最大线程数
      queue-size:0//队列大小
    }

  4. GatewayClient会根据GatewayServer的运行状态自行调整,如果有GatewayServer宕机对应的Client会及时销毁,如果有新的机器进来,对应Client也会自动创建。具体参见GatewayClientFactory.java

Copyright © ohun.com 2016 all right reserved,powered by Gitbook该文件修订时间: 2016-09-23 19:44:41

results matching ""

    No results matching ""