分享

消息推送方案

 超级致富宝典 2020-05-02
  • 目的

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

  • 应用场景需求

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

  • 选择方案

    常规思路如下三种:

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

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

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

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

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

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

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

“至多一次”

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

“至少一次”

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

“刚好一次”

确保只收到一次消息。

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

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

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

连接会话:

服务器使用情况:

  • 具体使用流程

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多