CN115037753B - 消息通知方法和系统 - Google Patents
消息通知方法和系统 Download PDFInfo
- Publication number
- CN115037753B CN115037753B CN202210709639.1A CN202210709639A CN115037753B CN 115037753 B CN115037753 B CN 115037753B CN 202210709639 A CN202210709639 A CN 202210709639A CN 115037753 B CN115037753 B CN 115037753B
- Authority
- CN
- China
- Prior art keywords
- message
- server
- middleware
- servers
- cluster
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 79
- 230000008569 process Effects 0.000 claims description 28
- 238000012545 processing Methods 0.000 abstract description 10
- 230000006870 function Effects 0.000 description 5
- 238000012544 monitoring process Methods 0.000 description 5
- 125000004122 cyclic group Chemical group 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 230000004044 response Effects 0.000 description 4
- 238000012795 verification Methods 0.000 description 4
- 238000013475 authorization Methods 0.000 description 3
- 230000002159 abnormal effect Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/14—Session management
- H04L67/141—Setup of application sessions
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
Abstract
本申请提出一种消息通知方法和系统,该方法包括:负载均衡模块在接收到触发事件后通过负载均衡策略调度集群中的第一服务器;第一服务器根据触发事件生产第一消息,并将第一消息推送至消息中间件;集群中的第二服务器监听到消息中间件中的第一消息后,消费第一消息,若判定第一消息与已成功建立websocket链接的用户端相关则将消费到的第一消息通过对应websocket链接返回至相关用户端。本申请将消息中间件作为消息的缓存,连接不同服务器,支持负载均衡调用任意数量的服务器处理不同任务,均能将消息准确推送至用户端,且大大提高访问速度,减少对集群的频繁访问压力。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种消息通知方法和系统。
背景技术
在用户端与服务器交互过程中,往往采用websocket方式由服务器向用户端实时推送消息通知,或者由用户端作为前端进行循环定时请求的方式向服务器请求获取消息通知。websocket方式即长连接,通过负载均衡将用户请求分配到集群中某台服务器上,由分配的该服务器执行对应请求任务,在处理过程中该服务器也会直接通过该websocket长连接将相关消息推送到至该用户端的前台web进行实时展示。循环定时查询的方式就是由用户端每间隔一定时长主动向服务器发起一个请求,服务器如果查询到新的消息通知则会返回给用户端显示。
Websocket长链接的缺点是必须要始终与建立websocket长链接的那个服务器保持连接才能进行消息的通知,即负载均衡分配的服务器和返回消息的服务器必须是同一个服务器,否则由于没有前后端建立长连接,无法进行消息的发送。例如,后台有两台服务器serverA和serverB,用户访问页面的时候负载均衡是转发到serverB来处理的,第三方服务调用serverA传过来一个数据,处理完成后,serverA由于没有与用户端建立websocket长连接,导致无法向用户端发送消息。循环定时查询的缺点是,用户端会一直循环定时查询,即使后台服务器一直不会有新的消息产生,也会一直访问后台服务器查询,给服务器造成了不必要的访问负担和压力,浪费系统资源,而且及时性也会受影响。
发明内容
为了解决现有技术中在集群中如果负载均衡分配的服务器与返回消息的服务器为不同服务器则会导致消息无法返回给用户端以及由用户端定时访问服务器则会给服务器造成访问压力浪费系统资源的技术问题。本申请提供了一种消息通知方法和系统,其主要目的在于支持负载均衡调用任意数量的服务器处理不同任务,均能将消息准确推送至用户端,且大大提高访问速度,减少对集群的频繁访问压力。
为实现上述目的,本申请提供了一种消息通知方法,该方法包括:
负载均衡模块在接收到触发事件后通过负载均衡策略调度集群中的第一服务器;
第一服务器根据触发事件生产第一消息,并将第一消息推送至消息中间件;
集群中的第二服务器监听到消息中间件中的第一消息后,消费第一消息,若判定第一消息与已成功建立websocket链接的用户端相关则将消费到的第一消息通过对应websocket链接返回至相关用户端。
此外,为实现上述目的,本申请还提供了一种消息通知系统,该系统包括负载均衡模块、多个服务器和消息中间件,其中,多个服务器包括第一服务器和第二服务器,多个服务器部署为集群;
负载均衡模块,用于在接收到触发事件后通过负载均衡策略调度集群中的第一服务器;
第一服务器,用于根据触发事件生产第一消息,并将第一消息推送至消息中间件;
集群中的第二服务器,用于监听到消息中间件中的第一消息后,消费第一消息,若判定第一消息与已成功建立websocket链接的用户端相关则将消费到的第一消息通过对应websocket链接返回至相关用户端。
为实现上述目的,本申请还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机可读指令,处理器执行计算机可读指令时执行如前面任一项的消息通知方法中对应的步骤。
为实现上述目的,本申请还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机可读指令,计算机可读指令被处理器执行时,使得处理器执行如前面任一项的消息通知方法中对应的步骤。
本申请提出的消息通知方法和系统,通过消息中间件对消息进行缓存,支持负载均衡调用任意数量的服务器处理不同任务,均能将消息准确推送至用户端,减小了负载均衡对任务分配的限制,有效克服现有技术多服务器分摊任务导致消息无法正确推送,为了消息能够正确推送要求服务器必须一致的局限性。另外,服务器从消息中间件中消费消息,有效减少了对集群的频繁访问压力,且大大提高了访问速度。
附图说明
图1为本申请一实施例中消息通知方法的应用场景图;
图2为本申请一实施例中消息通知方法的流程示意图;
图3为本申请一实施例中计算机设备的内部结构框图。
本申请目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的消息通知方法,可应用在如图1的消息通知系统中,该消息通知系统包括负载均衡模块100、多个服务器和消息中间件300,其中,多个服务器包括第一服务器210和第二服务器220,还可以包括其他服务器2nm;
负载均衡模块100,用于在接收到触发事件后通过负载均衡策略调度集群中的第一服务器210;
第一服务器210,用于根据触发事件生产第一消息,并将第一消息推送至消息中间件300;
集群中的第二服务器220,用于监听到消息中间件300中的第一消息后,消费第一消息,若判定第一消息与已成功建立websocket链接的用户端相关则将消费到的第一消息通过对应websocket链接返回至相关用户端400。
集群中第二服务器220的数量包括多个,但是集群中与同一个相关用户端400建立websocket链接的第二服务器220仅有一个。
同一个第二服务器220可以与多个不同用户端建立不同的websocket链接,第二服务器220会将第一消息返回给用户端中相关用户端400。另外,相关用户端400的数量本申请不作限制,同一个第二服务器可以将第一消息发送给多个相关用户端400。
其中,用户端为终端设备,可以但不限于各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备。
图2为本申请一实施例中消息通知方法的流程示意图。参考图2,以该方法应用在图1中的消息通知系统为例进行说明。该消息通知方法包括以下步骤S100-S300。
S100:负载均衡模块在接收到触发事件后通过负载均衡策略调度集群中的第一服务器。
具体地,负载均衡模块(Load Balance)用于将负载(工作任务)进行平衡、分摊到多个操作单元上运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,实现任务的负载均衡,从而协同完成工作任务,提高资源利用率。
负载均衡模块可以为软件负载均衡模块也可以为硬件负载均衡模块。例如,负载均衡模块可以为f5硬件负载均衡模块或nginx软件负载均衡模块。
集群中包括多个服务器,负载均衡模块在接收到触发事件后会使用负载均衡策略结合当前集群中各个服务器的可用资源状况调度集群的第一服务器来执行对应的任务或操作。第一服务器为集群中正常运行的服务器。
S200:第一服务器根据触发事件生产第一消息,并将第一消息推送至消息中间件。
具体地,第一服务器作为消息生产者根据触发事件来生产第一消息,并将第一消息推送给消息中间件,消息中间件会将接收的第一消息放在消息队列中等待集群中的第二服务器来消费。
触发事件可以为定时任务、接收到第三方消息或接收到新的用户请求等不局限于此。
消息中间件可以采用kafka或rabbitMQ等方式实现,本申请对此不作限定。
消息中间件存储有消息的主题(topic)、生产者编码(Producer ID,简称PID)和消费者编码(Consumer ID,简称CID)。本实施例消息中间件会存储第一消息的主题、生产者编码为第一服务器对应的编码、消费者编码为已成功向消息中间件申请注册为消费者的服务器所对应的编码。
使用消息中间件进行通知的缓存消费,由于消息中间件是系统本身自带的进行消息的缓存队列,因此不会给系统增加额外的负担,实现了消息中间件的复用,充分利用系统资源。任意服务器使用websocket都可以实时推送消息中间件中的消息,因此,本实施例不会限制负载均衡的任务分配,负载均衡模块可以将不同任务任意分配给适合的服务器,而不影响消息的正确推送。
S300:集群中的第二服务器监听到消息中间件中的第一消息后,消费第一消息,若判定第一消息与已成功建立websocket链接的用户端相关则将消费到的第一消息通过对应websocket链接返回至相关用户端。
具体地,集群包含至少一个第二服务器。第一服务器和第二服务器可以为同一个服务器也可以为不同服务器。
第二服务器作为消息中间件中消息的消费者会实时监听消息中间件中是否有新的消息产生,如果监听到新产生的第一消息,则会消费第一消息。
第二服务器还会判断该第一消息是否需要发送给已成功建立websocket链接的用户端即判断该第一消息是否与用户端相关,如果需要,则第二服务器会将第一消息通过之前已建立的websocket链接通道返回给相关用户端。
如果该第一消息与已成功建立websocket链接的任意用户端都无关,则该第二服务器会丢弃该第一消息。第一消息可以为通知消息或运行结果。将第一消息返回给用户端用于在用户端的前台web页面显示该第一消息。
以第二服务器作为执行主体,该消息通知方法包括:
若监听到消息中间件中的第一消息,消费第一消息,若判定第一消息与已成功建立websocket链接的用户端相关则将消费到的第一消息通过对应websocket链接返回至相关用户端,其中,第一消息是第一服务器根据触发事件生产并推送至消息中间件的,第一服务器为负载均衡模块在接收到触发事件后通过负载均衡策略调度的。
本实施例通过消息中间件对消息进行缓存,支持负载均衡调用任意数量的服务器处理不同任务,均能将消息准确推送至用户端,减小了负载均衡对任务分配的限制,有效克服现有技术多服务器分摊任务导致消息无法正确推送,为了消息能够正确推送要求服务器必须一致的局限性。另外,服务器从消息中间件中消费消息,有效减少了对集群的频繁访问压力,且大大提高了访问速度。
在一个实施例中,该方法还包括:
负载均衡模块通过负载均衡策略将用户请求分配至集群中的第二服务器;
第二服务器根据用户请求执行对应的目标响应,并将目标响应对应的响应结果通过建立的websocket链接返回至用户请求对应的用户端。
具体地,集群中包括多个服务器,负载均衡模块在接收到用户请求后会根据当前集群中各个服务器的可用资源状况将用户请求分配给集群中某个服务器,将该服务器记为第二服务器。
第二服务器是负载均衡模块从集群中指定的用于处理该用户请求的一个服务器。第二服务器在接收到该用户请求后会与用户请求对应的用户端建立websocket长链接,以与用户端进行交互。第二服务器响应用户请求后会将对应的响应结果通过该websocket链接对应的websocket链接通道返回给用户端。
在用户端未断开服务且网络服务处于正常状态下,websocket长链接一直都处于连接状态。如果用户端的用户断开网络服务或网络异常,则websocket长链接会断开。
在一个实施例中,步骤S200中第一服务器根据触发事件生产第一消息,包括:
若触发事件为第三方通知消息,则第一服务器根据第三方通知消息生产第一消息;
若触发事件为触发任务,则第一服务器在执行完触发任务后生产第一消息。
具体地,如果触发事件为第三方通知消息,则第一服务器会作为生产者对该第三方通知信息进行加工以生产出第一消息。例如,第三方通知消息为金融机构的扣款通知。
如果触发事件为触发任务例如为定时任务,则负载均衡模块会根据负载均衡策略将该触发任务分发给调度的第一服务器,第一服务器会先执行该触发任务后生产出对应的第一消息。例如,触发任务为定时扣款任务,第一服务器在扣款时刻到来时执行自动扣款操作,然后生产出对应的扣款通知作为第一消息,扣款通知包含了扣款项、被扣款用户以及扣款额度等信息。
触发事件还可以为接收到新的用户请求。例如负载均衡模块接收到用户通过第一用户端(例如手机)发送的扫码登录请求,则负载均衡模块分配第一服务器执行登录验证操作,验证成功后将该用户的用户账号成功登录到第二用户端(例如电脑),其中,第二用户端与第一服务器建立websocket链接,第一用户端和第二用户端登录的是同一个用户账号。登录成功后第一服务器生产出已在第二用户端登录成功的第一消息并发送至消息中间件。与第一用户端已建立websocket链接的第二服务器消费该第一消息,并将用户账号已在第二用户端成功登录的第一消息返回给第一用户端显示。
再例如,负载均衡模块接收到用户通过第一用户端(例如手机)发送的扫码登录请求,则负载均衡模块分配第一服务器执行登录验证操作。在第一服务器执行登录验证操作时会生产第二消息,第二消息用于获取用户登录授权许可,第二服务器消费该第二消息将该第二消息返回给第一用户端显示,用户根据第一用户端显示的登录授权界面选择授权登录后生产第三消息,第三消息为用户许可授权登录的消息,第一服务器消费该第三消息后将该用户的用户账号成功登录到第二用户端(例如电脑)。其中,第二用户端与第一服务器建立websocket链接,第一用户端和第二用户端登录的是同一个用户账号。登录成功后第一服务器生产出已在第二用户端登录成功的第一消息并发送至消息中间件。与第一用户端已建立websocket链接的第二服务器消费该第一消息,并将用户账号已在第二用户端成功登录的第一消息返回给第一用户端显示。
在一个实施例中,在步骤S300中消费第一消息之后,该方法还包括:
若监测到所有第二服务器均已消费第一消息,则消息中间件将第一消息从消息中间件中移除。
具体地,集群中包括至少一个第二服务器,且第二服务器均为已向消息中间件成功申请注册为消费者的服务器。消息中间件的同一个消息被所有第二服务器消费后,消息中间件才会将该消息移除。所有第二服务器可以并行消费该第一消息但不必同时消费该第一消息。
例如,第一消息本该被5个第二服务器消费,如果某个第二服务器未来得及消费该第一消息,消息中间件就将该第一消息移除。如果其他4个第二服务器消费的该第一消息与其建立websocket链接的用户端均无关,而该第一消息恰好与未消费该第一消息的第二服务器所连接的用户端有关,则会导致真正的用户端无法接收到该第一消息。
因此,本实施例可以保证消息不会被遗漏消费,进而保证真正的用户端能够接收到该消息。且能够及时清理消息、缓解消息所占存储空间,缓解消息中间件的处理压力,减少消息中间件的负担。
在一个实施例中,在步骤S300之前,该方法还包括:
第二服务器在启动后根据对应的唯一标识生成对应的消费者编码,并根据消费者编码向消息中间件申请注册为消费者,其中,唯一标识包括机器唯一标识,或,唯一标识包括机器唯一标识和对应后台实例的进程号。
具体地,如果第二服务器为单实例操作,则根据第二服务器的机器唯一标识可以生成唯一表征第二服务器的消费者编码。其中,集群中所有服务器的机器唯一标识均不同。
如果第二服务器为多实例操作,则为了区分同一个第二服务器的多个后台实例所对应的多个消费者,需要为每个后台实例分配一个不同的消费者编码。因此,可以使用第二服务器和对应后台实例的进程号来生成唯一标识后台实例的消费者编码。
另外,还可以使用第二服务器和对应后台实例的端口号来生成唯一标识后台实例的消费者编码。
本实施例通过机器唯一标识或机器唯一标识与进程号的结合自动生成消费者编码,不需要工程人员的配置,简单方便,且支持单实例和多实例服务器,适用范围广。
在一个实施例中,唯一标识包括机器唯一标识和对应后台实例的进程号;
第二服务器在启动后根据对应的唯一标识生成对应的消费者编码,并根据消费者编码向消息中间件申请注册为消费者,包括:
第二服务器在启动后根据对应的机器唯一标识和后台实例对应的进程号生成对应后台实例的消费者编码,并根据消费者编码向消息中间件申请将对应后台实例注册为消费者;
若监测到所有第二服务器均已消费第一消息,则消息中间件将第一消息从消息中间件中移除,包括:
若监测到每个第二服务器的每个后台实例均已消费第一消息,则消息中间件将第一消息从消息中间件中移除。
具体地,如果第二服务器是多实例操作,则根据第二服务器的机器唯一标识和后台实例的进程号来生成消费者编码,并根据这个后台实例的消费者编码将每个后台实例申请注册为消费者。集群中所有第二服务器对应的所有后台实例的消费者编码都是唯一不重复的。
在多实例操作下,所有后台实例都会作为一个单独的消费者来消费第一消息。消息中间件会在监测到所有第二服务器的每个后台实例均已消费第一消息后将第一消息从消息中间件中移除。
此外,同一个服务器的多个后台实例会分别与用户端建立对应的websocket链接,每个后台实例会将消费到的第一消息通过对应websocket链接返回至对应用户端。
另外,第二服务器的后台实例可能会关闭,因此,为了保证消息中间件中注册的消费者与实际运行的后台实例一致,在第二服务器的后台实例关闭后,第二服务器也需要向消息中间件申请将已关闭的后台实例的消费者身份注销或暂时隐藏或暂时停用。等到关闭后的后台实例重新打开后再次注册为消费者或恢复消费者身份。
在一个实施例中,在步骤S200中将第一消息推送至消息中间件之后,该方法还包括:
若第一服务器未接收到消息中间件返回的已接收第一消息的通知,则第一服务器通过http请求向集群中其他服务器广播第一消息。
具体地,消息中间件的目的是释放集群压力,但是如果消息中间件负担过重可能会发生故障。消息中间件在正常情况下能够正常接收推送的消息,并向消息的生产者返回已接收消息的通知。如果消息中间件发生故障则不能正常的接收推送的消息也不会返回已接收消息的通知。因此,第一服务器会根据是否在推送第一消息后预设时长内接收到消息中间件返回的已接收第一消息的通知来判断消息中间件是否正常。如果第一服务器在预设时长内未接收到消息中间件返回的已接收第一消息的通知,则判定消息中间件异常。为了减少延迟,第一服务器会从数据库中查询服务器管理表,服务器管理表中记录了集群中所有服务器的服务IP地址和端口,第一服务器根据集群中其他服务器的IP地址和端口通过http请求的方式向其他服务器广播该第一消息。
其他服务器接收到该第一消息后其中的第二服务器会消费该第一消息。
在另一个实施例中,第一服务器可以通过消息中间件返回通知的时延来监测消息中间件的繁忙状态,如果消息中间件处于繁忙状态,也可以使用http请求方式对第一消息进行广播,避免对消息中间件带来更多的负担。
本实施例在消息中间件发生故障时通过http请求方式广播第一消息,进而使得消息中间件出故障时,依然能实时推送任意一台服务器上产生的消息到用户端,达到了解决突发状况的目的,减少了对消息中间件带来的负担,最大程度的保证了系统的可靠性。
在一个实施例中,步骤S300中若判定第一消息与已成功建立websocket链接的用户端相关则将消费到的第一消息通过对应websocket链接返回至相关用户端,包括:
第二服务器根据对应的用户端列表判断第一消息是否与已成功建立websocket链接的用户端相关,其中,用户端列表存储有与第二服务器成功建立websocket链接的用户端的链接信息;
若判定存在与第一消息相关的用户端,则第二服务器根据链接信息将第一消息通过对应的websocket链接返回至对应的相关用户端。
具体地,每个第二服务器可能与多个用户端建立websocket链接,因此,第二服务器会将已与自身建立websocket链接的用户端的链接信息记录到用户端列表中。链接信息包括了与websocket链接对应的用户端的用户唯一标识和对应websocket链接的链接标识等信息。如果第二服务器断开了与用户端的websocket链接,则第二服务器会将该断开连接的用户端的连接信息从用户端列表中移除。
第二服务器根据第一消息是否需要推送给已建立websocket链接的用户端来判断哪些用户端为相关用户端。并根据用户唯一标识和链接标识的对应关系将该第一消息通过对应的websocket链接推送给对应的相关用户端。无关的用户端,则不推送该第一消息。如果没有相关用户端,则第二服务器会丢弃该第一消息。
本实施例通过客户端列表管理多链接状态下的用户端链接信息,使得在多链接状态下也能够根据正确的websocket链接将第一消息推送给正确的用户端。
在一个实施例中,第一服务器与第二服务器为同一个服务器。
具体地,在没有消息产生的时候,第一服务器不会向消息中间件发送消息,也不会有多余的http请求。因此,不会因为实时通知增加系统的负担。虽然websocket链接为长连接,但是websocket长连接也不仅用于消息通知,第一服务器与第二服务器为同一个服务器,即产生消息的服务器和负载均衡分配用来响应用户请求的服务器是同一个服务器时,可以起到websocket链接复用的目的。例如,前端导入导出的进度通知可以复用websocket长链接。
参考图1,本申请还提供了一种消息通知系统,该系统包括负载均衡模块100、多个服务器和消息中间件300,其中,多个服务器包括第一服务器210和第二服务器220,多个服务器部署为集群;
负载均衡模块100,用于在接收到触发事件后通过负载均衡策略调度集群中的第一服务器210;
第一服务器210,用于根据触发事件生产第一消息,并将第一消息推送至消息中间件300;
集群中的第二服务器220,用于监听到消息中间件300中的第一消息后,消费第一消息,若判定第一消息与已成功建立websocket链接的用户端相关则将消费到的第一消息通过对应websocket链接返回至相关用户端400。
另外,多个服务器还可以包括其他服务器2nm等。
在一个实施例中,若触发事件为第三方通知消息,则第一服务器210,具体用于根据第三方通知消息生产第一消息;
若触发事件为触发任务,则第一服务器210,具体用于在执行完触发任务后生产第一消息。
在一个实施例中,消息中间件300,用于若监测到所有第二服务器220均已消费第一消息,则将第一消息从消息中间件300中移除。
在一个实施例中,第二服务器220,还用于在启动后根据对应的唯一标识生成对应的消费者编码,并根据消费者编码向消息中间件300申请注册为消费者,其中,唯一标识包括机器唯一标识,或,唯一标识包括机器唯一标识和对应后台实例的进程号。
在一个实施例中,唯一标识包括机器唯一标识和对应后台实例的进程号;
第二服务器220,具体用于在启动后根据对应的机器唯一标识和后台实例对应的进程号生成对应后台实例的消费者编码,并根据消费者编码向消息中间件300申请将对应后台实例注册为消费者;
消息中间件300,具体用于若监测到每个第二服务器220的每个后台实例均已消费第一消息,则将第一消息从消息中间件300中移除。
在一个实施例中,第一服务器210,还用于若第一服务器210未接收到消息中间件300返回的已接收第一消息的通知,则通过http请求向集群中其他服务器广播第一消息。
在一个实施例中,第二服务器220,具体用于根据对应的用户端列表判断第一消息是否与已成功建立websocket链接的用户端相关,其中,用户端列表存储有与第二服务器220成功建立websocket链接的用户端的链接信息,若判定存在与第一消息相关的用户端,则根据链接信息将第一消息通过对应的websocket链接返回至对应的相关用户端400。
在一个实施例中,第一服务器210与第二服务器220为同一个服务器。
本申请通过消息中间件对消息进行缓存,支持负载均衡调用任意数量的服务器处理不同任务,均能将消息准确推送至用户端,减小了负载均衡对任务分配的限制,有效克服现有技术多服务器分摊任务导致消息无法正确推送,为了消息能够正确推送要求服务器必须一致的局限性。另外,服务器从消息中间件中消费消息,有效减少了对集群的频繁访问压力,且大大提高了访问速度。
本申请支持任意触发事件发生时由负载均衡模块分配第一服务器生产消息,并将消息推送至消息中间件进行缓存等待集群中服务器消费,进而将消息正确地推送至相关用户端。
本申请消息中间件在监测到所有相关服务器消费了新产生的消息后会将消息及时移除,减少了消息对系统资源的占用,且保证了所有相关服务器都能够消费到消息,减少了消息的遗漏消费。
本申请支持服务器的单实例运行和多后台实例运行,通过为每个后台实例自动生成对应的消费者编码并将每个后台实例注册为消费者,使得同一个服务器能够通过正确的后台实例将消息通过对应的websocket链接推送给正确的用户端。
本申请在消息中间件发生故障或繁忙时能及时调用备选方案通过http请求的方式将消息广播给各个服务器,使得消息能够及时推送给相关用户端。保证了系统的可靠性,减少了对消息中间件的负担。
本申请支持处理用户请求的服务器和推送消息的服务器为同一个服务器,实现了websocket链接的复用。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
其中上述模块/单元中的“第一”和“第二”的意义仅在于将不同的模块/单元加以区分,并不用于限定哪个模块/单元的优先级更高或者其它的限定意义。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或模块的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或模块,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或模块,本申请中所出现的模块的划分,仅仅是一种逻辑上的划分,实际应用中实现时可以有另外的划分方式。
关于消息通知系统的具体限定可以参见上文中对于消息通知方法的限定,在此不再赘述。上述消息通知系统中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
图3为本申请一实施例中计算机设备的内部结构框图。该计算机设备具体可以是图1中的消息通知系统中的负载均衡模块100、消息中间件300、服务器中的一个。如图3所示,该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、输入装置和显示屏。其中,该计算机设备的处理器用于提供计算和控制能力。存储器包括存储介质和内存储器。存储介质可以是非易失性存储介质,也可以是易失性存储介质。存储介质存储有操作系统,还可存储有计算机可读指令,该计算机可读指令被处理器执行时,可使得处理器实现消息通知方法中对应的步骤。该内存储器为存储介质中的操作系统和计算机可读指令的运行提供环境。该内存储器中也可储存有计算机可读指令,该计算机可读指令被处理器执行时,可使得处理器执行消息通知方法中对应的步骤。该计算机设备的网络接口用于与外部服务器通过网络连接通信。计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机可读指令(例如计算机程序),处理器执行计算机可读指令时实现上述实施例中消息通知方法中对应的步骤,及对应步骤的其它扩展和相关步骤的延伸。
处理器可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable GateArray,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,处理器是计算机装置的控制中心,利用各种接口和线路连接整个计算机装置的各个部分。
存储器可用于存储计算机可读指令和/或模块,处理器通过运行或执行存储在存储器内的计算机可读指令和/或模块,以及调用存储在存储器内的数据,实现计算机装置的各种功能。存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、视频数据等)等。
存储器可以集成在处理器中,也可以与处理器分开设置。
本领域技术人员可以理解,图3中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机可读指令,计算机可读指令被处理器执行时实现上述实施例中消息通知方法中对应的步骤及对应步骤的其它扩展和相关步骤的延伸。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机可读指令来指示相关的硬件来完成,所述的计算机可读指令可存储于一计算机可读取存储介质中,该计算机可读指令在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双倍速率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。
以上仅为本申请的优选实施例,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。
Claims (8)
1.一种消息通知方法,其特征在于,所述方法包括:
负载均衡模块在接收到触发事件后通过负载均衡策略调度集群中的第一服务器;
所述第一服务器根据所述触发事件生产第一消息,并将所述第一消息推送至消息中间件;
所述集群中的第二服务器监听到所述消息中间件中的所述第一消息后,消费所述第一消息,若判定所述第一消息与已成功建立websocket链接的用户端相关则将消费到的所述第一消息通过对应websocket链接返回至相关用户端;
所述第一服务器根据所述触发事件生产第一消息,包括:
若所述触发事件为第三方通知消息,则所述第一服务器根据所述第三方通知消息生产第一消息;
若所述触发事件为触发任务,则所述第一服务器在执行完所述触发任务后生产第一消息。
2.根据权利要求1所述的方法,其特征在于,在所述消费所述第一消息之后,所述方法还包括:
若监测到所有第二服务器均已消费所述第一消息,则所述消息中间件将所述第一消息从所述消息中间件中移除。
3.根据权利要求2所述的方法,其特征在于,在所述集群中的第二服务器监听到所述消息中间件中的所述第一消息后,消费所述第一消息之前,所述方法还包括:
所述第二服务器在启动后根据对应的唯一标识生成对应的消费者编码,并根据所述消费者编码向所述消息中间件申请注册为消费者,其中,所述唯一标识包括机器唯一标识,或,所述唯一标识包括机器唯一标识和对应后台实例的进程号。
4.根据权利要求3所述的方法,其特征在于,所述唯一标识包括机器唯一标识和对应后台实例的进程号;
所述第二服务器在启动后根据对应的唯一标识生成对应的消费者编码,并根据所述消费者编码向所述消息中间件申请注册为消费者,包括:
所述第二服务器在启动后根据对应的机器唯一标识和后台实例对应的进程号生成对应后台实例的消费者编码,并根据所述消费者编码向所述消息中间件申请将对应后台实例注册为消费者;
所述若监测到所有第二服务器均已消费所述第一消息,则所述消息中间件将所述第一消息从所述消息中间件中移除,包括:
若监测到每个第二服务器的每个后台实例均已消费所述第一消息,则所述消息中间件将所述第一消息从所述消息中间件中移除。
5.根据权利要求1所述的方法,其特征在于,在所述将所述第一消息推送至消息中间件之后,所述方法还包括:
若所述第一服务器未接收到所述消息中间件返回的已接收所述第一消息的通知,则所述第一服务器通过http请求向集群中其他服务器广播所述第一消息。
6.根据权利要求4所述的方法,其特征在于,所述若判定所述第一消息与已成功建立websocket链接的用户端相关则将消费到的所述第一消息通过对应websocket链接返回至相关用户端,包括:
所述第二服务器根据对应的用户端列表判断所述第一消息是否与已成功建立websocket链接的用户端相关,其中,所述用户端列表存储有与所述第二服务器成功建立websocket链接的用户端的链接信息;
若判定存在与所述第一消息相关的用户端,则所述第二服务器根据所述链接信息将所述第一消息通过对应的websocket链接返回至对应的相关用户端。
7.一种消息通知系统,其特征在于,所述系统包括负载均衡模块、多个服务器和消息中间件,其中,所述多个服务器包括第一服务器和第二服务器,所述多个服务器部署为集群;
所述负载均衡模块,用于在接收到触发事件后通过负载均衡策略调度集群中的第一服务器;
所述第一服务器,用于根据所述触发事件生产第一消息,并将所述第一消息推送至消息中间件;
所述集群中的第二服务器,用于监听到所述消息中间件中的所述第一消息后,消费所述第一消息,若判定所述第一消息与已成功建立websocket链接的用户端相关则将消费到的所述第一消息通过对应websocket链接返回至相关用户端;
若所述触发事件为第三方通知消息,则所述第一服务器,具体用于根据所述第三方通知消息生产第一消息;
若所述触发事件为触发任务,则所述第一服务器,具体用于在执行完所述触发任务后生产第一消息。
8.根据权利要求7所述的系统,其特征在于,
所述消息中间件,用于若监测到所有第二服务器均已消费所述第一消息,则将所述第一消息从所述消息中间件中移除。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210709639.1A CN115037753B (zh) | 2022-06-22 | 2022-06-22 | 消息通知方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210709639.1A CN115037753B (zh) | 2022-06-22 | 2022-06-22 | 消息通知方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115037753A CN115037753A (zh) | 2022-09-09 |
CN115037753B true CN115037753B (zh) | 2023-10-27 |
Family
ID=83127399
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210709639.1A Active CN115037753B (zh) | 2022-06-22 | 2022-06-22 | 消息通知方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115037753B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108390881A (zh) * | 2018-02-27 | 2018-08-10 | 北京焦点新干线信息技术有限公司 | 一种分布式高并发实时消息推送方法及系统 |
CN109361770A (zh) * | 2018-12-11 | 2019-02-19 | 苏州创旅天下信息技术有限公司 | 基于WebSocket和消息队列实现双向实时通信的系统及方法 |
CN113055483A (zh) * | 2021-03-19 | 2021-06-29 | 中国工商银行股份有限公司 | 消息中间件数据处理方法、装置及系统 |
CN113452774A (zh) * | 2021-06-25 | 2021-09-28 | 睿视(苏州)视频科技有限公司 | 消息推送方法、装置、设备及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10693952B2 (en) * | 2017-10-23 | 2020-06-23 | Salesforce.Com, Inc. | Technologies for low latency messaging |
-
2022
- 2022-06-22 CN CN202210709639.1A patent/CN115037753B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108390881A (zh) * | 2018-02-27 | 2018-08-10 | 北京焦点新干线信息技术有限公司 | 一种分布式高并发实时消息推送方法及系统 |
CN109361770A (zh) * | 2018-12-11 | 2019-02-19 | 苏州创旅天下信息技术有限公司 | 基于WebSocket和消息队列实现双向实时通信的系统及方法 |
CN113055483A (zh) * | 2021-03-19 | 2021-06-29 | 中国工商银行股份有限公司 | 消息中间件数据处理方法、装置及系统 |
CN113452774A (zh) * | 2021-06-25 | 2021-09-28 | 睿视(苏州)视频科技有限公司 | 消息推送方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN115037753A (zh) | 2022-09-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110290180B (zh) | 分布式任务调度方法、装置、计算机设备和存储介质 | |
CN108600005A (zh) | 一种防御微服务雪崩效应的方法 | |
EP3542272B1 (en) | Systems and methods for providing a notification system architecture | |
CN112118315A (zh) | 数据处理系统、方法、装置、电子设备和存储介质 | |
CN109802986B (zh) | 设备管理方法、系统、装置及服务器 | |
WO2019210580A1 (zh) | 访问请求处理方法、装置、计算机设备和存储介质 | |
CN109766172B (zh) | 一种异步任务调度方法以及装置 | |
CN104601702B (zh) | 集群远程过程调用方法及系统 | |
WO2018094412A1 (en) | Systems and methods for providing a notification system architecture | |
CN106897299B (zh) | 一种数据库访问方法及装置 | |
CN112057846B (zh) | 云游戏服务调度的交互方法、装置、设备和存储介质 | |
WO2017185615A1 (zh) | 一种业务处理设备的业务状态确定方法及调度设备 | |
US8832215B2 (en) | Load-balancing in replication engine of directory server | |
US10802896B2 (en) | Rest gateway for messaging | |
CN112433863A (zh) | 微服务调用方法、装置、终端设备以及存储介质 | |
CN113206877A (zh) | 一种会话保持方法及装置 | |
CN111510493B (zh) | 分布式数据传输方法及装置 | |
CN112634122A (zh) | 一种云渲染方法、系统、计算机设备及可读存储介质 | |
CN111159233A (zh) | 分布式缓存方法、系统、计算机设备以及存储介质 | |
CN112506647A (zh) | 有状态服务器负载均衡的方法、系统、装置和存储介质 | |
US7519855B2 (en) | Method and system for distributing data processing units in a communication network | |
CN111586140A (zh) | 一种数据交互的方法及服务器 | |
CN113900774A (zh) | 云操作系统的虚拟机控制方法、装置以及存储介质 | |
CN116069493A (zh) | 一种数据处理方法、装置、设备以及可读存储介质 | |
CN111913792B (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 |