前言
MPUSH 是一个开源的在线实时推送系统,提供了底层通信协议,并使用 netty 实现了通信功能,同时提供了 android 端、IOS 端以及 WebScoket 端 SDK,方便开发者使用。在之前的章节中,主要讲述了 MPUSH 使用场景、主要功能以及如何配置本地开发环境,没有浏览过之前文档也没关系,本章将介绍如何在 SpringBoot 环境中使用 MPUSH,以及开发一个简易的 web 端推送 demo。
搭建环境
创建 SpringBoot 项目
创建一个 SpringBoot 工程,使用 maven 进行依赖管理,引入 MPUSH 依赖,
<dependency>
<groupId>com.github.mpusher</groupId>
<artifactId>mpush-boot</artifactId>
<version>0.8.0</version>
</dependency>
具体代码参见:GitHub 仓库,下面讲解如何将 Mpush 生命周期托付给 SpringBoot 容器管理,在本文中我们不需要了解 Mpush 启动过程,只需要知道 MPush 中有一个负责启动服务的加载类:com.mpush.bootstrap.ServerLauncher,通过这个累来管理 MPUSH 生命周期,启动、销毁 MPUSH 服务:
在容器创建 serverLauncher 对象后调用 start 方法启动 mpush 服务,在容器销毁阶段调用 stop 方法停止 mpush 服务,SpringBoot 完全掌管整个生命周期。
配置 MPUSH 环境参数
在之前文章中讲述了如何配置参数,有时间可以回顾一下,在 resources 文件夹下创建 application.conf 文件来覆盖默认参数配置:
只需要关注图中标记的 4 个地方:
- 标记 1 处改为自己的 zk 服务地址
- 标记 2 处改为自己的 redis 服务地址,
- 如果你的 redis 有密码校验,请修改标记 3 处的值
- 标记 4 的参数是自定义的参数,mpush 不需要这个参数,表示当前项目使用的 redis 命名空间。
启动 SpringBoot 服务
上述操作完成了 SpingBoot 与 Mpush 地整合工作,接下来就可以启动 SpringBoot 工程。
当你看到上述提示信息时表示项目启动成功。
消息推送功能开发
接下来我们开发一个简易的在线聊天室,主要功能是用户 A 可以与用户 B 进行实时消息聊天,目前不涉及到群聊消息,只是单对单消息通信。
模块开发
MPUSH 拥有良好的模块化设计,对于一些重要的模块提供了 SPI 接口进行扩展,因此开发者能很好地进行扩展,在之后的文档中,将会详细介绍 MPUSH 模块以及各个模块之间是如何相互合作提供 MPUSH 服务的。
对于在线聊天室,每个用户都有一个唯一 id,需要将用户 A 的信息推送给用户 B,在 MPUSH 通信协议中存在 PUSH 类型地推送消息,并且提供了 SPI 接口:com.mpush.api.spi.handler.PushHandlerFactory,在此需要实现此接口:
实现 handle 方法来处理客户端推送的消息,在此主要分为 4 个步骤:
- 获取推送内容,主要是被推送的用户 id 和要推送的消息
- 获取被推送用户的路由信息(路由信息就是用户到服务器之间的连接,可以通过这个连接推送消息到客户端)
- 构建推送消息包,内容包括用户路由信息、要推送的内容
- 将推送信息发送到用户端
如果对上述内容有疑问的话不要紧,后续会详细讲述,现在只要明白代码的大致意思即可。添加了消息处理之后,需要添加 web 客户端,在此我们使用 websocket 技术来演示在线聊天室,使用 thymeleaf 模版技术开发前端,客户端代码参见 resources/templates/index.html。
测试
启动服务,在浏览器中打开页面:
- 标记 1 按钮表示连接 MPUSH 服务器
- 标记 2 按钮表示绑定用户,相当于用户登录,输入框中的内容就是需要绑定的用户 id,这个可以订制,测试为了方便直接绑定用户 id
- 标记 3 按钮表示推送按钮,第一个框是要推送的内容,第二个框是被推送的用户 id
- 标记 4 表示连接 MPUSH 系统成功
- 标记 5 表示绑定用户成功
按照上述介绍再打开一个标签页,用户 id 设置为:user-1,点击标记 3 按钮推送消息:
如图所示用户 user-1 接收到了用户 user-0 的消息推送信息。
总结
目前为止我们使用 MPUSH 开发了一个简单的在线消息推送系统,用户之间可以直接推送消息,当然对于正式的业务来说还需要考虑用户登录鉴权、推送鉴权,推送内容过滤等内容。后续将详细讲解 MPUSH 组件,欢迎大家加入 QQ 群讨论:952774305
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于