Giter Club home page Giter Club logo

universe_push's Introduction

概述

这个一个基础的消息通信架构,只在解决服务端与客户端消息通信,可应用于消息推送,即时通信以及由此衍生出来的消息通信业务。本项目基于其他开源项目的基础上, 希望通过合理的分布式架构,解决大规模并发链接的问题,从而适应互联网用户不断增长的需求,本项目将会采用微服务的开发与设计模式进行架构设计,尽量保持各个业务的单一性和高可用性。 这样的目的也是基于业务扩展的方式,方便以后能够在基于此通信架构基础上衍生其他相关业务,从而保持业务的独立性,增加项目的可维护性。

为了开源以及方便部署,将更换RPC框架为Dubbo,并且全部基于SpringBoot

部署说明

image

准备工作

为了脚本能够正常工作,请先在你的服务器建立如下目录/opt/boot,这个是脚本自动查找spring boot工程的目录,该目录下存放所有spring boot工程,具体工程目录结构如下:

依赖组件

  • redis
    push-connector集群模式下需要进行消息推送,利用redis的sub/pub进行消息的订阅与发布进而进行全局推送
  • zookeeper
    dubbo使用了zookeeper作为注册中心,因此需要安装zookeeper

启动停止服务

例如push-sub的启动方式,其他类同

# 启动服务
./push-sub start
# 停止服务
./push-sub stop

SpringBoot Dubbo服务启动

由于dubbo严格遵守服务依赖启动顺序,请安装顺序启动如下服务

  • application.properties配置rediszookeeper地址

这里没用使用诸如nacos,apollo外部的配置中心,需要自己手动修改

push.redis.address=redis://172.16.46.213:6379
  • 运行mvn clean package -Dmaven.test.skip=true 打包springboot jar

以下服务如果用户量增加,都可以集群部署

  • 启动spring-boot-dubbo-push-subscribe订阅服务
/opt/boot/push-sub
├── jvm.ini
├── push-sub //可执行启动脚本
└── log
   └── push-sub.log //存放日志
└── lib
   └── spring-boot-dubbo-push-subscribe-1.0.0-SNAPSHOT.jar //可运行的jar
  • 启动spring-boot-dubbo-push-connector链接服务
/opt/boot/push-connector
├── jvm.ini
├── push-connector //可执行启动脚本
└── log
   └── push-connector.log //存放日志
└── lib
   └── spring-boot-dubbo-push-connector-1.0-SNAPSHOT.jar //可运行的jar

SpringBoot web项目

  • 启动spring-boot-web-push-api开放推送服务
/opt/boot/push-api
├── jvm.ini
├── push-api //可执行启动脚本
└── log
   └── push-api.log //存放日志
└── lib
   └── spring-boot-web-push-api-1.0.0-SNAPSHOT.jar //可运行的jar
  • 启动sping-boot-web-push-group群组服务
/opt/boot/push-group
├── jvm.ini
├── push-group //可执行启动脚本
└── log
   └── push-group.log //存放日志
└── lib
   └── sping-boot-web-push-group-1.0.0-SNAPSHOT.jar //可运行的jar

推送SDK

为了方便用户快速接入消息推送系统,特提供如下SDK

基础架构

Push-connector

基本功能

  • 提供集群链接管理的能力
  • 提供消息群发的功能
  • 提供消息单发的功能
  • 客户端管理服务

Push-Router

基本功能

  • 只有在全网推送的模式下采用基于redis的发布订阅模型
  • 推送时能够根据token选择指定的push-connector直接推送
  • push-router与push-connector基于私有协议通信快速发送

Push-Sub

  • 对于订阅请求,消息体如果带有token则使用当前token,不再重新生成,也即是只要客户端不清除token,下次重建链接还是可以沿用先前的token
  • 对请求过来的token按照push-connector ip分组进行分组

Push-Cache[计划中]

基本功能

提供消息缓存服务

  • 消息缓存
  • 消息过期

Push-API

基本功能

提供推送Http接口服务,调用推送网关发送推送消息,此接口采用springboot开发web服务

Push-Group

  • 单聊服务
  • 群组服务

部署

常见问题

部署connector要同时更新,防止出现redisson发布订阅数据解析问题

redisson 发布时最好使用统一个logger,不然会有序列化问题

参考资料

参考项目

universe_push's People

Contributors

comsince avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.