如何实现消息推送系统微笑不加冰

随着IOS,Android应用的普及,对推送消息的需求也越来来重要,目前市面上有的个推推送、极光推送、友盟推送等等,那如何自己搭建一个推荐系统昵?

2、名词说明:

设备端:消息接收方;

消息服务:负责和设备端建立连接,并推送消息给设备端

消息系统:消息服务集群;

路由系统:根据消息服务的负责返回合适的消息服务给设备端(主要负责监控当前可用的消息服务、监控当前消费服务的负载情况,返回合适的消息服务给设备端)

业务系统:消息系统之外的其它业务系统;

平台:包括设备端和前端页面系统;

3、设计原则

可扩展性:为了保证系统的高可用,要求各模块都可以水平扩展;

高可用性:设计过程中必须考虑系统的稳定性;

原则单一:各组件的功能的单一(如:消息系统只负责和设备端连接和向设备端发送消息,禁止在消息系统中做复杂的业务逻辑)

4、技术选型

2.1:传输方式

要满足大量的连接数、同时支持双全工通信,并且性能也得有保障。

在Java技术栈中进行选型首先自然是排除掉了传统IO。

那就只有选NIO了,在这个层面其实选择也不多,考虑到社区、资料维护等方面最终选择了Netty。

2.2:数据格式选型

1、json简单

2、hession(为了简单说明,该文档就以hession为主)

3、protobuf

4、自定义协议

5、架构图

说明:

5.1、服务端启动说明(上面红色箭头标记)

启动包括两部分

1)注册服务到zk中;

2)监听MQ消息中,本机到消息。

5.2、客户端启动流程

客户端启动包括五部分

1)请求路由系统获取可用到消息服务;

2)路由系统获取可用到消息服务;

3)路由系统通过redis获取可用消息服务的负载,路由系统根据消息服务的负载返回合适的消息服务给设备端;

4)设备端连接消息服务;

5)消息服务接受连接服务,进行验证消息,向Redis中记录连接信息。

5.3、启动过程中需要考虑的几个问题

1)保证连接的稳定可靠(心跳)设备端和消息服务都进行必要的心跳检查。

当一台智能手机连上移动网络时,其实并没有真正连接上Internet,运营商分配给手机的IP其实是运营商的内网IP,手机终端要连接上Internet还必须通过运营商的网关进行IP地址的转换,这个网关简称为NAT(NetWorkAddressTranslation),简单来说就是手机终端连接Internet其实就是移动内网IP,端口,外网IP之间相互映射。

设备端心跳检查流程

消费服务心跳流程:

说明:设备端和消息服务心跳过程中可能存在几个问题

1、消息不停端断开和重连

原因:设备端和消息服务相互断开重连;

2、在redis中通一个客户端对应多个消费服务

原因:redis中消费连接信息按5分钟过期,心跳120s中进行一次,有可能断开连接没有清理完成前,设备端已经连接到另一个消费服务上了;

解决办法:在连接信息中记录最新更新信息,以最新更新信息到设备端为准(如果redis记录信息Key能定义唯一,不存在此问题)。

3、消息服务和redis中连接信息不一致

原因:由于不可预知原因

情况1:5分钟之后,消费服务客户端不会把消息推送到挂掉的消息服务服务器。

情况2:5分钟以内的消息,

1、如果消息系统挂起,说明连接已经断开,设备端会重新建立连接,在建立连接时,设备端传入上次最后一条消息,系统推送上次最后一条消息之后的所有消息给设备端;

2、消息服务如果收到本地连接不存在的消息,重新推送消息到MQ中;

4、连接建立和连接断开的业务处理逻辑和消息系统耦合

原因:连接建立和连接断开只有消息系统清楚;

解决办法:消息系统建立连接和断开连接发送消息给MQ,业务系统监控MQ,进行业务处理。

5、消息系统挂机,redis中包含连接信息;

解决办法:监听zk中节点事件,当节点下线之后,同时删除redis中连接信息

5.4、发送消息

发送消息流程图:

平台:包括设备端,页面,各种第三方服务。

步骤:

1、平台根据业务需求请求业务系统(如:手机向电视发送消息,发起视频通话)

2、业务系统处理完业务逻辑,调用消息服务客户端;

3、消息服务客户端处理消息

3.1、获取消息应该发送到哪个topic下(如果获取不到相应到topic只写数据(可能设备端已经下线),不写MQ);

3.2、保存消息到mysql数据库中(只有消息写入数据库成功才返回平台消息发送成功);

3.3、向MQ中写入消息;

4、消费服务监听MQ消息,推送消息给设备端(如果消息不在当前线程中,则重新用消息服务客户端发送到MQ中,如果连续发送3次都没找到设备端,(设备端已下线)直接丢弃消息),

回写消息状态到mysql数据库

6、监控系统

监控指标:1、各服务消息的系统性能;2、各服务消息的连接数;3、各服务消息的推送消息数据和推送的消息结果,4、推送消息日志(可以用log4j接入elk),5、路由系统的监控;

THE END
1.WxPusher微信推送服务用户可以通过二维码或者链接关注这个应用,关注我们会把用户的UID回调给你指定的服务器,你可以通过UID给这个用户发送信息。 主题(Topic) 主题(Topic)是应用下面,一类消息的集合,比如创建了一个优惠相关的应用,用来给用户推送各种优惠信息,但是不同的用户关注的优惠信息不同,一部分人关注淘宝的,一部分人关注京东的。这种https://wxpusher.dingliqc.com/
2.什么是消息推送?鉴于Android 平台 C2DM 推送的不可用性,国内涌现出大量的第三方推送服务提供商.目前应用最为广泛的第三方推送服务提供商包括个推、极光、友盟、小米、华为、BAT 等,绝大部分 APP 都会优先考虑采用第三方推送服务。 2.自建推送服务 第三方服务在开发成本和消息到达率上表现都不错,但所有信息会经过第三方服务器,对于https://www.jianshu.com/p/4a5f07f6c02c
3.极光推送亿级消息推送专家,3 分钟快速接入,智能下发策略、精准后效分析,多平台多通道覆盖,有效提升用户活跃度和留存率。注册即享免费服务! 开通免费版高级版咨询技术文档Demo下载观看视频 您是否遇到了这些问题? 页面导航 应用场景繁杂 多个系统平台和厂商通道,平台和通道推送通知的规则多、更新快、兼容难、推送平台的升级维护https://www.jiguang.cn/push
4.消息推送平台UPush为开发者提供灵活、智能、有效的消息推送方案 ¥ 0 永久免费 立即免费使用 极简接入,精准推送 一键聚合多通道触达 支持多种消息类型 下发速度快,安全有保障 专业版 更高推送频次,提升数据统计查询能力和售后服务 ¥ 18000/年 DAU 1万以内 移动支付 阿里云支付 https://www.umeng.com/push
5.小米消息推送服务面向全网开发者,开放小米澎湃OS特色服务能力 了解详情 基于Android 15 Beta的 小米澎湃OS开发者预览版 现已发布 诚邀您开启适配旅程 了解详情 OneLink 统一链接 打破平台壁垒,线下场景跨平台分发 了解详情 开发 提供多形态的应用开发类型,共筑精彩的人车家全生态 https://dev.mi.com/console/appservice/push.html
6.OPPO开放平台OPPO 开放平台,为开发者提供强大的应用分发能力,丰富的应用服务及推广变现支持,助力开发者实现业务增长和商业变现。https://open.oppomobile.com/
7.推送服务·构建你的智能应用,使用蓝莺ChatAISDK推送服务是现代应用不可或缺的一部分,通过实现消息及时传递和通知用户,可以极大地提升用户体验。推送服务的核心包括:1、多平台支持;2、高效稳定的消息传递机制;3、个性化和定制化的推送内容;4、数据分析和反馈机制。其中,推送服务在多平台上的无缝集成至关重要。例如,蓝莺IM提供了企业级ChatAI SDK,使得开发者可以同时https://docs.lanyingim.com/wiki/push-services-41-20240626-1-20-1719332222.html
8.华为HarmonyOS灵活高效的消息推送服务(PushKit)通知消息通过Push Kit通道直接下发,可在终端设备的通知中心、锁屏、横幅等展示,用户点击后拉起应用。您可以通过设置通知消息样式来吸引用户。 开通权益 Push Kit根据消息内容,将通知消息分类为服务与通讯、资讯营销两大类别,开放通知消息自分类权益。 两种类型的通知消息在提醒方式、消息展示位置、推送数量上皆存在差异。https://blog.csdn.net/pisceshsu/article/details/142434263
9.推送服务(HMSCore)·GitBook推送服务(Push Kit)是华为提供的消息推送平台,建立了从云端到终端的消息推送通道。您通过集成推送服务,可以向客户端应用实时推送消息,构筑良好的用户关系,提升用户的感知度和活跃度。 推送服务现支持如下接入形态: Android:推送服务Android SDK为您的Android应用开发提供推送消息相关的接口,适用于手机和平板。主要包含根据https://service.cocos.com/document/zh/hms-push.html
10.PushKit推送服务系统通知推送软件消息推送华为开发者联盟提供稳定、及时、高效的消息推送服务,助力应用精准触达用户,有效提升用户活跃度和粘度。 支持平台 Android iOS Web Quick App HarmonyOS 查看文档体验Demo服务咨询 85000 全球接入应用 7亿 覆盖用户数 500亿 日消息发送量 功能介绍 多种推送样式 支持大文本、Inbox多行文本、带按钮等样式,帮助您更好的提高消息对用户https://developer.huawei.com/consumer/cn/hms/huawei-pushkit/
11.消息推送服务系统信息总览 名称:消息推送服务 版本:v0.4.10 源码:https://github.com/songquanpeng/message-pusher 启动时间:2024-01-30 17:31:12 自从上次启动已发送消息数目:2078 自从上次启动新注册用户数目:1 系统配置 系统配置总览 邮箱验证:未启用 GitHub 身份验证:未启用 https://www.infect-media.com/
12.多平台消息推送服务的实践多平台消息推送服务的实践 来源:转转技术 1 背景 1.1 强耦合的消息和业务代码 1.2 服务间代码重复,维护困难 1.3 消息发送的偶发丢失问题 2 现状和痛点 3 设计和实现 3.1 消息解耦的三元素 3.2 生命周期 3.3 限流 3.4 消息模版 4 总结 1 背景 随着各项业务线上化,触达用户的方式日益重要,而即时通讯服务成为了https://blog.itpub.net/70027824/viewspace-2999235/
13.消息推送服务消息推送服务 高到达率·安全稳定·便捷集成 立即接入 查看文档 业务介绍 消息推送服务面向广大开发者,通过在云端与客户端间建立 稳定可靠的长连接,帮助开发者向客户端推送 实时消息服务。荣耀致力于提供稳定、精准的消息推送服务,助力开发者 高效触达用户,提高应用曝光。 https://developer.hihonor.com/cn/promoteService
14.个推消息推送—Android和iOS推送SDK快速集成,免费使用个推作为业内首家支持统一推送接口标准的第三方消息推送服务商,能够为客户搭建符合统一推送标准(UPS)的智能触达体系,目前已为索尼、三星、坚果手机、海信通信、TCL、科大讯飞、零跑汽车等智能汽车制造商、汽车操作系统提供商、手机及电视厂商提供统一推送解决方案。 https://www.getui.com/notification-push
15.PUSH消息推送的实现原理第三方服务在开发成本和消息到达率上表现都不错,但所有信息会经过第三方服务器,对于信息敏感类 APP 而言,有必要考虑自建一套消息推送服务,能最大化保证安全,但自建推送服务需要对 App 客户端海量长连接的维护管理且面临保证 Push Service 常驻的难题等。 https://maimai.cn/article/detail?fid=1738578667&efid=sAfNRYxTRYuYTp7eA2CwWA
16.消息通知服务SMN消息提醒推送消息应用服务消息通知服务,支持10+协议消息推送,满足不同企业的个性化需求,包含邮件,短信,语音,HTTP/HTTPS,FunctionGraph函数、FunctionGraph工作流,企业微信群,钉钉群,飞书群,Welink群。 覆盖10+推送方式,满足多种场景推送 多通道告警事件通知 与云服务的集成 错峰流控 https://www.huaweicloud.com/product/smn.html
17.使用服务台推送消息谁能操作:服务台管理员 在推送中心,服务台管理员可以创建推送消息,定时定向推送给企业内部成员。如政策公告、故障通知、节日祝福、活动报名、销售战报等。? 二、操作流程? 进入服务台管理后台,点击 推送中心 > 创建推送 进入创建推送页面。 ? https://www.feishu.cn/hc/zh-CN/articles/360049067945
18.Pushdeer:开源多协议推送服务器,定制化推送解决方案在当今快速发展的信息时代,实时的消息、通知和数据推送变得至关重要。Pushdeer 软件应运而生,作为一款开源的推送服务器软件,它支持多种推送协议,为用户提供了灵活且可定制的推送解决方案。本文将深入介绍 Pushdeer 的功能特点、使用场景、安装部署以及简要的使用教程。 https://cloud.tencent.com/developer/article/2360079
19.Java服务端消息推送的实现小结java本文主要介绍了Java 服务端消息推送的实现小结,主要包括四种常见的消息实时推送方案:短轮询、长轮询、SSE 和 WebSocket,具有一定的参考价值,感兴趣的可以了解一下+ 目录 前言:当构建实时消息推送功能时,选择适合的方案对于开发高效的实时应用至关重要。消息的推送无非就推、拉两种数据模型。本文将介绍四种常见的消息实时https://www.jb51.net/program/300070ery.htm
20.为什么有的服务号每天可以推送消息给我?懂微信公众号运营的小伙伴都知道微信服务号每月只能推送四次消息,而每天都推送消息的服务号是通过接口实现,如果想要实现服务号每天推送消息,可以通过微号帮平台48小时信息推送功能实现,可以让服务号每天推送信息给互动活跃粉丝,但不能对全部粉丝推送,全部粉丝推送信息每月只有4次。互动活跃粉丝即在公众号里发信息、点击自https://www.weihaobang.com/jiaocheng/286.html
21..NETCoreSignalR:实现服务器实时消息推送通过SignalR,开发人员可以添加实时消息推送功能,以便服务器可以将消息实时推送给连接的客户端。 在Web应用中,实时通信已经成为了一个重要的功能需求。ASP.NET Core SignalR是一个ASP.NET Core库,它简化了向连接的客户端添加实时Web功能的过程。通过SignalR,开发人员可以添加实时消息推送功能,以便服务器可以将消息实时推https://www.51cto.com/article/785500.html
22.启点教育隐私政策使用目的/理由:提供消息推送服务 个人信息的种类:OAID、Android ID、IMSI、User ID、设备型号、Android版本、应用信息、设备归属地、网络相关信息、消息发送结果、通知栏状态、锁屏状态 第三方名称:广东欢太科技有限公司 第三方隐私政策或官网:https://open.oppomobile.com/new/developmentDoc/info?id=10288 https://www.gongfubb.com/legal/zjd/privacy.htm