[go: up one dir, main page]

CN112052104A - 基于多机房实现的消息队列的管理方法及电子设备 - Google Patents

基于多机房实现的消息队列的管理方法及电子设备 Download PDF

Info

Publication number
CN112052104A
CN112052104A CN202010905108.0A CN202010905108A CN112052104A CN 112052104 A CN112052104 A CN 112052104A CN 202010905108 A CN202010905108 A CN 202010905108A CN 112052104 A CN112052104 A CN 112052104A
Authority
CN
China
Prior art keywords
message
machine room
target
message queue
queue
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.)
Pending
Application number
CN202010905108.0A
Other languages
English (en)
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.)
Ireader Technology Co Ltd
Original Assignee
Ireader 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 Ireader Technology Co Ltd filed Critical Ireader Technology Co Ltd
Priority to CN202010905108.0A priority Critical patent/CN112052104A/zh
Publication of CN112052104A publication Critical patent/CN112052104A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/548Queue

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer And Data Communications (AREA)

Abstract

本发明公开了一种基于多机房实现的消息队列的管理方法及电子设备,该方法包括:多个机房中的第一机房响应于与第一机房相对应的消息生产端触发的消息写入请求,将消息写入请求中包含的消息数据写入与第一机房相对应的消息队列,并将第一机房相对应的消息队列以及第一机房之间的队列机房映射关系存储到配置元数据中;多个机房中的第二机房响应于与第二机房相对应的消息消费端触发的消息消费请求,将与消息消费请求相对应的消息队列确定为目标消息队列,根据配置元数据将目标消息队列所在的机房确定为目标机房,将目标机房中的目标消息队列的消息数据传输至第二机房。该方式避免了跨机房生产消息所导致的延迟问题,适用于实时性较高的业务场景。

Description

基于多机房实现的消息队列的管理方法及电子设备
技术领域
本发明涉及计算机领域,具体涉及一种基于多机房实现的消息队列的管理方法及电子设备。
背景技术
消息队列用于将待传输的数据存储到队列中。其中,向队列中写入数据的业务端叫做消息生产端,从队列中读取数据的业务端叫做消息消费端。通过消息队列能够实现多个消息数据的有序存储,从而有利于实现消息的可靠传输。
随着业务场景的日益复杂,很多业务系统中包含多个机房,在跨机房的实现方案中,消息生产端需要预先确定消息消费端所处的机房,并且,当消息消费端与消息生产端分别位于不同机房时,为了保障消息消费端的消费顺畅,需要将消息生产端在第一机房生产的消息数据传输到消息消费端所在的第二机房进行存储。
但是,在实现本发明的过程中,发明人发现现有技术中的上述方案至少存在下述缺陷:一方面,在复杂的业务场景中,一个消息生产端可能对应于多个消息消费端,如何预先确定消息消费端的数量以及各个消息消费端所处的机房成为亟待解决的技术难题;另一方面,消息生产端需要将生成的消息数据跨机房传输至消息消费端所在的机房,然而,由于两个机房之间的线路原因或网络原因可能造成数据传输延迟等缺陷,在实时性要求较高的业务场景中无法适用。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的基于多机房实现的消息队列的管理方法及电子设备。
根据本发明的一个方面,提供了一种基于多机房实现的消息队列的管理方法,包括:
多个机房中的第一机房响应于与所述第一机房相对应的消息生产端触发的消息写入请求,将所述消息写入请求中包含的消息数据写入与所述第一机房相对应的消息队列,并将所述第一机房相对应的消息队列以及所述第一机房之间的队列机房映射关系存储到配置元数据中;
多个机房中的第二机房响应于与所述第二机房相对应的消息消费端触发的消息消费请求,将与所述消息消费请求相对应的消息队列确定为目标消息队列,根据所述配置元数据将所述目标消息队列所在的机房确定为目标机房,将所述目标机房中的所述目标消息队列的消息数据传输至所述第二机房,以供所述消息消费端消费。
根据本发明的另一方面,提供了一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行以下操作:
多个机房中的第一机房响应于与所述第一机房相对应的消息生产端触发的消息写入请求,将所述消息写入请求中包含的消息数据写入与所述第一机房相对应的消息队列,并将所述第一机房相对应的消息队列以及所述第一机房之间的队列机房映射关系存储到配置元数据中;
多个机房中的第二机房响应于与所述第二机房相对应的消息消费端触发的消息消费请求,将与所述消息消费请求相对应的消息队列确定为目标消息队列,根据所述配置元数据将所述目标消息队列所在的机房确定为目标机房,将所述目标机房中的所述目标消息队列的消息数据传输至所述第二机房,以供所述消息消费端消费。
根据本发明的又一方面,提供了一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使所述处理器执行以下操作:
多个机房中的第一机房响应于与所述第一机房相对应的消息生产端触发的消息写入请求,将所述消息写入请求中包含的消息数据写入与所述第一机房相对应的消息队列,并将所述第一机房相对应的消息队列以及所述第一机房之间的队列机房映射关系存储到配置元数据中;
多个机房中的第二机房响应于与所述第二机房相对应的消息消费端触发的消息消费请求,将与所述消息消费请求相对应的消息队列确定为目标消息队列,根据所述配置元数据将所述目标消息队列所在的机房确定为目标机房,将所述目标机房中的所述目标消息队列的消息数据传输至所述第二机房,以供所述消息消费端消费。
在本发明提供的基于多机房实现的消息队列的管理方法及电子设备中,将消息生产端产生的消息数据直接写入消息生产端所在的本机房中,无需确定消息消费端所在的机房,在消息生产过程中也无需执行跨机房的数据传输操作,从而提升了操作的实时性,避免了因网络抖动造成的影响;另外,当消息消费端消费数据时,根据预先记录的配置元数据中包含的队列机房映射关系确定待消费的消息队列所在的机房,从而异步获取数据以供消费。由此可见,该方式避免了预先确定消费端数量及其所在机房的繁琐操作,且避免了跨机房生产消息所导致的延迟问题,能够适用于实时性要求较高的业务场景中。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了本发明一个实施例提供的基于多机房实现的消息队列的管理方法的流程图;
图2示出了本发明另一个实施例提供的基于多机房实现的消息队列的管理方法的流程图;
图3示出了根据本发明另一个实施例的一种电子设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
实施例一
图1示出了本发明一个实施例提供的基于多机房实现的消息队列的管理方法的流程图。如图1所示,该方法包括以下步骤:
步骤S110:多个机房中的第一机房响应于与第一机房相对应的消息生产端触发的消息写入请求,将消息写入请求中包含的消息数据写入与第一机房相对应的消息队列,并将第一机房相对应的消息队列以及第一机房之间的队列机房映射关系存储到配置元数据中。
其中,本实施例中的多个机房是指:至少两个机房。相应地,多个机房中的第一机房可以是多个机房中的任一机房。具体地,每个机房分别对应于一个或多个服务。其中,一个服务可能对应于一个项目或一个应用,也可能对应于一个应用中的一种功能,本发明对此不做限定。各个机房所对应的服务既可能是消息生产端,也可能是消息消费端,还可能同时作为消息生产端以及消息消费端,具体取决于该服务当前执行的业务功能。
当一个服务用于产生消息数据时,该服务作为消息生产端向该服务所对应的机房发送消息写入请求,在本实施例中,将该发送消息写入请求的服务所对应的机房作为第一机房。实质上,对于任一机房而言,只要该机房对应的服务作为消息生产端触发了消息写入请求,该机房则被称作第一机房。
第一机房接收到本机房的服务发来的消息写入请求后,将消息写入请求中包含的消息数据写入与第一机房(即本机房)相对应的消息队列,并将第一机房相对应的消息队列以及第一机房之间的队列机房映射关系存储到配置元数据中。由此可见,任一机房接收到消息写入请求后,无需确定对应的消息消费端,直接将接收到的消息数据写入本机房所对应的消息队列即可。该方式无需经由跨机房的网络传输过程,因而能够大幅提升写入效率。
其中,与第一机房相对应的消息队列是指:存储在与第一机房相对应的存储空间内的消息队列。其中,与第一机房相对应的存储空间可以在第一机房本地的存储空间,也可以是与第一机房相连接的数据库中的存储空间,具体,与第一机房相对应的消息队列可以由第一机房中的队列服务器负责维护。
另外,队列机房映射关系用于存储消息生产端生产的消息队列以及该消息队列所在的机房之间的对应关系。当然,该队列机房映射关系还可以进一步存储消息生产端、消息生产端生产的消息队列以及该消息队列所在的机房之间的三元对应关系。配置元数据用于统一存储上述的队列机房映射关系,其中,配置元数据既可以统一存储在与各个机房分别相连的配置服务器中,也可以分别存储在各个机房中并由各个机房进行共享。
步骤S120:多个机房中的第二机房响应于与第二机房相对应的消息消费端触发的消息消费请求,将与消息消费请求相对应的消息队列确定为目标消息队列,根据配置元数据将目标消息队列所在的机房确定为目标机房,将目标机房中的目标消息队列的消息数据传输至第二机房,以供消息消费端消费。
具体地,多个机房中的第二机房可以是多个机房中的任一机房。由于每个机房分别对应于一个或多个服务,因此,当一个服务用于消费消息数据时,该服务作为消息消费端向该服务所对应的机房发送消息消费请求,在本实施例中,将该发送消息消费请求的服务所对应的机房作为第二机房。实质上,对于任一机房而言,只要该机房对应的服务作为消息消费端触发了消息消费请求,该机房则被称作第二机房。
第二机房接收到本机房的服务发来的消息消费请求后,首先,确定与消息消费请求相对应的消息队列,将其确定为目标消息队列;然后,查询配置元数据,根据查询结果确定目标消息队列所在的机房,将该机房确定为目标机房;最后,将目标机房中的目标消息队列的消息数据传输至第二机房,以供消息消费端在本地进行消费。由此可见,任一机房接收到消息消费请求后,根据配置元数据确定待消费的消息队列所在的机房,进而从该机房获取数据。
其中,目标机房可以是多个机房中的任一机房,例如,目标机房有可能是上述的第一机房,也可能是不同于第一机房和第二机房的第三机房,当然,还可能是第二机房本身,此时,直接在本机房内部获取消息数据即可。总之,本发明不限定目标消息队列以及目标机房的具体位置,完全取决于业务实际需求。另外,在将目标机房中的目标消息队列的消息数据传输至第二机房时,可通过两个机房之间的数据专线进行传输。
另外,还需要说明的是,上述的第一机房和第二机房可以是不同的机房,也可能是相同的机房,本发明对此不做限定。
由此可见,在本发明提供的基于多机房实现的消息队列的管理方法中,将消息生产端产生的消息数据直接写入消息生产端所在的本机房中,无需确定消息消费端所在的机房,在消息生产过程中也无需执行跨机房的数据传输操作,从而提升了操作的实时性,避免了因网络抖动造成的影响;另外,当消息消费端消费数据时,根据预先记录的配置元数据中包含的队列机房映射关系确定待消费的消息队列所在的机房,从而异步获取数据以供消费。由此可见,该方式避免了预先确定消费端数量及其所在机房的繁琐操作,且避免了跨机房生产消息所导致的延迟问题,能够适用于实时性要求较高的业务场景中。
实施例二
图2示出了本发明另一个实施例提供的基于多机房实现的消息队列的管理方法的流程图。如图2所示,该方法包括以下步骤:
步骤S200:分别在各个机房中设置代理模块,各个机房的代理模块共同维护配置元数据。
具体地,在多个机房的每个机房中分别设置一个代理模块,各个机房内部的代理模块用于处理来自各个服务的消息写入请求以及消息消费请求,并根据消息写入请求以及消息消费请求维护配置元数据。例如,消息写入请求中包含消息生产端、待写入的消息队列、以及消息生产端所在的机房的三元对应关系;消息消费请求中包含消息消费端、待消费的消息队列、以及消息消费端所在的机房的三元对应关系,由此可见,各个机房的代理模块在处理消息写入请求以及消息消费请求的过程中,能够建立并维护由服务(包括消息生产端以及消息消费端)、消息队列、机房构成的三元关系组,从而构成配置元数据,以便于后续处理。
具体实施时,各个机房的代理模块用于基于扩展协议实现针对各个服务发来的消息写入请求以及消息消费请求的处理,并在处理过程中通过解析消息内容获取并动态维护上述的三元关系组。
需要说明的是,本步骤为一个可选的步骤,在本发明其他的实施例中,也可以不设置代理模块,而通过改动机房内部源代码的方式实现维护配置元数据等相关功能,本发明对具体实现细节不做限定。
步骤S210:多个机房中的第一机房响应于与第一机房相对应的消息生产端触发的消息写入请求,将消息写入请求中包含的消息数据写入与第一机房相对应的消息队列,并将第一机房相对应的消息队列以及第一机房之间的队列机房映射关系存储到配置元数据中。
其中,本实施例中的多个机房是指:至少两个机房。相应地,多个机房中的第一机房可以是多个机房中的任一机房。具体地,每个机房分别对应于一个或多个服务。其中,一个服务可能对应于一个项目或一个应用,也可能对应于一个应用中的一种功能,本发明对此不做限定。各个机房所对应的服务既可能是消息生产端,也可能是消息消费端,还可能同时作为消息生产端以及消息消费端,具体取决于该服务当前执行的业务功能。
当一个服务用于产生消息数据时,该服务作为消息生产端向该服务所对应的机房发送消息写入请求,在本实施例中,将该发送消息写入请求的服务所对应的机房作为第一机房。实质上,对于任一机房而言,只要该机房对应的服务作为消息生产端触发了消息写入请求,该机房则被称作第一机房。第一机房接收到本机房的服务发来的消息写入请求后,将消息写入请求中包含的消息数据写入与第一机房(即本机房)相对应的消息队列,并将第一机房相对应的消息队列以及第一机房之间的队列机房映射关系存储到配置元数据中。由此可见,任一机房接收到消息写入请求后,无需确定对应的消息消费端,直接将接收到的消息数据写入本机房所对应的消息队列即可。该方式无需经由跨机房的网络传输过程,因而能够大幅提升写入效率。其中,与第一机房相对应的消息队列是指:存储在与第一机房相对应的存储空间内的消息队列。其中,与第一机房相对应的存储空间可以在第一机房本地的存储空间,也可以是与第一机房相连接的数据库中的存储空间,具体,与第一机房相对应的消息队列可以由第一机房中的队列服务器负责维护。
另外,队列机房映射关系用于存储消息生产端生产的消息队列以及该消息队列所在的机房之间的对应关系。当然,该队列机房映射关系还可以进一步存储消息生产端、消息生产端生产的消息队列以及该消息队列所在的机房之间的三元对应关系。配置元数据用于统一存储上述的队列机房映射关系。
其中,配置元数据可通过多种方式存储:例如,在一种可选的实现方式中,将来自各个机房的配置元数据统一存储在与各个机房分别相连的配置服务器中,由配置服务器统一维护来自各个机房的配置元数据,相应地,配置服务器能够实现针对配置元数据的去重、检验等功能,以确保配置元数据的准确性。又如,在又一种可选的实现方式中,将各个机房产生的配置元数据分别存储在各个机房中,并由各个机房进行共享,其中,为了便于实现各个机房之间的配置元数据的共享,可以由一个机房通过广播机制向其他机房请求与当前接收到的消息消费请求相关的配置元数据。
其中,在各个机房中设置有代理模块的前提下,本步骤由第一机房中的代理模块负责执行。具体地,代理模块负责针对接收到的消息写入请求进行解析,根据解析结果中包含的消息生产端标识(即服务标识)、待写入的消息队列标识以及本机房的机房标识构建三元关系组,从而根据三元关系组得到对应的配置元数据。
其中,为了方便通信,在本实施例中,各个服务都通过该服务所在的本机房发送各类请求数据,相应地,各个机房接收到的消息写入请求显然是由来自本机房的服务发送的,因此,在构建与消息写入请求相对应的三元关系组时,该三元关系组中包含的机房标识为本机房的标识、消息队列也是本机房的消息队列。
步骤S220:多个机房中的第二机房响应于与第二机房相对应的消息消费端触发的消息消费请求,将与消息消费请求相对应的消息队列确定为目标消息队列,根据配置元数据将目标消息队列所在的机房确定为目标机房。
具体地,多个机房中的第二机房可以是多个机房中的任一机房。由于每个机房分别对应于一个或多个服务,因此,当一个服务用于消费消息数据时,该服务作为消息消费端向该服务所对应的机房发送消息消费请求,在本实施例中,将该发送消息消费请求的服务所对应的机房作为第二机房。实质上,对于任一机房而言,只要该机房对应的服务作为消息消费端触发了消息消费请求,该机房则被称作第二机房。
其中,在各个机房中设置有代理模块的前提下,本步骤由第二机房中的代理模块负责执行。具体地,第二机房中的代理模块接收到本机房的服务发来的消息消费请求后,执行以下操作:
首先,解析该消息消费请求,以确定与消息消费请求相对应的消息队列(即待消费的消息队列),将其确定为目标消息队列。然后,查询配置元数据,根据查询结果确定目标消息队列所在的机房,将该机房确定为目标机房。由于配置元数据中记录了消息队列及其所在机房之间的对应关系,因此,基于配置元数据能够准确确定目标消息队列所在的机房,即目标机房。
其中,目标机房可以是多个机房中的任一机房,例如,目标机房有可能是上述的第一机房,也可能是不同于第一机房和第二机房的第三机房,当然,还可能是第二机房本身(此时,直接在第二机房的本机房内部获取消息数据即可)。总之,本发明不限定目标消息队列以及目标机房的具体位置,完全取决于业务实际需求。
步骤S230:将目标机房中的目标消息队列的消息数据传输至第二机房,以供消息消费端消费。
具体地,在确定出目标机房后,将目标机房中的目标消息队列的消息数据传输至第二机房,以供消息消费端在本地进行消费。由此可见,任一机房接收到消息消费请求后,根据配置元数据确定待消费的消息队列所在的机房,进而从该机房获取数据。
具体实施时,通过位于目标机房与第二机房之间的机房专线,将目标机房中的目标消息队列的消息数据传输至第二机房。其中,任意两个机房之间通过机房专线进行网络通信,因此,通过位于目标机房与第二机房之间的机房专线,即可将目标机房中的目标消息队列的消息数据传输至第二机房。
具体地,数据传输操作可通过第二机房向目标机房发送传输请求的方式进行触发,相应地,目标机房根据接收到的传输请求中包含的消息队列的标识,向第二机房返回该消息队列中的消息数据。
可选的,在本实施例中,为了提升消息数据的传输效率,分别在各个机房中设置同步模块,各个机房的同步模块与本机房中的代理模块相互通信,能够在代理模块的控制下进行数据同步操作。相应地,在将目标机房中的目标消息队列的消息数据传输至第二机房时,通过目标机房中的同步模块,将目标机房中的目标消息队列的消息数据传输至第二机房。
另外,发明人在实现本发明的过程中发现,消息消费端与待消费的消息队列之间通常具有固定的映射关系,例如,服务A、B均作为消费端消费第一消息队列中的消息,只要第一消息队列发生更新,则服务A、B则会作为消费端触发消息消费请求。另外,在服务A、B未发生机房迁移的前提下,服务A、B各自所在的机房也是固定的,例如,服务A在机房1,服务B在机房2,若第一消息队列位于机房3,则需要将位于机房3中的第一消息队列的内容分别传输至机房1和机房2。为了防止后续传输过程中的延迟,可以基于上述的对应关系,在监测到机房3中的第一消息队列发生更新时,将更新后的第一消息队列分别同步至机房1和机房2,以便于后续消费。
为了实现上述目的,在本实施例中,需要确定各个消费端与其待消费的消息队列之间的对应关系,为此,每当多个机房中的第二机房响应于与第二机房相对应的消息消费端触发的消息消费请求时,进一步根据与消息消费请求相对应的消息消费端、与消息消费请求相对应的目标消息队列以及与消息消费端相对应的第二机房标识,生成一组三元关系组,将该三元关系组添加到配置元数据中。由此可见,根据消息消费请求生成的三元关系组用于表示消息消费端、待消费的消息队列、消息消费端所在的机房之间的对应关系。根据该对应关系能够确定后续的同步方向。
相应地,为了提升同步效率,降低后续消费过程中的传输时延,任一机房中的同步模块进一步用于:将本机房中的任一消息队列确定为待同步消息队列,根据配置元数据中的三元关系组确定待同步消息队列的各个消息消费端所对应的机房,并将待同步消息队列中的消息数据同步至各个消息消费端所对应的机房。具体地,各个机房中的同步模块可以定时轮询本机房中的各个消息队列是否发生更新,并在任一消息队列发生更新时,根据配置元数据中的三元关系组确定与该更新后的消息队列相对应的消费端及其所在的机房,进而将该更新后的消息队列同步至消费端所在的机房。
另外,虽然上述的三元关系组能够存储消息消费端、待消费的消息队列以及消息消费端所在的机房标识之间的对应关系,但是,发明人在实现本发明的过程中发现,消息消费端与待消费的消息队列之间的关系可能发生变化,且消息消费端所在的机房也可能因机房迁移操作而发生改变,因此,为了适应上述变化,本实施例中的三元关系组能够动态更新,例如,能够根据接收到的消息消费端在切换机房后触发的消息消费请求进行动态更新,还能够根据消息消费端增加新的待消费的消息队列时进行动态更新。
为了感知三元关系组中的对应关系的变化情况,在本实施例中,每当多个机房中的第二机房根据消息消费请求生成一组三元关系组之后,进一步判断配置元数据中是否已存储有与该消息消费请求中包含的消息消费端相对应的三元关系组,若有,进一步获取已存储的与该消息消费请求中包含的消息消费端相对应的三元关系组中的机房信息,将获取的机房信息与本次生成的三元关系组中的机房信息进行比较,根据比较结果判断该消息消费请求中包含的消息消费端是否发生机房迁移。例如,若获取的机房信息与本次生成的三元关系组中的机房信息不一致,则确定该消息消费请求中包含的消息消费端发生了机房迁移。在判断出机房迁移的情况下,需要从配置元数据中删除迁移前所对应的三元关系组,仅保留迁移后对应的三元关系组,从而实现对应关系的动态更新。
同理,每当多个机房中的第二机房根据消息消费请求生成一组三元关系组之后,进一步判断配置元数据中是否已存储有与该消息消费请求中包含的消息消费端相对应的三元关系组,若有,进一步获取已存储的与该消息消费请求中包含的消息消费端相对应的三元关系组中的待消费的消息队列的信息,将获取的消息队列的信息与本次生成的三元关系组中的消息队列的信息进行比较,根据比较结果判断该消息消费请求中包含的消息消费端是否增加了新的待消费消息队列,若是,则在配置元数据中新增上述的对应关系。
总而言之,本实施例中的配置元数据能够根据各次接收到的消息消费请求进行动态更新,以动态维护各个消息消费端当前所属的机房以及各个消息消费端对应的待消费消息队列。相应地,各个机房中的同步模块基于动态变化的配置元数据,动态确定本机房中的各个消息队列所对应的各个消息消费端及其对应的机房,以便将消息队列中的消息数据同步至各个消息消费端所对应的机房。例如,某机房中存储有消息队列M,相应地,该机房的同步模块通过分析配置元数据,确定消息队列M的消费端共有两个,分别为位于机房1的第一消费端,以及位于机房2的第二消费端,则该同步模块在消息队列M发生更新后,将更新内容同步至机房1以及机房2,以便为后续的消费过程提供便利。
具体同步时,同步模块代替消息队列的消费端进行消费,并将消费后的数据写入待同步的机房。例如,同步模块代替消息队列M的消费端消费消息队列M中的数据,并将消费后的数据内容分别写入机房1和机房2。
在一个具体的示例中,消息生产端对应于实时服务,消息消费端对应于与实时服务相关联的非实时服务。由于实时服务的实时性要求较高,因此,无论作为消息生产端的服务位于哪个机房,都直接在该机房本地写入消息队列,从而避免了通过机房专线跨机房传输的延迟和抖动问题,并且,也无需关心消费端所在的机房位置,尤其适用于服务数量众多的复杂业务场景。由于消息消费端对应于非实时服务,因此,经由机房专线实现的数据传输过程不会对业务造成影响。
例如,当本实施例中的方式应用于电子书应用时,消息生产端可以为电子书中的领取书籍服务,当用户领取书籍后,在对应的消息队列中新增一条数据记录,以记录用户与领取的书籍之间的对应关系,由于领书操作的实时性较高,为了避免用户长时间等待领书操作的结果反馈,通过将数据记录写入领取书籍服务所在的本地机房的方式提升响应速度,避免用户长时间等待。相应地,消息消费端可以为电子书中的积分更新服务,当用户领取书籍后,用户积分随之更新,由于积分更新的操作可以异步完成,因此,将消费过程设计为通过机房专线实现的跨机房传输方式不会对用户的使用造成影响,从而有效解决了电子书应用中的实时服务卡顿的问题。
另外,在一个具体示例中,消息队列可基于高级消息队列协议(AMQP)实现,例如,可以采用RabbitMQ实现。其中,同步模块可通过同步开关进行控制,当同步开关开启时,能够实现同步服务;当同步开关关闭时,则暂时不进行同步服务,通过在各个机房中设置用于控制各个同步模块的同步开关,能够根据业务情况灵活确定是否进行消息队列的同步操作,从而能够在业务繁忙时暂停同步操作,而在业务空闲时进行同步操作,从而将同步操作对业务系统的影响降至最低。
本实施例中的方式尤其适用于跨项目生产场景,生产端和消费端的数量众多,且一个生产端可能对应于多个消费端,且一个消费端也可能对应于多个生产端,在这种复杂的业务场景中,很难预先确定生产的消息队列所对应的消费端的数量以及各个消费端所在的机房,因此,通过由代理模块动态维护配置元数据的方式能够很好地解决上述问题,并且,在消费端切换机房后,配置元数据能够自动实现动态更新,从而不受机房切换的影响,及时将消息数据同步至切换后的机房进行消费。
其中,本实施例中的代理模块也可以称作代理组件或代理元件,具体可通过软件编程方式实现,或者也可以通过硬件方式实现,本发明对此不做限定。同理,本实施例中的同步模块也可以称作同步组件或同步元件,具体可通过软件编程方式实现,或者也可以通过硬件方式实现,本发明对此不做限定。
综上可知,本实施例中的方式避免了预先确定消费端数量及其所在机房的繁琐操作,且避免了跨机房生产消息所导致的延迟问题,能够适用于实时性要求较高的业务场景中。通过设置代理模块,能够将消息处理过程由代理模块接管,从而便于统一维护配置元数据。并且,基于配置元数据能够确定各个消息队列所对应的消费端及其所在的机房,进而由同步模块提前完成同步操作,从而提升后续消费的效率。
实施例三
本申请实施例提供了一种非易失性计算机存储介质,所述计算机存储介质存储有至少一可执行指令,该计算机可执行指令可执行上述任意方法实施例中的基于多机房实现的消息队列的管理方法。
可执行指令具体可以用于使得处理器执行以下操作:
多个机房中的第一机房响应于与所述第一机房相对应的消息生产端触发的消息写入请求,将所述消息写入请求中包含的消息数据写入与所述第一机房相对应的消息队列,并将所述第一机房相对应的消息队列以及所述第一机房之间的队列机房映射关系存储到配置元数据中;
多个机房中的第二机房响应于与所述第二机房相对应的消息消费端触发的消息消费请求,将与所述消息消费请求相对应的消息队列确定为目标消息队列,根据所述配置元数据将所述目标消息队列所在的机房确定为目标机房,将所述目标机房中的所述目标消息队列的消息数据传输至所述第二机房,以供所述消息消费端消费。
在一种可选的实现方式中,可执行指令具体可以用于使得处理器执行以下操作:分别在各个机房中设置代理模块,各个机房的代理模块共同维护所述配置元数据;则所述将所述消息写入请求中包含的消息数据写入与所述第一机房相对应的消息队列,并将所述第一机房相对应的消息队列以及所述第一机房之间的队列机房映射关系存储到配置元数据中的步骤由第一机房中的代理模块执行;且所述将与所述消息消费请求相对应的消息队列确定为目标消息队列,根据所述配置元数据将所述目标消息队列所在的机房确定为目标机房的步骤由第二机房中的代理模块执行。
在一种可选的实现方式中,可执行指令具体可以用于使得处理器执行以下操作:分别在各个机房中设置同步模块,各个同步模块与本机房中的代理模块相互通信;则所述将所述目标机房中的所述目标消息队列的消息数据传输至所述第二机房包括:通过所述目标机房中的同步模块,将所述目标机房中的目标消息队列的消息数据传输至第二机房。
在一种可选的实现方式中,可执行指令具体可以用于使得处理器执行以下操作:根据与所述消息消费请求相对应的消息消费端、与所述消息消费请求相对应的目标消息队列以及与所述消息消费端相对应的第二机房标识,生成一组三元关系组,将所述三元关系组添加到所述配置元数据中。
在一种可选的实现方式中,可执行指令具体可以用于使得处理器执行以下操作:所述同步模块将本机房中的任一消息队列确定为待同步消息队列,根据所述配置元数据中的三元关系组确定所述待同步消息队列的各个消息消费端所对应的机房,并将所述待同步消息队列中的消息数据同步至所述各个消息消费端所对应的机房。
在一种可选的实现方式中,所述三元关系组用于存储消息消费端、待消费的消息队列以及所述消息消费端所在的机房标识之间的对应关系;并且,所述三元关系组能够根据接收到的消息消费端在切换机房后触发的消息消费请求进行动态更新。
在一种可选的实现方式中,可执行指令具体可以用于使得处理器执行以下操作:
通过位于所述目标机房与所述第二机房之间的机房专线,将所述目标机房中的目标消息队列的消息数据传输至所述第二机房。
在一种可选的实现方式中,所述消息生产端对应于实时服务,所述消息消费端对应于与所述实时服务相关联的非实时服务。
实施例四
图3示出了根据本发明另一个实施例的一种电子设备的结构示意图,本发明具体实施例并不对电子设备的具体实现做限定。
如图3所示,该电子设备可以包括:处理器(processor)302、通信接口(Communications Interface)304、存储器(memory)306、以及通信总线308。
其中:处理器302、通信接口304、以及存储器306通过通信总线308完成相互间的通信。通信接口304,用于与其它设备比如客户端或其它服务器等的网元通信。处理器302,用于执行程序310,具体可以执行上述基于多机房实现的消息队列的管理方法实施例中的相关步骤。
具体地,程序310可以包括程序代码,该程序代码包括计算机操作指令。
处理器302可能是中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。电子设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。
存储器306,用于存放程序310。存储器306可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
程序310具体可以用于使得处理器302执行以下操作:
多个机房中的第一机房响应于与所述第一机房相对应的消息生产端触发的消息写入请求,将所述消息写入请求中包含的消息数据写入与所述第一机房相对应的消息队列,并将所述第一机房相对应的消息队列以及所述第一机房之间的队列机房映射关系存储到配置元数据中;
多个机房中的第二机房响应于与所述第二机房相对应的消息消费端触发的消息消费请求,将与所述消息消费请求相对应的消息队列确定为目标消息队列,根据所述配置元数据将所述目标消息队列所在的机房确定为目标机房,将所述目标机房中的所述目标消息队列的消息数据传输至所述第二机房,以供所述消息消费端消费。
在一种可选的实现方式中,可执行指令具体可以用于使得处理器执行以下操作:分别在各个机房中设置代理模块,各个机房的代理模块共同维护所述配置元数据;则所述将所述消息写入请求中包含的消息数据写入与所述第一机房相对应的消息队列,并将所述第一机房相对应的消息队列以及所述第一机房之间的队列机房映射关系存储到配置元数据中的步骤由第一机房中的代理模块执行;且所述将与所述消息消费请求相对应的消息队列确定为目标消息队列,根据所述配置元数据将所述目标消息队列所在的机房确定为目标机房的步骤由第二机房中的代理模块执行。
在一种可选的实现方式中,可执行指令具体可以用于使得处理器执行以下操作:分别在各个机房中设置同步模块,各个同步模块与本机房中的代理模块相互通信;则所述将所述目标机房中的所述目标消息队列的消息数据传输至所述第二机房包括:通过所述目标机房中的同步模块,将所述目标机房中的目标消息队列的消息数据传输至第二机房。
在一种可选的实现方式中,可执行指令具体可以用于使得处理器执行以下操作:根据与所述消息消费请求相对应的消息消费端、与所述消息消费请求相对应的目标消息队列以及与所述消息消费端相对应的第二机房标识,生成一组三元关系组,将所述三元关系组添加到所述配置元数据中。
在一种可选的实现方式中,可执行指令具体可以用于使得处理器执行以下操作:所述同步模块将本机房中的任一消息队列确定为待同步消息队列,根据所述配置元数据中的三元关系组确定所述待同步消息队列的各个消息消费端所对应的机房,并将所述待同步消息队列中的消息数据同步至所述各个消息消费端所对应的机房。
在一种可选的实现方式中,所述三元关系组用于存储消息消费端、待消费的消息队列以及所述消息消费端所在的机房标识之间的对应关系;并且,所述三元关系组能够根据接收到的消息消费端在切换机房后触发的消息消费请求进行动态更新。
在一种可选的实现方式中,可执行指令具体可以用于使得处理器执行以下操作:
通过位于所述目标机房与所述第二机房之间的机房专线,将所述目标机房中的目标消息队列的消息数据传输至所述第二机房。
在一种可选的实现方式中,所述消息生产端对应于实时服务,所述消息消费端对应于与所述实时服务相关联的非实时服务。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

Claims (10)

1.一种基于多机房实现的消息队列的管理方法,包括:
多个机房中的第一机房响应于与所述第一机房相对应的消息生产端触发的消息写入请求,将所述消息写入请求中包含的消息数据写入与所述第一机房相对应的消息队列,并将所述第一机房相对应的消息队列以及所述第一机房之间的队列机房映射关系存储到配置元数据中;
多个机房中的第二机房响应于与所述第二机房相对应的消息消费端触发的消息消费请求,将与所述消息消费请求相对应的消息队列确定为目标消息队列,根据所述配置元数据将所述目标消息队列所在的机房确定为目标机房,将所述目标机房中的所述目标消息队列的消息数据传输至所述第二机房,以供所述消息消费端消费。
2.根据权利要求1所述的方法,其中,所述方法执行之前,进一步包括:分别在各个机房中设置代理模块,各个机房的代理模块共同维护所述配置元数据;
则所述将所述消息写入请求中包含的消息数据写入与所述第一机房相对应的消息队列,并将所述第一机房相对应的消息队列以及所述第一机房之间的队列机房映射关系存储到配置元数据中的步骤由第一机房中的代理模块执行;
且所述将与所述消息消费请求相对应的消息队列确定为目标消息队列,根据所述配置元数据将所述目标消息队列所在的机房确定为目标机房的步骤由第二机房中的代理模块执行。
3.根据权利要求2所述的方法,其中,所述方法执行之前,进一步包括:分别在各个机房中设置同步模块,各个同步模块与本机房中的代理模块相互通信;
则所述将所述目标机房中的所述目标消息队列的消息数据传输至所述第二机房包括:通过所述目标机房中的同步模块,将所述目标机房中的目标消息队列的消息数据传输至第二机房。
4.根据权利要求3所述的方法,其中,所述多个机房中的第二机房响应于与所述第二机房相对应的消息消费端触发的消息消费请求进一步包括:
根据与所述消息消费请求相对应的消息消费端、与所述消息消费请求相对应的目标消息队列以及与所述消息消费端相对应的第二机房标识,生成一组三元关系组,将所述三元关系组添加到所述配置元数据中。
5.根据权利要求4所述的方法,其中,所述方法进一步包括:所述同步模块将本机房中的任一消息队列确定为待同步消息队列,根据所述配置元数据中的三元关系组确定所述待同步消息队列的各个消息消费端所对应的机房,并将所述待同步消息队列中的消息数据同步至所述各个消息消费端所对应的机房。
6.根据权利要求4或5所述的方法,其中,所述三元关系组用于存储消息消费端、待消费的消息队列以及所述消息消费端所在的机房标识之间的对应关系;并且,所述三元关系组能够根据接收到的消息消费端在切换机房后触发的消息消费请求进行动态更新。
7.根据权利要求1-6任一所述的方法,其中,所述将所述目标机房中的所述目标消息队列的消息数据传输至所述第二机房包括:
通过位于所述目标机房与所述第二机房之间的机房专线,将所述目标机房中的目标消息队列的消息数据传输至所述第二机房。
8.根据权利要求1-7任一所述的方法,其中,所述消息生产端对应于实时服务,所述消息消费端对应于与所述实时服务相关联的非实时服务。
9.一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如权利要求1-8任一所述的方法。
10.一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如权利要求1-8任一所述的方法。
CN202010905108.0A 2020-09-01 2020-09-01 基于多机房实现的消息队列的管理方法及电子设备 Pending CN112052104A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010905108.0A CN112052104A (zh) 2020-09-01 2020-09-01 基于多机房实现的消息队列的管理方法及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010905108.0A CN112052104A (zh) 2020-09-01 2020-09-01 基于多机房实现的消息队列的管理方法及电子设备

Publications (1)

Publication Number Publication Date
CN112052104A true CN112052104A (zh) 2020-12-08

Family

ID=73607282

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010905108.0A Pending CN112052104A (zh) 2020-09-01 2020-09-01 基于多机房实现的消息队列的管理方法及电子设备

Country Status (1)

Country Link
CN (1) CN112052104A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113794757A (zh) * 2021-08-31 2021-12-14 百融至信(北京)征信有限公司 一种基于rabbitmq的redis cluster异地同步方法及系统
CN117950888A (zh) * 2024-03-25 2024-04-30 民航成都电子技术有限责任公司 机场消息管理方法、装置、介质及计算设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108256002A (zh) * 2017-12-31 2018-07-06 广东欧珀移动通信有限公司 跨机房数据同步方法、装置、系统以及服务器
CN108347477A (zh) * 2018-01-24 2018-07-31 广东欧珀移动通信有限公司 数据发送方法、装置以及服务器
CN110740145A (zh) * 2018-07-18 2020-01-31 北京京东尚科信息技术有限公司 消息消费方法、装置、存储介质及电子设备
WO2020140661A1 (zh) * 2019-01-04 2020-07-09 深圳壹账通智能科技有限公司 数据同步方法和系统

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108256002A (zh) * 2017-12-31 2018-07-06 广东欧珀移动通信有限公司 跨机房数据同步方法、装置、系统以及服务器
CN108347477A (zh) * 2018-01-24 2018-07-31 广东欧珀移动通信有限公司 数据发送方法、装置以及服务器
CN110740145A (zh) * 2018-07-18 2020-01-31 北京京东尚科信息技术有限公司 消息消费方法、装置、存储介质及电子设备
WO2020140661A1 (zh) * 2019-01-04 2020-07-09 深圳壹账通智能科技有限公司 数据同步方法和系统

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113794757A (zh) * 2021-08-31 2021-12-14 百融至信(北京)征信有限公司 一种基于rabbitmq的redis cluster异地同步方法及系统
CN113794757B (zh) * 2021-08-31 2024-03-19 百融至信(北京)科技有限公司 一种基于rabbitmq的redis cluster异地同步方法及系统
CN117950888A (zh) * 2024-03-25 2024-04-30 民航成都电子技术有限责任公司 机场消息管理方法、装置、介质及计算设备

Similar Documents

Publication Publication Date Title
CN106878376B (zh) 一种配置管理方法与系统
CN110795503A (zh) 分布式存储系统的多集群数据同步方法及相关装置
CN110196843B (zh) 一种基于容器集群的文件分发方法及容器集群
CN113094430B (zh) 一种数据处理方法、装置、设备以及存储介质
CN116800616B (zh) 虚拟化网络设备的管理方法及相关装置
CN106775498A (zh) 一种缓存数据同步方法及系统
CN112052104A (zh) 基于多机房实现的消息队列的管理方法及电子设备
JP4208506B2 (ja) 高性能記憶装置アクセス環境
CN114461593B (zh) 日志写入方法及其装置、电子设备及存储介质
CN114285695B (zh) 通信方法、装置、设备、系统和存储介质
CN112148206A (zh) 一种数据读写方法、装置、电子设备及介质
CN112187916B (zh) 一种跨系统的数据同步方法与装置
CN112363980A (zh) 一种分布式系统的数据处理方法及装置
WO2024040902A1 (zh) 数据访问方法、分布式数据库系统及计算设备集群
CN117435569A (zh) 缓存系统动态扩容方法、装置、设备、介质和程序产品
CN115454666A (zh) 消息队列集群间的数据同步方法和装置
CN113051244B (zh) 数据访问方法和装置、数据获取方法和装置
CN116225742A (zh) 一种消息分发方法、设备以及存储介质
CN115629909A (zh) 业务数据处理的方法、装置、电子设备和存储介质
CN113886500A (zh) 一种数据处理方法、装置、服务器以及存储介质
CN112068972A (zh) 基于多机房实现的消息队列的消费方法及电子设备
CN111371884A (zh) 局域网内的数据处理方法、客户机、介质、请求端及系统
CN114745438B (zh) 多数据中心的缓存数据处理方法、装置、系统和电子设备
CN112578996B (zh) 一种存储系统的元数据的发送方法及存储系统
CN109005059A (zh) 一种实现Redis自动备份的系统及方法

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