本技术涉及软件开发,尤其涉及一种系统消息的发送方法、装置、设备及存储介质。
背景技术:
1、为了满足用户的使用需求,应用服务器中具有系统消息推送功能,可以满足所有在线用户能够自动获取系统消息,以及满足未在线的用户在登录后即可获取系统消息。为了实现及时推送功能,需要应用服务器与客户端建立一条持久化的通信链接,当有针对某一客户端的系统消息生成时,可以通过通信链接实现系统消息的实时推送。但是,目前一些分布式部署的应用服务器中使用了zuul网关,zuul网关会自动断开持久化通信链接,因此无法实现系统消息的实时推送。
技术实现思路
1、本技术提供一种系统消息的发送方法、装置、设备及存储介质,用以解决无法维持长链接的情况下,服务器如何向客户端及时发送系统消息的问题。
2、第一方面,本技术提出了一种系统消息的发送方法,该方法应用于应用服务器,包括:
3、接收客户端发送的查询请求;所述查询请求用于请求所述客户端对应的系统消息;
4、根据所述客户端的用户信息从redis数据库中查询对应的系统消息;其中,所述redis数据库中存储的系统消息为应用服务器在生成系统消息且持久化存储至后端数据库后,以用户信息为主键key进行备份存储的;所述后端数据库中已备份的系统消息的状态为第一状态;
5、向所述客户端发送查询到的系统消息,并在所述redis数据库中将已发送的系统消息删除。
6、基于上述方案,为了解决现有的应用服务器无法维持长链接向客户端推送系统消息的问题,本技术提出采用redis中间件备份存储系统消息,由客户端发出系统消息的查询请求,从redis数据库中快速根据请求查询对应的系统消息及时响应客户端的查询请求,不需要维持长链接也可以提供高效推送系统消息。并且,由于redis数据库备份过程中可能会存在漏备份或者漏发送的问题,本技术还提出了将全部的系统消息在后端数据库中进行持久化存储,保障系统消息的全面性。
7、在一些实施例中,在向所述客户端发送查询到的系统消息之后,所述方法还包括:
8、记录已发送的系统消息的标识,并在所述后端数据库中将所述已发送的系统消息由第一状态修改标记为第二状态;
9、在当前查验周期到期后,获取所述当前查验周期内所述后端数据库中标记为第二状态的系统消息的第一组标识,以及获取所述当前查验周期内记录的从所述redis数据库中发出的系统消息的第二组标识;
10、根据所述第一组标识和所述第二组标识的对比结果,对所述redis数据库中的系统消息进行补充。
11、基于上述方案,在redis数据库中发生漏发或者漏备份的问题时,可以及时根据后端数据库中的数据对其进行补充。
12、在一些实施例中,所述根据所述第一组标识和所述第二组标识的对比结果,对所述redis数据库中的系统消息进行补充,具体包括:
13、对比所述第一组标识和所述第二组标识,确定所述第一组标识相较于第二组标识多出的至少一个标识;
14、根据所述至少一个标识从所述后端数据库中获取对应的系统消息,并将获取的系统消息重新备份存储至所述redis数据库。
15、在一些实施例中,在向所述客户端发送查询到的系统消息后,所述方法还包括:
16、在当前同步周期到期后,将在所述当前同步周期内所述redis数据库中备份存储的系统消息删除;其中,所述同步周期为所述查验周期的n倍,n为大于1的整数;
17、获取所述当前同步周期内所述后端数据库中标记为第一状态的系统消息,将获取的系统消息重新备份存储至所述redis数据库。
18、基于上述方案,周期性地统一后端数据库和redis数据库中未发送的系统消息,从而保障redis数据库中的系统消息的准确性。
19、在一些实施例中,所述查询请求为所述客户端响应于用户登录应用的操作发送的;和/或,所述查询请求为所述客户端在用户登录所述应用后周期性发送的;其中,所述应用为所述应用服务器对应的应用。
20、在一些实施例中,所述根据所述客户端的用户信息从所述redis数据库查询对应的系统消息,具体包括:
21、从所述redis数据库获取以所述客户端的用户信息为key的多条系统消息;
22、根据所述多条系统消息的时间戳,从所述多条系统消息中选取设定数量个系统消息作为所述查询到的系统消息。
23、由于系统消息具有期限性,过期的系统消息并不需要发送,所以基于上述方案,按照时间顺序选择一些系统消息进行发送,避免发送无效的系统消息。
24、第二方面,本技术提出了一种系统消息的发送装置,所述装置应用于应用服务器,或者所述装置为所述应用服务器,所述装置包括:
25、通信单元,用于接收客户端发送的查询请求;所述查询请求用于请求所述客户端对应的系统消息;
26、处理单元,用于根据所述客户端的用户信息从redis数据库中查询对应的系统消息;其中,所述redis数据库中存储的系统消息为应用服务器在生成系统消息且持久化存储至后端数据库后,以用户信息为主键key进行备份存储的;所述后端数据库中已备份的系统消息的状态为第一状态;
27、所述通信单元,还用于向所述客户端发送查询到的系统消息;
28、所述处理单元,还用于在所述redis数据库中将已发送的系统消息删除。
29、在一些实施例中,所述处理单元,还用于:
30、记录已发送的系统消息的标识,并在所述后端数据库中将所述已发送的系统消息由第一状态修改标记为第二状态;
31、在当前查验周期到期后,获取所述当前查验周期内所述后端数据库中标记为第二状态的系统消息的第一组标识,以及获取所述当前查验周期内记录的从所述redis数据库中发出的系统消息的第二组标识;
32、根据所述第一组标识和所述第二组标识的对比结果,对所述redis数据库中的系统消息进行补充。
33、在一些实施例中,所述处理单元,具体用于:
34、对比所述第一组标识和所述第二组标识,确定所述第一组标识相较于第二组标识多出的至少一个标识;
35、根据所述至少一个标识从所述后端数据库中获取对应的系统消息,并将获取的系统消息重新备份存储至所述redis数据库。
36、在一些实施例中,所述处理单元,还用于:
37、在当前同步周期到期后,将在所述当前同步周期内所述redis数据库中备份存储的系统消息删除;其中,所述同步周期为所述查验周期的n倍,n为大于1的整数;
38、获取所述当前同步周期内所述后端数据库中标记为第一状态的系统消息,将获取的系统消息重新备份存储至所述redis数据库。
39、在一些实施例中,所述查询请求为所述客户端响应于用户登录应用的操作发送的;和/或,所述查询请求为所述客户端在用户登录所述应用后周期性发送的;其中,所述应用为所述应用服务器对应的应用。
40、在一些实施例中,所述处理单元,具体用于:
41、从所述redis数据库获取以所述客户端的用户信息为key的多条系统消息;
42、根据所述多条系统消息的时间戳,从所述多条系统消息中选取设定数量个系统消息作为所述查询到的系统消息。
43、第三方面,本技术提供一种电子设备,包括:
44、存储器,用于存储程序指令;
45、处理器,用于调用所述存储器中存储的程序指令,按照获得的程序指令执行第一方面中任一项所述的方法包括的步骤。
46、第四方面,本技术提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被计算机执行时,使所述计算机执行第一方面中任一项所述的方法。
47、第五方面,本技术提供了一种计算机程序产品,所述计算机程序产品包括:计算机程序代码,当所述计算机程序代码在计算机上运行时,使得计算机执行第一方面中任一项所述的方法。