CN115361442B - 一种消息推送方法及装置、存储介质及电子设备 - Google Patents

一种消息推送方法及装置、存储介质及电子设备 Download PDF

Info

Publication number
CN115361442B
CN115361442B CN202211270801.0A CN202211270801A CN115361442B CN 115361442 B CN115361442 B CN 115361442B CN 202211270801 A CN202211270801 A CN 202211270801A CN 115361442 B CN115361442 B CN 115361442B
Authority
CN
China
Prior art keywords
information
user information
server
message
pushed
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202211270801.0A
Other languages
English (en)
Other versions
CN115361442A (zh
Inventor
张娜
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Jingdong Tuoxian Technology Co Ltd
Original Assignee
Beijing Jingdong Tuoxian Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Jingdong Tuoxian Technology Co Ltd filed Critical Beijing Jingdong Tuoxian Technology Co Ltd
Priority to CN202211270801.0A priority Critical patent/CN115361442B/zh
Publication of CN115361442A publication Critical patent/CN115361442A/zh
Application granted granted Critical
Publication of CN115361442B publication Critical patent/CN115361442B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/14Session management
    • H04L67/143Termination or inactivation of sessions, e.g. event-controlled end of session
    • H04L67/145Termination or inactivation of sessions, e.g. event-controlled end of session avoiding end of session, e.g. keep-alive, heartbeats, resumption message or wake-up for inactive or interrupted session
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D30/00Reducing energy consumption in communication networks
    • Y02D30/70Reducing energy consumption in communication networks in wireless communication networks

Landscapes

  • Health & Medical Sciences (AREA)
  • Cardiology (AREA)
  • General Health & Medical Sciences (AREA)
  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

本申请提供了一种消息推送方法及装置、存储介质及电子设备,该方法应用于服务端前端,服务端前端接收服务端后端转发来自业务系统发送的待推送消息,基于待推送消息中的用户信息,通过缓存中的各个用户信息与通道信息之间的映射关系,获取用户信息对应的通道信息,并通过通道信息对应的连接通道,将待推送消息推送至用户信息对应的客户端;用户信息对应的客户端预先与服务端前端建立长连接。可见,本申请方案,实现了待推送消息的推送,并且,由于对服务端前端和服务端后端分开部署,服务端前端与客户端建立长连接,从而当业务需求变更时,只需更新服务端后端即可,无需服务端前端和客户端重新建立连接,进而避免消息丢失和减少非必要资源的消耗。

Description

一种消息推送方法及装置、存储介质及电子设备
技术领域
本申请涉及互联网医疗技术领域,尤其涉及一种消息推送方法及装置、存储介质及电子设备。
背景技术
在实际应用中,业务系统与客户端之间存在消息推送需求,例如,在互联网医院场景中,病例系统需要向医生工作台推送消息。
现有的消息推送方案为:客户端与服务端建立长连接,服务端将业务系统发送的待推送消息推送至客户端。然而,对于业务需求频繁变化的场景,当业务需求变更,需要重启长连接服务,而长连接服务重启,连接通道就会断开,从而导致客户端重试建立长连接,在这个过程中会存在消息丢失,且存在非必要的资源消耗。
发明内容
本申请提供了一种消息推送方法及装置、存储介质及电子设备,目的在于解决现有的消息推送方案存在消息丢失和非必要的资源消耗的问题。
为了实现上述目的,本申请提供了以下技术方案:
一种消息推送方法,应用于服务端前端,所述方法包括:
接收服务端后端转发来自业务系统发送的待推送消息;
基于所述待推送消息中的用户信息,通过缓存中的各个用户信息与通道信息之间的映射关系,获取所述用户信息对应的通道信息;
通过所述通道信息对应的连接通道,将所述待推送消息推送至所述用户信息对应的客户端;其中,所述用户信息对应的客户端预先与所述服务端前端建立长连接。
上述的方法,可选的,所述接收服务端后端转发来自业务系统发送的待推送消息,包括:
在所述服务端后端收到消息队列事件且所述消息队列事件未通过幂等校验的情况下,接收所述服务端后端转发来自所述业务系统发送的待推送消息;其中,所述消息队列事件根据所述业务系统发送的所述待推送消息生成。
上述的方法,可选的,所述用户信息对应客户端预先与所述服务端前端建立长连接之后,还包括:
获取所述用户信息对应的客户端按预设第一时间周期发送的心跳信息;
若所述缓存中不存在所述用户信息对应的映射信息,或所述缓存中存在所述用户信息对应的映射信息,但是所述映射信息中的通道信息与发送所述心跳信息的连接通道的通道信息不一致,或所述映射信息中的通道信息的状态不为活跃状态,则向所述用户信息对应的客户端发送连接异常提示信息,以便所述用户信息对应的客户端断开与所述服务端前端的长连接,并重新建立与所述服务端前端的长连接。
上述的方法,可选的,所述向所述用户信息对应的客户端发送连接异常提示信息,包括:
若所述缓存中存在所述用户信息对应的映射信息,则删除所述缓存中所述用户信息对应的映射信息,并向所述用户信息对应的客户端发送连接异常提示信息;
若所述缓存中不存在所述用户信息对应的映射信息,则直接向所述用户信息对应的客户端发送连接异常提示信息。
上述的方法,可选的,所述获取所述用户信息对应的客户端按预设第一时间周期发送的心跳信息之后,包括:
将所述心跳信息存储至第二数据库;
针对所述缓存包括的每个映射信息中的用户信息,按预设的第二时间周期,判断所述第二数据库中是否存在所述用户信息对应的处于当前的第二时间周期内的心跳信息,若所述第二数据库中不存在所述用户信息对应的处于当前的第二时间周期内的心跳信息,则删除所述缓存中所述用户信息对应的映射信息,并向所述用户信息所对应的客户端发送连接异常提示信息,以便所述用户信息对应的客户端断开与所述服务端前端的长连接,并重新建立与所述服务端前端的长连接。
上述的方法,可选的,所述删除所述缓存中所述用户信息对应的映射信息之后,还包括:
向所述业务系统发送连接异常通知,所述连接异常通知用于通知所述用户信息对应的客户端与所述服务端前端连接异常。
上述的方法,可选的,所述通过所述通道信息对应的连接通道,将所述待推送消息推送至所述用户信息对应的客户端,包括:
按预设格式,对所述待推送消息进行格式转换;
通过所述通道信息对应的连接通道,将所述格式转换后的待推送消息推送至所述用户信息对应的客户端。
一种消息推送装置,应用于服务端前端,所述装置包括:
接收单元,用于接收服务端后端转发来自业务系统发送的待推送消息;
第一获取单元,用于基于所述待推送消息中的用户信息,通过缓存中的各个用户信息与通道信息之间的映射关系,获取所述用户信息对应的通道信息;
推送单元,用于通过所述通道信息对应的连接通道,将所述待推送消息推送至所述用户信息对应的客户端;其中,所述用户信息对应的客户端预先与所述服务端前端建立长连接。
一种存储介质,所述存储介质存储有指令集,其中,所述指令集被处理器执行时实现如上述的消息推送方法。
一种电子设备,包括:
存储器,用于存储至少一组指令集;
处理器,用于执行所述存储器中存储的指令集,通过执行所述指令集实现如上述的消息推送方法。
与现有技术相比,本申请包括以下优点:
本申请提供了一种消息推送方法及装置、存储介质及电子设备,该方法应用于服务端前端,服务端前端接收服务端后端转发来自业务系统发送的待推送消息,基于待推送消息中的用户信息,通过缓存中的各个用户信息与通道信息之间的映射关系,获取用户信息对应的通道信息,并通过通道信息对应的连接通道,将待推送消息推送至用户信息对应的客户端;其中,用户信息对应的客户端预先与服务端前端建立长连接。可见,本申请方案,实现了待推送消息的推送,并且,由于对服务端前端和服务端后端分开部署,服务端前端与客户端建立长连接,从而当业务需求变更时,只需更新服务端后端即可,无需服务端前端和客户端重新建立连接,进而避免消息丢失和减少非必要资源的消耗。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请提供的一种消息推送系统的结构示意图;
图2为本申请提供的一种消息推送方法的方法流程图;
图3为本申请提供的一种消息推送方法的示例图;
图4为本申请提供的一种消息推送方法的又一方法流程图;
图5为本申请提供的一种消息推送方法的又一方法流程图;
图6为本申请提供的一种消息推送方法的又一示例图;
图7为本申请提供的一种消息推送装置的结构示意图;
图8为本申请提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。
需要注意,本申请公开中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。
需要注意,本申请公开中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。
本申请可用于众多通用或专用的计算装置环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器装置、包括以上任何装置或设备的分布式计算环境等等。
本实施例中,为了便于理解,对本申请涉及的相关名词进行说明如下:
1、长连接:当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。
2、Netty:是一个java开源框架,提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。
3、Channel:是Netty网络通信的通道,通过该通道可以执行网络I/O操作。主要作用是:维护当前网络连接的通道的状态(例如是否打开,是否已连接),网络连接的配置参数(例如接收和发送缓冲区的大小),提供异步的网络I/O操作(如建立连接,读写,绑定端口)。
4、Job:这里指Java定时任务,在指定时刻触发执行某个任务。
参阅图1,本申请实施例提供了一种消息推送系统,具体包括:
客户端、服务端前端、服务端后端和业务系统。
其中,客户端通过服务端前端、服务端后端与业务系统相连。
其中,客户端通过http请求与服务端前端建立WebSocket长连接,从而服务端前端可以通过长连接的连接通道向用户信息对应的客户端发送业务消息(即待推送消息),如图1所示,在互联网医院业务场景中,服务端前端可以通过连接通道1向医生1对应的客户端发送业务消息,如,发送业务消息1、业务消息2、业务消息3等。同理,服务端前端可以通过连接通道2向医生2对应的客户端发送业务消息,如,发送业务消息1、业务消息2、业务消息3等;服务端前端可以通过连接通道3向医生3对应的客户端发送业务消息,如,发送业务消息1、业务消息2、业务消息3等;服务端前端可以通过连接通道4向医生4对应的客户端发送业务消息,如,发送业务消息1、业务消息2、业务消息3等;服务端前端可以通过连接通道5向医生5对应的客户端发送业务消息,如,发送业务消息1、业务消息2、业务消息3等;服务端前端可以通过连接通道n向医生n对应的客户端发送业务消息。
服务端前端在与客户端建立长连接后,存储该客户端对应用户信息和通道信息的映射关系至缓存Redis中,即建立连接(即长连接)后新增映射关系,并在断开连接和无心跳监控的情况下,删除对应的映射关系。
本实施例中,业务系统将需要推送的业务消息通过rpc发送至服务端后端,服务端后端持久化业务消息至MySQL数据库中,并将业务消息发送至服务端前端,服务端前端根据业务消息中的用户信息,通过缓存中存储的各个映射关系,找到该用户信息对应的通道信息,并通过通道信息对应连接通道推送业务消息至客户端。同时服务端后端使用消息队列MQ事件来作为业务消息发送的补偿检查,即服务端后端在发送业务消息至服务端前端之前,先生成MQ事件,并向服务端后端发送MQ事件,在成功接收到MQ事件后,再将业务消息发送至服务端前端。
本实施例提供的消息推送系统,通过将服务端部署为服务端后端和服务端前端,服务端前端与客户端建立长连接,从而当业务需求变更时,只需更新服务端后端即可,无需服务端前端和客户端重新建立连接,进而避免消息丢失和减少非必要资源的消耗。
本申请实施例提供了一种消息推送方法,该方法可以应用在消息推送系统中的服务端前端,所述方法的方法流程图如图2所示,具体包括:
S201、接收服务端后端转发来自业务系统发送的待推送消息。
本实施例中,业务系统在有消息推送需求的情况下,将待推送消息发送至服务端后端,具体的,业务系统通过rpc(Remote Procedure Call,远程过程调用),将待推送消息发送至服务端后端。
示例性的,业务系统向服务端后端发送的待推送消息的消息格式包括如表1所示的各个字段:
Figure 841763DEST_PATH_IMAGE001
本实施例中,服务端后端接收业务系统发送的待推送消息,其中,待推送消息中包括用户信息,也就是上述提及的接收方标识。
本实施例中,服务端后端与服务端前端建立短连接,服务端前端通过服务端后端之间的短连接,接收服务端后端转发来自业务系统发送的待推送消息。
本实施例中,接收服务端后端转发来自业务系统发送的待推送消息的过程,具体包括:在服务端后端收到消息队列事件且消息队列事件未通过幂等校验的情况下,接收服务端后端转发来自业务系统发送的待推送消息;其中,消息队列事件根据业务系统发送的待推送消息生成。
本实施例中,服务端后端在接收到业务系统发送的待推送消息的情况下,存储待推送消息至第一数据库中,实现待推送消息的持久化存储,并基于待推送消息中的关键信息,生成消息队列事件,示例性的,关键信息可以为待推送消息的消息标识。
需要说明的是,消息队列事件的初始发送状态为未发送状态。
服务端后端在生成消息队列事件后,向自身发送消息队列事件,并判断是否接收到消息队列事件,若未接收到消息队列事件,则重新向自身发送消息队列事件,以实现确保消息队列事件的正常发送,若接收到消息队列,则对消息队列事件进行幂等校验,也就是校验待推送消息是否被重复发送。
本实施例中,若消息队列事件通过幂等校验,则说明该待推送消息被重复发送,并不再将待推送消息发送至服务端前端,可选的,还可以向业务系统发送用于提示发送失败的提示信息。
本实施例中,若消息队列事件未通过幂等校验,则说明该待推送消息未被重复发送,则将待推送消息发送至服务端前端,从而服务端前端接收服务端后端发送的待推送消息。
可选的,若消息队列事件未通过幂等校验,还可以将向业务系统发送用于提示发送成功的提示信息。
需要说明的是,在具体的实现过程中,可以将存储待推送消息至第一数据库和消息队列事件放在一个事务里。
本申请实施例提供的方法中,通过对待推送消息进行持久化存储至第一数据库,以及对消息队列事件进行重试发送,以保障待推送消息不丢失。
S202、基于待推送消息中的用户信息,通过缓存中的各个用户信息与通道信息之间的映射关系,获取用户信息对应的通道信息。
本实施例中,用户信息对应的客户端预先与服务端前端建立长连接,服务端前端在与用户信息对应的客户端建立长连接后,服务端前端生成用户信息和通道信息之间的映射关系,并将映射关系存储至缓存中,也就是实现以用户维度维护通道信息。
具体的,客户端预先基于Netty提供的通信协议WebSocket建立长连接。
示例性的,将映射关系存储为键值对,其中,用户信息为键,通道信息为值,例如,参阅图3,缓存中存储的各个映射关系包括,AccountInfo1与channel1之间的映射关系,AccountInfo2与channel2之间的映射关系,AccountInfo3与channel3之间的映射关系,……,以及AccountInfoN与channelN之间的映射关系。
本实施例中,服务端前端在接收到服务端后端发送的待推送消息后,遍历缓存中的各个用户信息与通道信息之间的映射关系,查找待推送消息的用户信息对应的映射关系,从而获取用户信息对应的通道信息,其中,用户信息对应的通道信息为所查找到的映射关系中的通道信息。
S203、通过通道信息对应的连接通道,将待推送消息推送至用户信息对应的客户端。
本实施例中,用户信息对应的客户端预先与服务端前端建立长连接。
本实施例中,通过所查找到的通道信息对应的连接通道,将待推送消息推送至用户信息对应的客户端。
本实施例中,通过通道信息对应的连接通道,将待推送消息推送至用户信息对应的客户端的具体过程,包括以下步骤:
按预设格式,对待推送消息进行格式转换;
通过通道信息对应的连接通道,将格式转换后的待推送消息推送至用户信息对应的客户端。
本实施例中,服务端前端按预设格式,对待推送消息进行格式转换,示例性的,预设格式包括如表2所示的各个字段:
Figure 680275DEST_PATH_IMAGE002
本实施例中,在完成对待推送消息的格式转换后,通过通道信息对应的连接通道,将格式转换后的待推送消息推送至用户信息对应的客户端。
本申请实施例提供的消息推送方法中,服务端部署为服务端前端和服务端后端,服务端后端接收业务系统发送的待推送消息,并将待推送消息发送至服务端前端,服务端前端基于待推送消息中的用户信息,通过缓存中的各个用户信息与通道信息之间的映射关系,获取用户信息对应的通道信息,并通过通道信息对应的连接通道,将待推送消息推送至用户信息对应的客户端;其中,用户信息对应的客户端预先与服务端前端建立长连接。可见,本申请方案,实现了待推送消息的推送,并且,由于对服务端前端和服务端后端分开部署,服务端前端与客户端建立长连接,从而当业务需求变更时,只需更新服务端后端即可,无需服务端前端和客户端重新建立连接,进而避免消息丢失和减少非必要资源的消耗。
参阅图4,上述本申请实施例提出的消息推送方法中,用户信息对应客户端预先与服务端前端建立长连接之后,还包括:
S401、获取用户信息对应的客户端按预设第一时间周期发送的心跳信息。
本实施例中,用户信息对应的客户端在与服务端前端建立长连接后,用户信息对应的客户端按预设第一时间周期发送心跳信息。优选的,预设第一时间周期为20秒一个周期。
本实施例中,服务端前端获取用户信息对应的客户端发送的心跳信息。
S402、判断缓存中是否存在用户信息对应的映射信息,若否,执行S403,若是,执行S404。
本实施例中,服务端前端判断缓存中是否存在用户信息对应的映射信息,具体的,通过将用户信息与缓存包括的映射信息中的用户信息进行匹配,实现判断缓存中是否存在用户信息对应的映射信息。
本实施例中,若用户信息与缓存包括的映射信息中的任意一个用户信息相匹配,则确定缓存中存在用户信息对应的映射信息,若用户信息与缓存包括的映射信息中的用户信息均不相匹配,则确定缓存中不存在用户信息对应的映射信息。
S403、向用户信息对应的客户端发送连接异常提示信息,以便用户信息对应的客户端断开与服务端前端的长连接,并重新建立与服务端前端的长连接。
本实施例中,若缓存中不存在用户信息对应的映射信息,则向用户信息对应的客户端发送连接异常提示信息,连接异常提示信息用于提示用户信息对应的客户端长连接异常,以便于用户信息对应的客户端断开与服务端前端的长连接,并重新建立与服务端前端的长连接。
本实施例中,在用户信息对应的客户端重新建立与服务端前端的长连接后,服务端前端生成该用户信息和该用户信息对应的通道信息之间的映射关系,并将映射关系存储至缓存中。
S404、判断映射信息中的通道信息与发送心跳信息的连接通道的通道信息是否一致,若是,执行S405,若否,执行S406。
本实施例中,若缓存中存在用户信息对应的映射信息,则进一步判断映射信息中的通道信息与发送心跳信息的连接通道的通道信息是否一致。其中,发送心跳信息的连接通道为发送心跳信息的客户端与服务端前端之间的连接通道。
S405、判断映射信息中的通道信息的状态是否为活跃状态,若是,直接结束,若否,则执行步骤S406。
本实施例中,若映射信息中的通道信息与发送心跳信息的连接通道的通道信息一致,则进一步判断映射信息中的通道信息的状态是否为活跃状态。
本实施例中,若映射信息中的通道信息的状态为活跃状态,则不执行任务操作,直接结束当前流程,若映射信息中的通道信息的状态不为活跃状态,则执行步骤S406。
S406、删除缓存中用户信息对应的映射信息,并向用户信息对应的客户端发送连接异常提示信息,以便用户信息对应的客户端断开与服务端前端的长连接,并重新建立与服务端前端的长连接。
本实施例中,若映射信息中的通道信息与发送心跳信息的连接通道的通道信息不一致,或映射信息中的通道信息的状态不为活跃状态,则说明连接异常,并删除缓存中用户信息对应的映射信息,以及向用户信息对应的客户端发送连接异常提示信息,提示用户信息对应的客户端长连接异常,以便用户信息对应的客户端断开与服务端前端的长连接,并重新建立与服务端前端的长连接。
本实施例中,在用户信息对应的客户端重新建立与服务端前端的长连接后,服务端前端生成该用户信息和该用户信息对应的通道信息之间的映射关系,并将映射关系存储至缓存中。
可选的,删除缓存中用户信息对应的映射信息之后,还包括:向业务系统发送连接异常通知,连接异常通知用于通知业务系统该用户信息对应的客户端与服务端前端连接异常。
本申请实施例提供的消息推送方法中,在建立长连接后,通过用户信息对应的客户端按预设第一时间周期发送心跳信息,从而服务端前端可以基于心跳信息,监控用户信息对应的客户端与服务端前端之间的长连接是否异常,并在连接异常的情况下,向用户信息对应的客户端发送连接异常提示信息,以便用户信息对应的客户端断开与服务端前端的长连接,并重新建立与所述服务端前端的长连接,从而为待推送消息推送至客户端提供保障。
参阅图5,基于上述本申请实施例提出的消息推送方法,步骤S401之后,还可以包括以下步骤:
S501、将心跳信息存储至第二数据库。
本实施例中,将心跳信息存储至第二数据库,优选的,第二数据库可以是Hbases数据库,其中,Hbases数据库中的行键rowKey包括用户信息、心跳信息和心跳信息的时间戳,例如,rowKey为:doctorPin_heartInfo_yyyyMMddHHmmss,其中,doctorPin表示用户信息,heartInfo表示心跳信息,yyyyMMddHHmmss表示心跳信息的时间戳。
其中,心跳信息的时间戳为获取心跳信息的获取时间。
S502、针对缓存包括的每个映射信息中的用户信息,按预设的第二时间周期,判断第二数据库中是否存在用户信息对应的处于当前的第二时间周期内的心跳信息,若否,执行S503,若是,直接结束。
本实施例中,针对缓存包括的每个映射信息中的用户信息,按预设的第二时间周期,判断第二数据库中是否存在用户信息对应的处于当前的第二时间周期的心跳信息,具体的,查找该用户信息对应的各个行键信息,判断所查找到的行键信息中的心跳信息的时间戳是否处于当前的第二时间周期内,若处于,则确定第二数据库中存在用户信息对应的处于当前的第二时间周期内的心跳信息,若不处于,则确定第二数据库中不存在用户信息对应的处于当前的第二时间周期内的心跳信息。
优选的,第二时间周期可以是2分钟一个周期。
本实施例中,若第二数据库中存在用户信息对应的处于当前的第二时间周期内的心跳信息,则说明用户信息对应的客户端与服务端前端的长连接未发生连接异常,则不进行任何处理,直接结束。
S503、针对缓存包括的每个映射信息中的用户信息,删除缓存中用户信息对应的映射信息,并向用户信息所对应的客户端发送连接异常提示信息,以便用户信息对应的客户端断开与服务端前端的长连接,并重新建立与服务端前端的长连接。
本实施例中,针对缓存包括的每个映射信息中的用户信息,若第二数据库中不存在用户信息对应的处于当前的第二时间周期内的心跳信息,则说明用户信息对应的客户端与服务端前端的长连接发生连接异常,并删除缓存中用户信息对应的映射信息,并向用户信息所对应的客户端发送连接异常提示信息,以提示用户信息对应的客户端连接异常,以便用户信息对应的客户端断开与服务端前端的长连接,并重新建立与服务端前端的长连接。
本实施例中,在用户信息对应的客户端重新建立与服务端前端的长连接后,服务端前端生成该用户信息和该用户信息对应的通道信息之间的映射关系,并将映射关系存储至缓存中。
可选的,删除缓存中用户信息对应的映射信息之后,还包括:向业务系统发送连接异常通知,连接异常通知用于通知业务系统该用户信息对应的客户端与服务端前端连接异常。
本申请实施例提供的消息推送方法中,通过按预设的第二时间周期对缓存中的各个映射信息进行清理,以将异常连接对应的映射信息进行删除,并向用户信息对应的客户端发送连接异常提示信息,以便用户信息对应的客户端断开与服务端前端的长连接,并重新建立与所述服务端前端的长连接,从而为待推送消息推送至客户端提供保障。
上述本申请实施例提供的消息推送方法可应用于互联网医疗场景,服务端前端可以使用多台服务器,优选的,可以部署为10台服务器,每台服务可以轻松处理C10K(即1W并发请求),因而总共是可处理10万个连接。一旦遇到大促等场景,连接翻5倍,最后是5W连接,当前资源也是可以满足的,做到了备战常态化的要求。日后随用户量大幅增长,水平扩展服务端机器资源可满足。
参阅图6,上述本申请实施例提供的消息推送方法的具体实现过程进行举例说明如下:
S1、用户信息对应的客户端和服务端前端建立连接,即建立长连接,具体的,基于客户端类型、应用程序标识和用户信息,通过通信协议WebSocket建立长连接。例如,应用程序标识appId=10001,客户端类型clentTpye=pc,userPin=TestPin。
S2、WebSocket连接成功,即完成建立用户信息对应的客户端与服务端前端的长连接的连接通道WS channel。
S3、在用户信息对应的客户端与服务端前端建立长连接后,服务端前端建立用户信息和用户信息对应的通道信息之间的映射关系,并将映射关系保存到缓存Redis中。
S4、在用户信息对应的客户端与服务端前端建立长连接后,客户端按预设第一时间周期发送心跳信息,服务端前端将心跳信息存储至数据库HBase中。
S5、服务端前端定时任务扫描异常连接,也就是扫描有连接无心跳的用户,具体的,针对所述缓存包括的每个映射信息中的用户信息,服务端前端按预设的第二时间周期,判断数据库HBase中是否存在用户信息对应的处于当前的第二时间周期内的心跳信息,若存在在,则说明该存在异常连接,并执行S6。
S6、删除异常连接,也就是删除缓存中异常连接对应的映射信息。
S7、通过消息队列MQ发送向业务系统发送异常连接通知。
S8、业务系统向服务端后端发送业务消息,即发送待推送消息。
S9、服务端后端在接收到待推送消息后,将待推送消息中的消息内容持久化保存到数据库MySQL中,并将待推送消息发送至服务端前端。
S10、服务端前端基于待推送消息中的用户信息,通过缓存包括的各个用户信息和通道信息的映射关系,获取用户信息对应的用户通道信息channel(即上述提及的通道信息)。
S11、服务端前端通过所获取的通道信息所对应的连接通道,将待推送消息发送至用户信息对应的客户端。
需要说明的是,虽然采用特定次序描绘了各操作,但是这不应当理解为要求这些操作以所示出的特定次序或以顺序次序执行来执行。在一定环境下,多任务和并行处理可能是有利的。
应当理解,本申请公开的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本申请公开的范围在此方面不受限制。
与图1所述的方法相对应,本申请实施例还提供了一种消息推送装置,用于对图2中方法的具体实现,该装置可以应用于服务端前端,其结构示意图如图7所示,具体包括:
接收单元701,用于接收服务端后端转发来自业务系统发送的待推送消息;
第一获取单元702,用于基于所述待推送消息中的用户信息,通过缓存中的各个用户信息与通道信息之间的映射关系,获取所述用户信息对应的通道信息;
推送单元703,用于通过所述通道信息对应的连接通道,将所述待推送消息推送至所述用户信息对应的客户端;其中,所述用户信息对应的客户端预先与所述服务端前端建立长连接。
本申请实施例提供的消息推送装置,实现了待推送消息的推送,并且,由于对服务端前端和服务端后端分开部署,服务端前端与客户端建立长连接,从而当业务需求变更时,只需更新服务端后端即可,无需服务端前端和客户端重新建立连接,进而避免消息丢失和减少非必要资源的消耗。
在本申请的一个实施例中,基于前述方案,接收单元701,具体用于:
在所述服务端后端收到消息队列事件且所述消息队列事件未通过幂等校验的情况下,接收所述服务端后端转发来自所述业务系统发送的待推送消息;其中,所述消息队列事件根据所述业务系统发送的所述待推送消息生成。
在本申请的一个实施例中,基于前述方案,还可以配置为:
第二获取单元,用于获取所述用户信息对应的客户端按预设第一时间周期发送的心跳信息;
第一发送单元,用于若所述缓存中不存在所述用户信息对应的映射信息,或所述缓存中存在所述用户信息对应的映射信息,但是所述映射信息中的通道信息与发送所述心跳信息的连接通道的通道信息不一致,或所述映射信息中的通道信息的状态不为活跃状态,则向所述用户信息对应的客户端发送连接异常提示信息,以便所述用户信息对应的客户端断开与所述服务端前端的长连接,并重新建立与所述服务端前端的长连接。
在本申请的一个实施例中,基于前述方案,第一发送单元在向所述用户信息对应的客户端发送连接异常提示信息时,具体用于:
若所述缓存中存在所述用户信息对应的映射信息,则删除所述缓存中所述用户信息对应的映射信息,并向所述用户信息对应的客户端发送连接异常提示信息;
若所述缓存中不存在所述用户信息对应的映射信息,则直接向所述用户信息对应的客户端发送连接异常提示信息。
在本申请的一个实施例中,基于前述方案,还可以配置为:
存储单元,用于将所述心跳信息存储至第二数据库;
第二发送单元,用于针对所述缓存包括的每个映射信息中的用户信息,按预设的第二时间周期,判断所述第二数据库中是否存在所述用户信息对应的处于当前的第二时间周期内的心跳信息,若所述第二数据库中不存在所述用户信息对应的处于当前的第二时间周期内的心跳信息,则删除所述缓存中所述用户信息对应的映射信息,并向所述用户信息所对应的客户端发送连接异常提示信息,以便所述用户信息对应的客户端断开与所述服务端前端的长连接,并重新建立与所述服务端前端的长连接。
在本申请的一个实施例中,基于前述方案,还可以配置为:
第三发送单元,用于向所述业务系统发送连接异常通知,所述连接异常通知用于通知所述业务系统所述用户信息对应的客户端与所述服务端前端连接异常。
在本申请的一个实施例中,基于前述方案,推送单元703在通过所述通道信息对应的连接通道,将所述待推送消息推送至所述用户信息对应的客户端时,具体用于:
按预设格式,对所述待推送消息进行格式转换;
通过所述通道信息对应的连接通道,将所述格式转换后的待推送消息推送至所述用户信息对应的客户端。
本申请实施例还提供了一种存储介质,所述存储介质存储有指令集,其中,在所述指令集运行时执行如上文任一实施例公开的消息推送方法。
本申请实施例还提供了一种电子设备,其结构示意图如图8所示,具体包括存储器801,用于存储至少一组指令集;处理器802,用于执行所述存储器中存储的指令集,通过执行所述指令集实现如上文任一实施例公开的消息推送方法。
尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。
虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本申请公开的范围的限制。在单独的实施例的上下文中描述的某些特征还可以组合地实现在单个实施例中。相反地,在单个实施例的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实施例中。
以上描述仅为本申请公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请公开中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。

Claims (10)

1.一种消息推送方法,其特征在于,应用于服务端前端,所述方法包括:
接收服务端后端转发来自业务系统发送的待推送消息,所述服务端后端与服务端前端建立短连接;
基于所述待推送消息中的用户信息,通过缓存中的各个用户信息与通道信息之间的映射关系,获取所述用户信息对应的通道信息;
通过所述通道信息对应的连接通道,将所述待推送消息推送至所述用户信息对应的客户端;其中,所述用户信息对应的客户端预先与所述服务端前端建立长连接。
2.根据权利要求1所述的方法,其特征在于,所述接收服务端后端转发来自业务系统发送的待推送消息,包括:
在所述服务端后端收到消息队列事件且所述消息队列事件未通过幂等校验的情况下,接收所述服务端后端转发来自所述业务系统发送的待推送消息;其中,所述消息队列事件根据所述业务系统发送的所述待推送消息生成。
3.根据权利要求1所述的方法,其特征在于,所述用户信息对应客户端预先与所述服务端前端建立长连接之后,还包括:
获取所述用户信息对应的客户端按预设第一时间周期发送的心跳信息;
若所述缓存中不存在所述用户信息对应的映射信息,或所述缓存中存在所述用户信息对应的映射信息,但是所述映射信息中的通道信息与发送所述心跳信息的连接通道的通道信息不一致,或所述映射信息中的通道信息的状态不为活跃状态,则向所述用户信息对应的客户端发送连接异常提示信息,以便所述用户信息对应的客户端断开与所述服务端前端的长连接,并重新建立与所述服务端前端的长连接。
4.根据权利要求3所述的方法,其特征在于,所述向所述用户信息对应的客户端发送连接异常提示信息,包括:
若所述缓存中存在所述用户信息对应的映射信息,则删除所述缓存中所述用户信息对应的映射信息,并向所述用户信息对应的客户端发送连接异常提示信息;
若所述缓存中不存在所述用户信息对应的映射信息,则直接向所述用户信息对应的客户端发送连接异常提示信息。
5.根据权利要求3所述的方法,其特征在于,所述获取所述用户信息对应的客户端按预设第一时间周期发送的心跳信息之后,包括:
将所述心跳信息存储至第二数据库;
针对所述缓存包括的每个映射信息中的用户信息,按预设的第二时间周期,判断所述第二数据库中是否存在所述用户信息对应的处于当前的第二时间周期内的心跳信息,若所述第二数据库中不存在所述用户信息对应的处于当前的第二时间周期内的心跳信息,则删除所述缓存中所述用户信息对应的映射信息,并向所述用户信息所对应的客户端发送连接异常提示信息,以便所述用户信息对应的客户端断开与所述服务端前端的长连接,并重新建立与所述服务端前端的长连接。
6.根据权利要求4或5所述的方法,其特征在于,所述删除所述缓存中所述用户信息对应的映射信息之后,还包括:
向所述业务系统发送连接异常通知,所述连接异常通知用于通知所述用户信息对应的客户端与所述服务端前端连接异常。
7.根据权利要求1所述的方法,其特征在于,所述通过所述通道信息对应的连接通道,将所述待推送消息推送至所述用户信息对应的客户端,包括:
按预设格式,对所述待推送消息进行格式转换;
通过所述通道信息对应的连接通道,将所述格式转换后的待推送消息推送至所述用户信息对应的客户端。
8.一种消息推送装置,其特征在于,应用于服务端前端,所述装置包括:
接收单元,用于接收服务端后端转发来自业务系统发送的待推送消息,所述服务端后端与服务端前端建立短连接;
第一获取单元,用于基于所述待推送消息中的用户信息,通过缓存中的各个用户信息与通道信息之间的映射关系,获取所述用户信息对应的通道信息;
推送单元,用于通过所述通道信息对应的连接通道,将所述待推送消息推送至所述用户信息对应的客户端;其中,所述用户信息对应的客户端预先与所述服务端前端建立长连接。
9.一种存储介质,其特征在于,所述存储介质存储有指令集,其中,所述指令集被处理器执行时实现如权利要求1-7任意一项所述的消息推送方法。
10.一种电子设备,其特征在于,包括:
存储器,用于存储至少一组指令集;
处理器,用于执行所述存储器中存储的指令集,通过执行所述指令集实现如权利要求1-7任意一项所述的消息推送方法。
CN202211270801.0A 2022-10-18 2022-10-18 一种消息推送方法及装置、存储介质及电子设备 Active CN115361442B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211270801.0A CN115361442B (zh) 2022-10-18 2022-10-18 一种消息推送方法及装置、存储介质及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211270801.0A CN115361442B (zh) 2022-10-18 2022-10-18 一种消息推送方法及装置、存储介质及电子设备

Publications (2)

Publication Number Publication Date
CN115361442A CN115361442A (zh) 2022-11-18
CN115361442B true CN115361442B (zh) 2023-03-07

Family

ID=84007936

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211270801.0A Active CN115361442B (zh) 2022-10-18 2022-10-18 一种消息推送方法及装置、存储介质及电子设备

Country Status (1)

Country Link
CN (1) CN115361442B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103297390A (zh) * 2012-02-27 2013-09-11 成都谛听科技有限公司 服务器反向连接客户端的实现方法
WO2016177285A1 (zh) * 2015-05-07 2016-11-10 阿里巴巴集团控股有限公司 一种数据推送方法及装置
CN108418853A (zh) * 2018-01-16 2018-08-17 广州市信富信息科技有限公司 一种基于云计算的实时通信方法及系统
CN109120727A (zh) * 2018-10-31 2019-01-01 苏州友教习亦教育科技有限公司 分布式消息推送系统
CN112866391A (zh) * 2021-01-21 2021-05-28 北京百度网讯科技有限公司 消息推送方法、装置、电子设备及存储介质

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103973737A (zh) * 2013-01-30 2014-08-06 腾讯科技(深圳)有限公司 主动推送消息的方法、服务器及浏览器
CN110611691B (zh) * 2018-06-15 2022-11-15 中兴通讯股份有限公司 一种消息推送方法、系统及存储介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103297390A (zh) * 2012-02-27 2013-09-11 成都谛听科技有限公司 服务器反向连接客户端的实现方法
WO2016177285A1 (zh) * 2015-05-07 2016-11-10 阿里巴巴集团控股有限公司 一种数据推送方法及装置
CN108418853A (zh) * 2018-01-16 2018-08-17 广州市信富信息科技有限公司 一种基于云计算的实时通信方法及系统
CN109120727A (zh) * 2018-10-31 2019-01-01 苏州友教习亦教育科技有限公司 分布式消息推送系统
CN112866391A (zh) * 2021-01-21 2021-05-28 北京百度网讯科技有限公司 消息推送方法、装置、电子设备及存储介质

Also Published As

Publication number Publication date
CN115361442A (zh) 2022-11-18

Similar Documents

Publication Publication Date Title
JP5792850B2 (ja) ネットワーク上でのファイルフォルダ送信
WO2021121370A1 (zh) 用于消息队列的消息丢失检测方法和装置
KR20220079958A (ko) 블록체인 메시지 처리 방법 및 장치, 컴퓨터 및 판독 가능한 저장 매체
JP4794143B2 (ja) 通知ボンドを使用してキャッシュオブジェクトを管理するためのシステムおよび方法
KR101233263B1 (ko) 피드백 메시지를 이용한 푸시 서비스 제공 시스템 및 방법
WO2017174026A1 (zh) 一种客户端连接方法及系统
CN108712457A (zh) 基于Nginx反向代理的后端服务器动态负载调整方法及装置
CN107517227B (zh) 用于分布式一致性系统的会话实现方法以及装置
US8117437B2 (en) System for providing services for applications available under different protocols
JP2017129935A (ja) サーバシステム、サーバシステムを制御する方法およびプログラム。
WO2006001137A1 (ja) データ通信システム、サーバ装置及びデータ通信方法並びにそのプログラム
KR20170068533A (ko) 가상 카드 처리 방법 및 장치
US11797573B2 (en) Dynamic and selective object update for local storage copy based on network connectivity characteristics
CN115361442B (zh) 一种消息推送方法及装置、存储介质及电子设备
CN114385374A (zh) 基于消息中间件的消息处理方法、装置及存储介质
CN111949302B (zh) 一种用于工业计算机管理系统的即时性更新方法、系统和设备
JP2010086137A (ja) メッセージキューイング方法及びプログラム
JP5913196B2 (ja) 計算機システム及び障害特定方法
CN114138895A (zh) 多数据源的数据同步方法、装置、计算机设备和存储介质
CN111182047B (zh) 用于在跨网络的大数据平台之间转移文件的方法和系统
CN114500243B (zh) 数据通信方法、装置、计算机可读介质及电子设备
CN114900510A (zh) 一种信息推送方法及服务器、客户端、存储介质
WO2013036099A1 (en) System and method for rich internet application session transfer
CN114465997A (zh) 数据同步方法及装置、电子设备和存储介质
CN105471818B (zh) 应用软件间的信息传递方法和系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant