汉堡推送平台1.0发布hanbo-push

汉堡推送

汉堡推送是一个分布式推送/IM系统,底层协议采用tcp同时适配websocket,适用于安卓和web平台,ios目前未支持。

传送门

准备工作

  • java8
  • redis3, mysql5.5 ,zookeeper3

启动应用

  • 配置ngx,部署webUI
	   location / {
            root   D:\git-rep\hanbo-push\webUI;
            index  index.html index.htm;
        }
        location /pushAdmin/ {
            proxy_pass http://127.0.0.1:8080;
        }
  • 参考各module的readme,启动应用
    1. 模块admin: 主程序:RestApiApplication 启动vm参数 -Dzk.hosts=127.0.0.1:2181
    2. 模块server: 主程序:PushServer 启动vm参数 -Dhost=127.0.0.1 -Dport=6688 -Dredis.host=127.0.0.1 -Dredis.port=6379 -Dredis.password= -Dzk.hosts=127.0.0.1:2181 -Dios.certFilePath= -Dios.certPwd=
    3. 模块webproxy: 主程序:WebSocketServer 启动vm参数 -Dzk.hosts=127.0.0.1:2181
  • 登录后台
  • 新建应用
  • 初始化应用关联的设备,模块admin: ClientTest
   @Test
    public void generatorDevices() {
        List deviceEntities = Lists.newArrayList();
        int deviceCnt = 100;
        for (int i = 5; i < deviceCnt; i++) {
            deviceEntities.add(DeviceEntity.builder().appId("应用id")
                    .deviceId(String.valueOf(15821303232L + i))
                    .state(1)
                    .platform(1)
                    .createTime(new Date()).build());
        }
        deviceRep.save(deviceEntities);
    }
  • 启动模拟安卓app客户端(模块client: ClientTest
    //订阅消息的app名称
    private String appName = "stock-app";
    //并发数
    private int currencyNum = 2;
    private ExecutorService executorService = Executors.newFixedThreadPool(currencyNum + 16);
    
    @Test
    public void mockCurrencyApp() {
        AtomicInteger atomicInteger = new AtomicInteger(0);
        for (int i = 0; i <= currencyNum; i++) {
            executorService.execute(() -> {
                try {
                    Connector client = new Connector();
                    //因为是模拟所以直接跟推送服务建立长连接,正常应该是通过rest接口拿到一路可用的推送地址
                    client.initConn("127.0.0.1", 6688);
                    //用手机号模拟设备号(一般是mac地址)
                    String fromId = String.valueOf(15821303232L + atomicInteger.getAndIncrement());
                    //订阅推送事件
                    PushRequest reg = new PushRequest();
                    reg.setMsgType(PushRequest.MessageType.REGISTY.ordinal());
                    reg.setPushType(PushRequest.PushType.PUSH.ordinal());
                    reg.setFromId(fromId);
                    reg.setAppKey(appName);
                    client.sendOnly(reg);
                    while (true) {
                        //发送心跳维持在线活跃状态
                        reg = new PushRequest();
                        reg.setMsgType(PushRequest.MessageType.HEARTBEAT.ordinal());
                        reg.setPushType(PushRequest.PushType.PUSH.ordinal());
                        reg.setAppKey(appName);
                        reg.setFromId(fromId);
                        client.sendOnly(reg);
                        Thread.sleep(10 * 1000L);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    //如果异常则退出当前等待消息的app进程
                    System.exit(0);
                }
            });
        }
        try {
            Thread.sleep(Long.MAX_VALUE);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
  • 发布消息
  • 查看大盘监控

步骤演示

1. 注册登陆

汉堡推送平台1.0发布hanbo-push_第1张图片

汉堡推送平台1.0发布hanbo-push_第2张图片

2. 实时大盘

汉堡推送平台1.0发布hanbo-push_第3张图片

3. 新建应用

汉堡推送平台1.0发布hanbo-push_第4张图片

汉堡推送平台1.0发布hanbo-push_第5张图片

4. 发布消息

汉堡推送平台1.0发布hanbo-push_第6张图片

5. 消息监控

汉堡推送平台1.0发布hanbo-push_第7张图片

6. 消息明细

汉堡推送平台1.0发布hanbo-push_第8张图片

7.tcp客户端

汉堡推送平台1.0发布hanbo-push_第9张图片

8.websocket客户端

汉堡推送平台1.0发布hanbo-push_第10张图片

你可能感兴趣的:(实战)