消息推送方案

  • 目的

对于需要即使通知用户的业务,例如告警等,需要消息推送功能,保证通知的及时性。

 

  • 应用场景需求

消息推送涉及到消息的发送和接收,即方案既要能在后端中使用,也要能在前端和移动端使用,所以需要能适配java 和 javaScript 语言。

 

  • 选择方案

    常规思路如下三种:

轮询(Pull)方式:客户端定时向服务器发送询问消息,一旦服务器有变化则立即同步消息。

推送(Push)方式:移动终端现在服务器端注册并告知关注的消息主体,服务器获得相关的消息之后,根据主体主动推送给移动终端。

常连接方式:移动终端与服务器端保持常连接,保证消息下发的及时性。

 

通过检索分析,选择使用push方式,并且使用MQTT协议来实现。此协议开销小,能高效地使用网络,也是物联网选择使用的一个协议。并且由于使用较多,说明资料相对来说比较丰富,便于开发使用。

消息中转代理服务使用Apache的开源工具 ActiveMQ Artemis, 它是一个多协议消息中转服务,支持STOMP, AMQP, MQTT, Openwire, SSL, and WebSockets。

服务端和客户端之间通过发布和订阅方式来实现消息推送,消息的中转即通过Artemis来实现。

 

消息推送方案_第1张图片

 

 

 

 

 

 

MQTT协议针对消息传送提供三种服务质量:

“至多一次”

消息根据底层因特网协议网络尽最大努力进行传递。 可能会丢失消息。

“至少一次”

保证消息抵达,但可能会出现重复。

“刚好一次”

确保只收到一次消息。

因此我们可以根据具体的业务需要来设置服务质量参数QoS,同时通过主题Topic来区分不同的业务来推送给不同的用户。

 

 

关于中转服务器的选择,分析了三种服务器,都是开源项目,分别为Apache的 Apollo 、Artemis 还有国内的EMQ, 其中Apollo 操作虽然简洁,但是已经很久没有更新维护了,而国内的EMQ 从使用来看不如Apache的便利,并且其使用Erlang语言开发,非常规开发语言,对于后期使用维护不太方便。综合来看,Artemis的功能比较完备,并且版本一直有在更新维护,使用的是Java语言开发,遇到问题可以从开源社区寻求获取解决方案。

 

中转消息服务器Artemis信息显示页面

连接会话:

消息推送方案_第2张图片

 

服务器使用情况:

消息推送方案_第3张图片

 

 

 

 

  • 具体使用流程

 

消息推送方案_第4张图片

 

 

 

 

 

 

 

五:参考文档

 

1、消息中转服务Artemis 说明:

http://activemq.apache.org/artemis/

其开源项目代码地址:

https://github.com/apache/activemq-artemis

 

  1. 后台Java(包括App)使用库和代码参考:

https://github.com/eclipse/paho.mqtt.java

https://github.com/eclipse/paho.mqtt.android

 

  1. 前台JavaScript使用库和代码参考:

https://github.com/eclipse/paho.mqtt.javascript

注意使用对应的库,来进行对应的调用,其JS库有两个版本:

@namespace Paho

@namespace Paho.MQTT

 

  1. MQTT 协议说明:

https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html

中文翻译版本:

https://mcxiaoke.gitbooks.io/mqtt-cn/content/mqtt/01-Introduction.html

 

  1. 各种代理服务

https://github.com/mqtt/mqtt.github.io/wiki/brokers

 

你可能感兴趣的:(Techonology)