CN110399236A - 消息队列的适配方法、装置、介质及电子设备 - Google Patents
消息队列的适配方法、装置、介质及电子设备 Download PDFInfo
- Publication number
- CN110399236A CN110399236A CN201910675713.0A CN201910675713A CN110399236A CN 110399236 A CN110399236 A CN 110399236A CN 201910675713 A CN201910675713 A CN 201910675713A CN 110399236 A CN110399236 A CN 110399236A
- Authority
- CN
- China
- Prior art keywords
- message
- queue
- currently used
- processing
- unified
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 155
- 230000006978 adaptation Effects 0.000 title claims abstract description 24
- 238000012545 processing Methods 0.000 claims abstract description 179
- 230000005540 biological transmission Effects 0.000 claims abstract description 73
- 238000012544 monitoring process Methods 0.000 claims abstract description 64
- 230000008569 process Effects 0.000 claims description 38
- 238000004590 computer program Methods 0.000 claims description 14
- 230000003044 adaptive effect Effects 0.000 claims description 8
- 238000011161 development Methods 0.000 abstract description 3
- 238000013459 approach Methods 0.000 description 32
- 238000013461 design Methods 0.000 description 8
- 238000003672 processing method Methods 0.000 description 7
- 238000010586 diagram Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- RYGMFSIKBFXOCR-UHFFFAOYSA-N Copper Chemical compound [Cu] RYGMFSIKBFXOCR-UHFFFAOYSA-N 0.000 description 1
- 241000283973 Oryctolagus cuniculus Species 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 239000000470 constituent Substances 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000005611 electricity Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明实施例提供了一种消息队列的适配方法、装置、介质以及电子设备,所述消息队列的适配方法包括:调用统一的消息发送接口以进行消息的发送,所述统一的消息发送接口以与当前使用的消息队列相对应的消息发送方式向当前使用的消息队列发送消息;调用统一的消息监听处理接口以进行消息的监听,所述统一的消息监听处理接口以与当前使用的消息队列相对应的消息监听方式从当前使用的消息队列中监听消息。本发明实现了不同消息队列之间的无缝切换,降低了因不同业务应用场景需求选择不同消息队列而带来的编码成本,同时提高了应用程序的开发效率。
Description
技术领域
本发明涉及消息队列技术领域,具体而言,涉及一种消息队列的适配方法、装置、介质以及电子设备。
背景技术
消息队列由于具有异步解耦、提高***并发处理能力等优点,已在分布式***中广泛使用。消息队列通常具有两种模式:点对点(Queue)模式和发布/订阅(Topic)模式;在前一种模式下,消息发送者生产消息并且发送到Queue中,然后消息接收者从Queue中取出并且消费(处理)消息;而在后一种模式下,消息发送者将消息发布到Topic中,由多个消息接收者订阅(消费/处理)该消息。
目前市面上的消息队列中间件种类繁多,包括但不限于KAFKA、ACTIVE MQ、RABBITMQ、SOFA MQ、ROCKET MQ和TENCENT MQ等等。每种消息队列的特点不同,其中有的注重效率、有的注重稳定性、而有的支持分布式事务。因此,在不同的业务应用场景中,应用开发人员往往会根据实际需求选择不同类别的消息队列。然而,不同的消息队列在消息发送、消息监听以及消息处理上均有着各自不同的代码实现方式,应用开发人员通常需要采用不同的代码注解来实现对不同消息队列的使用,对于应用开发人员来说很容易产生混淆,难以做到不同消息队列之间的无缝切换。
发明内容
为解决上述现有技术中存在的问题,根据本发明的一个实施例,提供一种消息队列的适配方法,包括:调用统一的消息发送接口以进行消息的发送,所述统一的消息发送接口以与当前使用的消息队列相对应的消息发送方式向当前使用的消息队列发送消息;调用统一的消息监听处理接口以进行消息的监听,所述统一的消息监听处理接口以与当前使用的消息队列相对应的消息监听方式从当前使用的消息队列中监听消息。
上述方法中,所述统一的消息发送接口以与当前使用的消息队列相对应的消息发送方式向当前使用的消息队列发送消息包括:所述统一的消息发送接口确定当前使用的消息队列,以及调用与当前使用的消息队列相对应的消息发送操作过程向当前使用的消息队列发送消息。
上述方法中,所述统一的消息监听处理接口以与当前使用的消息队列相对应的消息监听方式从当前使用的消息队列中监听消息包括:所述统一的消息监听处理接口确定当前使用的消息队列,以及调用与当前使用的消息队列相对应的消息监听操作过程从当前使用的消息队列中监听消息。
上述方法中,所述统一的消息发送接口为消息发送超类;所述统一的消息监听处理接口为消息监听处理超类。
在调用统一的消息监听处理接口以进行消息的监听之前,上述方法还可以包括:调用统一的用于注册消息监听处理操作过程的入口以注册消息监听处理操作过程,所述消息监听处理操作过程用于对监听到的消息进行处理。
上述方法还可以包括:所述与当前使用的消息队列相对应的消息监听操作过程在监听到消息时,针对监听到的消息调用处理消息操作过程,所述处理消息操作过程用于调用已注册的消息监听处理操作过程,以对监听到的消息进行处理。
上述方法中,所述处理消息操作过程还用于对于处理失败的消息,调用所述与当前使用的消息队列相对应的消息发送操作过程向当前使用的消息队列重新发送该处理失败的消息。
根据本发明的一个实施例,还提供一种消息队列的适配装置,包括:消息发送模块,用于调用统一的消息发送接口以进行消息的发送,所述统一的消息发送接口以与当前使用的消息队列相对应的消息发送方式向当前使用的消息队列发送消息;消息监听处理模块,用于调用统一的消息监听处理接口以进行消息的监听,所述统一的消息监听处理接口以与当前使用的消息队列相对应的消息监听方式从当前使用的消息队列中监听消息。
根据本发明的一个实施例,还提供一种计算机可读介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述消息队列的适配方法。
根据本发明的一个实施例,还提供一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个计算机程序,当所述一个或多个计算机程序被所述一个或多个处理器执行时,使得所述电子设备实现上述消息队列的适配方法。
本发明实施例提供的技术方案包括如下的有益效果:
应用开发人员可以实现消息的发送、监听、处理而无需知道底层消息队列的差异,降低了因不同业务应用场景需求选择不同消息队列而带来的编码成本,同时提高了应用程序的开发效率,实现了不同消息队列之间的无缝切换。另外,本发明在消息处理失败之后还进行消息重做,保证了消息的成功处理。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1示意性示出了根据本发明一个实施例的消息队列的处理方法的流程图;
图2示意性示出了根据本发明一个实施例的实现统一的消息发送接口的类图;
图3示意性示出了根据本发明一个实施例的用于注册消息监听处理方法的步骤的流程图;
图4示意性示出了根据本发明一个实施例的实现统一的消息监听处理接口的类图;
图5示意性示出了根据本发明一个实施例的消息队列的适配方法的流程图;
图6示意性示出了根据本发明另一个实施例的消息队列的适配方法的流程图;
图7示意性示出了根据本发明一个实施例的消息队列的适配装置的框图;
图8示意性示出了适于用来实现本发明实施例的电子设备的计算机***的结构示意图。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本发明将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本发明的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本发明的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本发明的各方面。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
根据本发明的一个实施例,提供一种消息队列的处理方法,其中消息队列采用Topic模式(即发布/订阅模式)。图1示意性地示出了该消息队列的处理方法的流程图,下面参照图1描述该消息队列的处理方法的各个步骤:
步骤S101.针对多个消息队列中的每个消息队列,构造相对应的消息发送方法(或称消息发送操作过程)。
根据本发明的一个实施例,对于每个消息队列(如KAFKA、ACTIVE MQ或者TENCENTMQ等),设计相对应的消息发送类,并且在该类中设计一个方法(例如,消息发送方法)以实现向该消息队列进行消息发送的程序逻辑。
步骤S102.构建统一的消息发送接口,包括如下子步骤:
步骤S1021.如图2所示,设计一个消息发送超类来实现统一的消息发送接口,并且将步骤S101中对于每个消息队列所设计的类(即步骤S101中的消息发送类)作为该消息发送超类的子类,例如图2中示出的KAFKA消息发送子类、ACTIVE MQ消息发送子类和TENCENTMQ消息发送子类(分别对应KAFKA、ACTIVE MQ和TENCENT MQ消息队列)。
步骤S1022.在消息发送超类中设计发送消息方法(或称发送消息操作过程),该发送消息方法用于实现如下过程:
确定当前使用的消息队列(例如KAFKA消息队列);调用与当前使用的消息队列相对应的消息发送子类(例如KAFKA消息发送子类)中的消息发送方法,完成向当前使用的消息队列的消息发送(应注意,在Topic模式下,发送的消息存储在Topic中)。通常,消息队列的配置管理员在部署/更换消息队列之后,会将当前使用的消息队列的相关信息(如消息队列的名称等)记录下来。根据本发明的一个实施例,配置管理员将当前使用的消息队列的相关信息以注解的方式记录在配置文件中(该配置文件可以存储在电子设备中),并且在更换消息队列时修改配置文件中记载的消息队列的相关信息。据此,通过查询配置文件中的注解就可以得到当前使用的消息队列的相关信息,并且根据该相关信息可以确定出当前使用的消息队列,例如是KAFKA、ACTIVE MQ、TENCENT MQ等消息队列中的一种。
消息发送超类中的发送消息方法除了实现当前使用的消息队列的确定以及对子类方法的调用之外,还可以执行一些通用的操作,例如,处理消息体对象准备、消息处理链路跟踪以及消息补偿机制等逻辑。
在构建了统一的消息发送接口之后,消息发送者(或称应用开发人员)无需了解当前使用的是哪个消息队列,也无需了解消息发送超类下具有哪些消息发送子类以及每个消息发送子类如何进行消息发送,其仅通过调用消息发送超类中的方法(如图2所示的发送消息方法)就可以对生成的消息执行发送操作。
步骤S103.针对多个消息队列中的每个消息队列,构造相对应的消息监听方法(或称消息监听操作过程),并且构建统一的用于注册消息监听处理方法(所述消息监听处理方法也称为消息监听处理操作过程)的入口。
根据本发明的一个实施例,对于每个消息队列(如KAFKA、ACTIVE MQ或者TENCENTMQ等),设计相对应的消息监听类,并且在该类中设计消息监听方法,以实现从该消息队列中进行消息监听(即从该消息队列下的Topic中进行消息监听)的程序逻辑。
在本步骤中还构建统一的用于注册消息监听处理方法的入口,该入口用于注册已经编写好的消息监听处理方法,即,将已经编写好的与消息队列下每个Topic相关的消息监听处理方法注册到内存对象中,以供后续步骤使用。其中,已经编写好的消息监听处理方法都已进行了注解并且所得到的方法注解存储在程序包中(举例而言,每个消息监听处理方法可以含有@MESSAGESERVICE注解),编写好的消息监听处理方法还可以含有关于该方法用于哪个Topic的指示。参见图3,用于注册消息监听处理方法的入口用于实现如下过程:
步骤S1031.在程序包中遍历方法注解;
步骤S1032.找到含有@MESSAGESERVICE注解的消息监听处理方法;
步骤S1033.将所找到的消息监听处理方法注册到内存对象中,即将所找到的消息监听处理方法的方法名以及方法所在类的类名存储到内存对象(如Hashmap)中。
步骤S104.构建统一的消息监听处理接口,包括如下子步骤:
步骤S1041.如图4所示,设计一个消息监听处理超类来实现统一的消息监听处理接口,并且将步骤S103中对于每个消息队列所设计的类(即步骤S103中的消息监听类)作为该消息监听处理超类的子类,例如KAFKA消息监听子类、ACTIVE MQ消息监听子类和TENCENTMQ消息监听子类(分别对应KAFKA、ACTIVE MQ和TENCENT MQ消息队列)。
步骤S1042.修改消息监听处理超类下每个消息监听子类中的消息监听方法,使得消息监听方法除了实现对于相对应的消息队列的消息监听之外,还实现如下的过程:
当监听到当前消息队列下的某个Topic中存入了消息时,调用消息监听处理超类中的处理消息方法(将在下文中描述),以实现对监听到的消息的处理。
步骤S1043.在消息监听处理超类中设计一个接收消息方法(或称接收消息操作过程)和一个处理消息方法(或称处理消息操作过程),并且在该消息监听处理超类中包含步骤S103中构建的用于注册消息监听处理方法的入口。
其中,接收消息方法用于实现如下过程:
与消息发送超类中的发送消息方法类似,接收消息方法用于确定当前使用的消息队列;调用与当前使用的消息队列相对应的消息监听子类中的消息监听方法,以从当前使用的消息队列中监听消息(即监听当前使用的消息队列下的Topic中是否存入了消息)。
如前所述,消息监听方法在监听到当前消息队列下的某个Topic中存入了消息时,会调用消息监听处理超类中的处理消息方法,以实现对监听到的消息的处理。该处理消息方法用于实现如下过程:
查找在内存对象中注册好的用于处理监听到的Topic下的消息的消息监听处理方法;调用该消息监听处理方法来完成对消息的处理。另外,该处理消息方法还用于执行一些通用的操作,例如处理消息体对象准备、消息处理链路跟踪和消息补偿机制等逻辑。
在构建了统一的消息监听处理接口之后,消息接收者(或称消息订阅者、消息消费者或者应用开发人员)无需了解当前使用的是哪个消息队列,也无需了解消息监听处理超类下具有哪些消息监听子类,以及每个消息监听子类如何实现消息监听,其通过调用消息监听处理超类中的接收消息方法就可以对消息队列执行监听和处理操作。
上述实施例提供了一种消息队列的处理方法,构建了统一的消息发送接口和统一的消息监听处理接口。应用开发人员可以利用该统一的消息发送接口和统一的消息监听处理接口实现消息的发送、监听、处理,而无需知道底层消息队列的差异,从而降低了因不同业务应用场景需求选择不同消息队列而带来的编码成本,同时提高了应用程序的开发效率,实现了不同消息队列之间的无缝切换。
而在进一步的实施例中,上述消息监听处理超类中的处理消息方法在对监听到的消息执行处理后,还对处理失败的消息进行重新发送,即执行消息重做,具体而言,包括:
首先,在数据库中记录消息的处理状态。如果消息处理成功,则在数据库(例如,Redis数据库)中存储该消息的处理状态为SUCCESS,即“处理成功”,并设置失效时间(例如3天),当该消息的处理状态SUCCESS在数据库中的存储时间超过失效时间时,数据库自动删除该消息的处理状态;如果对消息的处理失败,则在数据库中存储该消息的处理状态为ERROR(即“处理失败”)。本领域技术人员应理解,在数据库中,可以以(key,value)的形式来保存消息ID(即消息队列为发送来的消息生成的ID,消息队列中通常存储有所生成的消息的ID以及对应的消息对象)和对应消息的处理状态。
随后,在数据库中查找处理状态为ERROR的消息ID,重新发送该消息ID对应的消息。具体地,周期性地查询数据库,对于处理状态为ERROR(即处理失败)的消息ID所对应的消息,调用消息发送超类中的发送消息方法(该发送消息方法调用与当前使用的消息队列相对应的消息发送方法),执行该消息的重新发送。本领域技术人员应理解,在重新发送了处理失败的消息之后,与当前使用的消息队列相对应的消息监听子类会监听到该重新发送的消息,随后调用消息监听处理超类中的处理消息方法对该消息进行处理。通过执行消息重做,保证了消息的成功处理。
在构建好统一的消息发送接口和统一的消息监听处理接口之后,应用开发人员就可以通过该消息发送接口来执行消息的发送,并且通过该消息监听处理接口来注册消息监听处理方法,以及监听和处理消息队列中的消息。具体地,应用开发人员通过调用消息发送超类中的发送消息方法来执行消息的发送,并且通过调用消息监听处理超类中的接收消息方法来执行消息的监听和处理。据此,根据本发明的一个实施例,还提供一种消息队列的适配方法,该消息队列的适配方法由具有计算功能和存储功能的电子设备执行,并且该电子设备位于客户端或者服务器处。
图5示意性地示出了该消息队列的适配方法的流程图,下面参照图5描述该消息队列的适配方法的各个步骤:
步骤S201.调用统一的消息发送接口以进行消息的发送,该统一的消息发送接口以与当前使用的消息队列相对应的消息发送方式向当前使用的消息队列发送消息。
步骤S202.调用统一的消息监听处理接口以进行消息的监听和处理,该统一的消息监听处理接口以与当前使用的消息队列相对应的消息监听方式从当前使用的消息队列中监听消息。
根据本发明的一个实施例,还提供一种消息队列的适配方法,该消息队列的适配方法由具有计算功能和存储功能的电子设备执行,并且该电子设备位于客户端或者服务器处。图6示意性地示出了该消息队列的适配方法的流程图,下面参照图6描述该消息队列的适配方法的各个步骤:
步骤S301.调用统一的消息发送接口以进行消息的发送。统一的消息发送接口以与当前使用的消息队列相对应的消息发送方式向当前使用的消息队列发送消息,其中该统一的消息发送接口用于确定当前使用的消息队列,以及调用与当前使用的消息队列相对应的消息发送方法(即消息发送操作过程)向当前使用的消息队列发送消息。
具体而言,当应用开发人员通过调用上述消息发送超类中的发送消息方法(即发送消息操作过程)以执行消息发送时,该发送消息方法首先通过查询配置文件中的注解得到当前使用的消息队列的相关信息,并且根据该相关信息确定出当前使用的消息队列,例如是KAFKA、ACTIVE MQ、TENCENT MQ等消息队列中的一种;接着,该发送消息方法进一步调用与所确定的当前使用的消息队列相对应的消息发送子类中的消息发送方法,完成向当前使用的消息队列的消息发送(在Topic模式下,发送的消息存储在Topic中)。举例而言,假设首先确定了当前使用的消息队列是KAFKA消息队列,则随后调用KAFKA消息发送子类中的消息发送方法来完成消息的发送。
如上文所述,消息发送者实际上是通过调用消息发送超类中的发送消息方法来执行消息的发送,本领域技术人员应理解,消息发送超类中的发送消息方法除了执行当前消息队列的确定和子类方法的调用之外,还可以执行一些通用的操作,例如,处理消息体对象准备、消息处理链路跟踪以及消息补偿机制等逻辑。
步骤S302.判断是否已注册消息监听处理方法(例如,查找内存对象中是否存在消息监听处理方法的方法名以及方法所在类的类名,若存在则已注册,否则未注册),如果已注册则进入步骤S304;如果没有注册则进入步骤S303。
步骤S303.注册消息监听处理方法(即消息监听处理操作过程)。
根据本发明的一个实施例,应用开发人员通过调用预先设计的统一入口(即上文的用于注册消息监听处理方法的入口)来注册已经编写好的消息监听处理方法,即,将已经编写好的与消息队列下每个Topic相关的消息监听处理方法注册到内存对象中,以供后续步骤使用。注册消息监听处理方法的步骤包括:
在程序包中遍历方法注解;找到含有@MESSAGESERVICE注解的消息监听处理方法;将所找到的消息监听处理方法注册到内存对象中,即将所找到的消息监听处理方法的方法名以及方法所在类的类名存储到内存对象中。
步骤S304.调用统一的消息监听处理接口以进行消息的监听和处理。统一的消息监听处理接口以与当前使用的消息队列相对应的消息监听方式从当前使用的消息队列中监听消息,其中,该统一的消息监听处理接口用于确定当前使用的消息队列并且调用与当前使用的消息队列相对应的消息监听方法(即消息监听操作过程)从当前使用的消息队列中监听消息(即监听消息队列下的Topic中是否存入了消息),处理监听到的消息,并且对处理失败的消息执行消息重做。步骤S304包括如下子步骤:
步骤S3041.应用开发人员通过调用消息监听处理超类中的接收消息方法(即接收消息操作过程)以执行消息监听和处理,该接收消息方法首先通过查询配置管理员在配置文件中记录的信息来确定当前使用的消息队列;接着,该接收消息方法进一步调用与所确定的当前使用的消息队列对应的消息监听子类中的消息监听方法,从而实现从当前使用的消息队列下的Topic中监听消息。
步骤S3042.当消息监听方法监听到某个Topic中存入消息后,调用消息监听处理超类中的处理消息方法(即处理消息操作过程),该处理消息方法查找已在内存对象中注册好的用于该Topic的消息监听处理方法,并且调用该消息监听处理方法来完成对消息的处理。如果对消息的处理成功,则消息监听处理超类中的处理消息方法在数据库(例如,Redis数据库)中存储该消息的处理状态为SUCCESS,即“处理成功”,并设置失效时间(例如3天),当该消息的处理状态SUCCESS在数据库中的存储时间超过失效时间时,数据库自动删除该消息的处理状态;如果对消息的处理失败,则在数据库中存储该消息的处理状态为ERROR(即“处理失败”)。
另外,消息监听处理超类中的处理消息方法还执行一些通用的操作,例如处理消息体对象准备、消息处理链路跟踪和消息补偿机制等逻辑。
步骤S3043.对于处理失败的消息,消息监听处理超类中的处理消息方法执行消息重做。具体地,在数据库中查找处理状态为ERROR的消息ID,调用消息发送超类中的发送消息方法,重新发送该消息ID对应的消息。根据本发明的一个实施例,可以周期性地查询数据库,对于处理状态为ERROR(即处理失败)的消息ID所对应的消息,调用消息发送超类中的发送消息方法(该发送消息方法调用与当前使用的消息队列相对应的消息发送方法),执行该消息的重新发送。
在上述实施例中,应用开发人员仅需掌握一种代码写法就能实现消息的发送、监听和处理,对于应用开发人员而言,其能够更简单快速地完成代码开发,降低了应用程序的编码成本同时提高了开发效率。此外,在发送消息或监听消息队列时,由接口提供的方法确定当前使用的消息队列并且调用与当前使用的消息队列相对应的子类中的方法来实现具体的发送或监听,这使得消息队列的更换对于上层应用而言是无感的,从而能够实现消息队列之间的无缝切换。当消息处理失败时,还可以重新发送该消息,随后监听和处理该消息,实现了消息重做,保证了消息的成功处理。
在上述实施例中,在执行消息的处理操作之后会在数据库中存储消息的处理状态,并且通过查询数据库对处理状态为ERROR的消息进行重新发送,然而本领域技术人员应理解,在其他实施例中,也可以不存储消息的处理状态,而是在消息处理失败时,直接进行该消息的重新发送。在上述实施例中,以注解的方式在配置文件中记录当前使用的消息队列的相关信息并且以注解的方式在内存对象中注册编写好的消息监听处理方法,这一方式不应视为对本发明的限制,其他记录和标注方式也适用于本发明。另外,在上述实施例中,发送、监听及处理消息是以特定的顺序执行的,而在其他实施例中,发送以及监听和处理消息可以同步地进行,并且在执行消息监听和处理操作前可以省略确定当前使用的消息队列的步骤。本领域技术人员还应理解,尽管上文以Topic模式描述了本发明实施例,但上述步骤也适用于Queue模式的消息队列。
以下结合附图介绍本发明的装置实施例。
图7示意性地示出了根据本发明一个实施例的消息队列的适配装置700的框图。
参见图7,消息队列的适配装置700包括:消息发送模块701和消息监听处理模块702。
其中,消息发送模块701用于调用统一的消息发送接口以进行消息的发送,所述统一的消息发送接口以与当前使用的消息队列相对应的消息发送方式向当前使用的消息队列发送消息;消息监听处理模块702用于调用统一的消息监听处理接口以进行消息的监听,所述统一的消息监听处理接口以与当前使用的消息队列相对应的消息监听方式从当前使用的消息队列中监听消息。
具体而言,统一的消息发送接口确定当前使用的消息队列,以及调用与当前使用的消息队列相对应的消息发送方法向当前使用的消息队列发送消息;统一的消息监听处理接口确定当前使用的消息队列,以及调用与当前使用的消息队列相对应的消息监听方法从当前使用的消息队列中监听消息。
根据本发明的一个实施例,消息队列的适配装置700还包括消息监听处理方法注册模块(图中未示出),该消息监听处理方法注册模块用于调用统一的用于注册消息监听处理方法的入口以注册消息监听处理方法,该消息监听处理方法用于对监听到的消息进行处理。具体地,与当前使用的消息队列相对应的消息监听方法在监听到消息时,针对监听到的消息调用处理消息方法,该处理消息方法用于调用已注册的消息监听处理方法,以对监听到的消息进行处理。
根据本发明的一个实施例,处理消息方法还用于对于处理失败的消息,调用与当前使用的消息队列相对应的消息发送方法,向当前使用的消息队列重新发送该处理失败的消息。
由于本实施例的消息队列的适配装置的各个功能模块与上文结合图5描述的消息队列的适配方法实施例的步骤对应,因此对于本装置实施例中未披露的细节,请参照结合图5描述的消息队列的适配方法的实施例。
根据本发明的一个实施例,还提供一种适于用来实现本发明实施例的电子设备的计算机***的结构示意图。参见图8,计算机***800包括总线805,耦合到总线805的设备之间可以快速地传输信息。处理器801与总线805耦合,用于执行由计算机程序代码所指定的一组动作或操作,处理器801可以单独地或者与其他设备组合实现为机械、电、磁、光、量子或者化学部件等。
计算机***800还包括耦合到总线805的存储器803,存储器803(例如,RAM或者其他动态存储设备)存储可由计算机***800改变的数据,包括实现上述实施例所述的消息队列的适配方法的指令或计算机程序。当处理器801执行该指令或计算机程序时,使得计算机***800能够实现上述实施例中描述的消息队列的适配方法,例如,可以实现如图5、6中所示的各个步骤。存储器803还可以存储处理器801执行指令或计算机程序期间产生的临时数据,以及***操作所需的各种程序和数据。计算机***800还包括耦合到总线805的只读存储器802以及非易失性储存设备808,例如磁盘或光盘等,用于存储当计算机***800被关闭或掉电时也能持续的数据。
计算机***800还包括诸如键盘、传感器等的输入设备806,以及诸如阴极射线管(CRT)、液晶显示器(LCD)、打印机等的输出设备807。计算机***800还包括耦合到总线805的通信接口804,通信接口804可以提供对外部设备的单向或双向的通信耦合。例如,通信接口804可以是并行端口、串行端口、电话调制解调器或者局域网(LAN)卡。计算机***800还包括耦合到总线805的驱动设备809以及可拆卸设备810,诸如磁盘、光盘、磁光盘、半导体存储器等等,其根据需要安装在驱动设备809上,以便于从其上读出的计算机程序根据需要被安装入储存设备808。
根据本发明的另一个实施例,还提供一种计算机可读介质,该计算机可读介质可以是上述计算机***800中所包含的,也可以是单独存在而未装配入该计算机***800中的。该计算机可读介质承载有一个或者多个计算机程序或者指令,当所述一个或者多个计算机程序或者指令被处理器执行时,使得该计算机***800实现上述实施例中所述的消息队列的适配方法。需要说明的是,计算机可读介质指的是向处理器801提供数据的任意介质,这种介质可以采取任意形式,包括但不限于,计算机可读存储介质(例如,非易失性介质、易失性介质)以及传输介质。其中,非易失性介质诸如包括光盘或磁盘,例如储存设备808;易失性介质例如包括存储器804。传输介质例如包括同轴电缆、铜线、光纤电缆以及在没有电缆和线缆的情况下通过空间的载波,例如声波和电磁波,包括无线电、光和红外波。计算机可读介质的一般形式包括:软盘、柔性盘、硬盘、磁带、任意其它磁介质、CD-ROM、CDRW、DVD、任意其它光介质、穿孔卡片、纸带、光标记表单、具有孔或其它光可识别标识的图案的任意其它物理介质、RAM、PROM、EPROM、FLASH-EPROM、任意其它存储器芯片或磁带盒、载波、或计算机可读取的任意其它介质。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。
Claims (10)
1.一种消息队列的适配方法,包括:
调用统一的消息发送接口以进行消息的发送,所述统一的消息发送接口以与当前使用的消息队列相对应的消息发送方式向当前使用的消息队列发送消息;
调用统一的消息监听处理接口以进行消息的监听,所述统一的消息监听处理接口以与当前使用的消息队列相对应的消息监听方式从当前使用的消息队列中监听消息。
2.根据权利要求1所述的方法,其特征在于,所述统一的消息发送接口以与当前使用的消息队列相对应的消息发送方式向当前使用的消息队列发送消息包括:
所述统一的消息发送接口确定当前使用的消息队列,以及调用与当前使用的消息队列相对应的消息发送操作过程向当前使用的消息队列发送消息。
3.根据权利要求2所述的方法,其特征在于,所述统一的消息监听处理接口以与当前使用的消息队列相对应的消息监听方式从当前使用的消息队列中监听消息包括:
所述统一的消息监听处理接口确定当前使用的消息队列,以及调用与当前使用的消息队列相对应的消息监听操作过程从当前使用的消息队列中监听消息。
4.根据权利要求1-3中任一项所述的方法,其特征在于,所述统一的消息发送接口为消息发送超类;所述统一的消息监听处理接口为消息监听处理超类。
5.根据权利要求3所述的方法,其特征在于,在调用统一的消息监听处理接口以进行消息的监听之前,所述方法还包括:
调用统一的用于注册消息监听处理操作过程的入口以注册消息监听处理操作过程,所述消息监听处理操作过程用于对监听到的消息进行处理。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
所述与当前使用的消息队列相对应的消息监听操作过程在监听到消息时,针对监听到的消息调用处理消息操作过程,所述处理消息操作过程用于调用已注册的消息监听处理操作过程,以对监听到的消息进行处理。
7.根据权利要求6所述的方法,其特征在于,所述处理消息操作过程还用于对于处理失败的消息,调用所述与当前使用的消息队列相对应的消息发送操作过程向当前使用的消息队列重新发送该处理失败的消息。
8.一种消息队列的适配装置,包括:
消息发送模块,用于调用统一的消息发送接口以进行消息的发送,所述统一的消息发送接口以与当前使用的消息队列相对应的消息发送方式向当前使用的消息队列发送消息;
消息监听处理模块,用于调用统一的消息监听处理接口以进行消息的监听,所述统一的消息监听处理接口以与当前使用的消息队列相对应的消息监听方式从当前使用的消息队列中监听消息。
9.一种计算机可读介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至7中任一项所述的方法。
10.一种电子设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个计算机程序,当所述一个或多个计算机程序被所述一个或多个处理器执行时,使得所述电子设备实现如权利要求1至7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910675713.0A CN110399236B (zh) | 2019-07-25 | 2019-07-25 | 消息队列的适配方法、装置、介质及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910675713.0A CN110399236B (zh) | 2019-07-25 | 2019-07-25 | 消息队列的适配方法、装置、介质及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110399236A true CN110399236A (zh) | 2019-11-01 |
CN110399236B CN110399236B (zh) | 2022-07-05 |
Family
ID=68324994
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910675713.0A Active CN110399236B (zh) | 2019-07-25 | 2019-07-25 | 消息队列的适配方法、装置、介质及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110399236B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111813791A (zh) * | 2020-06-17 | 2020-10-23 | 上海悦易网络信息技术有限公司 | 一种分布式补偿事务的方法及设备 |
CN112287643A (zh) * | 2020-09-01 | 2021-01-29 | 上海泛微软件有限公司 | 消息监听方法、装置、设备及计算机可读存储介质 |
CN113419882A (zh) * | 2021-08-24 | 2021-09-21 | 成都特维思科技有限公司 | 一种动态切换消息队列的方法 |
CN114401149A (zh) * | 2022-01-30 | 2022-04-26 | 杭州立思辰安科科技有限公司 | 防火墙网卡负载均衡机制中协议动态端口处理方法和*** |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160337465A1 (en) * | 2015-05-15 | 2016-11-17 | Cisco Technology, Inc. | Multi-datacenter message queue |
CN107171873A (zh) * | 2017-07-21 | 2017-09-15 | 北京微影时代科技有限公司 | 一种消息处理的方法和装置 |
CN108762945A (zh) * | 2018-05-14 | 2018-11-06 | 浪潮通用软件有限公司 | 一种支持多种消息队列的实现方法 |
CN109710435A (zh) * | 2019-01-03 | 2019-05-03 | 山东浪潮通软信息科技有限公司 | 一种基于支撑多消息队列的消息传递方法 |
-
2019
- 2019-07-25 CN CN201910675713.0A patent/CN110399236B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160337465A1 (en) * | 2015-05-15 | 2016-11-17 | Cisco Technology, Inc. | Multi-datacenter message queue |
CN107171873A (zh) * | 2017-07-21 | 2017-09-15 | 北京微影时代科技有限公司 | 一种消息处理的方法和装置 |
CN108762945A (zh) * | 2018-05-14 | 2018-11-06 | 浪潮通用软件有限公司 | 一种支持多种消息队列的实现方法 |
CN109710435A (zh) * | 2019-01-03 | 2019-05-03 | 山东浪潮通软信息科技有限公司 | 一种基于支撑多消息队列的消息传递方法 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111813791A (zh) * | 2020-06-17 | 2020-10-23 | 上海悦易网络信息技术有限公司 | 一种分布式补偿事务的方法及设备 |
CN111813791B (zh) * | 2020-06-17 | 2024-05-21 | 上海万物新生环保科技集团有限公司 | 一种分布式补偿事务的方法及设备 |
CN112287643A (zh) * | 2020-09-01 | 2021-01-29 | 上海泛微软件有限公司 | 消息监听方法、装置、设备及计算机可读存储介质 |
CN112287643B (zh) * | 2020-09-01 | 2023-01-24 | 上海泛微软件有限公司 | 消息监听方法、装置、设备及计算机可读存储介质 |
CN113419882A (zh) * | 2021-08-24 | 2021-09-21 | 成都特维思科技有限公司 | 一种动态切换消息队列的方法 |
CN114401149A (zh) * | 2022-01-30 | 2022-04-26 | 杭州立思辰安科科技有限公司 | 防火墙网卡负载均衡机制中协议动态端口处理方法和*** |
CN114401149B (zh) * | 2022-01-30 | 2022-09-06 | 杭州立思辰安科科技有限公司 | 防火墙网卡负载均衡机制中协议动态端口处理方法、***、设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110399236B (zh) | 2022-07-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110399236A (zh) | 消息队列的适配方法、装置、介质及电子设备 | |
US10057152B2 (en) | Providing an unseen message count across devices | |
CN102664909B (zh) | 通过用户标识符重新建立推送通知信道 | |
US10673969B2 (en) | Scalable data feed system | |
US20110258268A1 (en) | Controlling message delivery in publish/subscribe messaging | |
US20090125595A1 (en) | Intelligent message processing | |
WO2021088641A1 (zh) | 数据发送方法、处理方法、接收方法及其设备、存储介质 | |
US9201715B2 (en) | Event overflow handling by coalescing and updating previously-queued event notification | |
US20060248145A1 (en) | System and method for providing various levels of reliable messaging between a client and a server | |
US8694625B2 (en) | Selective registration for remote event notifications in processing node clusters | |
CN112069265A (zh) | 配置数据的同步方法、业务数据***、计算机***和介质 | |
US20090164558A1 (en) | Xi monitoring in high load scenarios (monitoring cockpit) | |
CN110740145B (zh) | 消息消费方法、装置、存储介质及电子设备 | |
US8220002B2 (en) | Isolation of user-interactive components | |
CN110505315A (zh) | 数据处理方法、装置、设备及存储介质 | |
CN114615096B (zh) | 基于事件驱动架构的电信计费方法、***及相关设备 | |
US20110145191A1 (en) | Proxy-Based, Distributed Computer-Aided Dispatch System | |
US20060294181A1 (en) | Method and apparatus for maintaining state information in an event driven thin client environment | |
CN114338722A (zh) | 云边存储资源管理***及方法、存储介质和电子设备 | |
US9077750B2 (en) | Using forums as a message transport in an enterprise service bus | |
CN113783913A (zh) | 一种消息推送管理方法和装置 | |
CN110264035A (zh) | 工作流程的配置方法、装置、终端和存储介质 | |
CN108063803A (zh) | 基于分布式订阅发布消息***的消息管理方法及*** | |
CN114979308B (zh) | 一种消息处理的方法和装置 | |
US8250146B2 (en) | Service adaptation machine |
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 |