CN116467091A - 基于消息中间件的消息处理方法、装置、设备及介质 - Google Patents
基于消息中间件的消息处理方法、装置、设备及介质 Download PDFInfo
- Publication number
- CN116467091A CN116467091A CN202310269085.2A CN202310269085A CN116467091A CN 116467091 A CN116467091 A CN 116467091A CN 202310269085 A CN202310269085 A CN 202310269085A CN 116467091 A CN116467091 A CN 116467091A
- Authority
- CN
- China
- Prior art keywords
- message
- consumed
- cluster
- dead
- user
- 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
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 26
- 238000012545 processing Methods 0.000 claims abstract description 38
- 238000012544 monitoring process Methods 0.000 claims abstract description 26
- 238000000034 method Methods 0.000 claims abstract description 10
- 230000015654 memory Effects 0.000 claims description 26
- 238000010276 construction Methods 0.000 claims description 3
- 238000004378 air conditioning Methods 0.000 claims 1
- 238000004590 computer program Methods 0.000 description 10
- 230000006870 function Effects 0.000 description 7
- 238000010586 diagram Methods 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 4
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000005856 abnormality Effects 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 230000008439 repair process Effects 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/547—Messaging middleware
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
技术领域
本申请涉及人工智能技术领域,尤其涉及一种基于消息中间件的消息处理方法、装置、电子设备及存储介质。
背景技术
MQ(Message Queue,消息队列)是现有的一款商业消息中间产品,适用于分布式计算环境或异构系统之中,消息队列技术是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走。通过消息队列,应用程序之间不需要知道彼此的位置、或在继续执行前不需要等待接收程序接收对应消息即可独立地执行相关操作。
MQ中的消息消费者在处理消息时常由于程序错误或其他异常导致消费失败,MQ消费者在多次消费信息均失败后,MQ便会将该信息存入死信队列,而在消费者相关处理程序恢复正常后,便需要将该存储在MQ服务器中的当前主题(topic)的死信信息重新消费掉。因此如何让MQ消费者将存储在死信队列中的死信消息进行快速消费是值得解决的技术问题。
发明内容
鉴于以上内容,有必要提出一种基于消息中间件的消息处理方法、装置、电子设备及存储介质,以解决如何将存储在死信队列中的死信消息进行快速消费这一技术问题。
本申请提供一种基于消息中间件的消息处理方法,所述方法包括:
依据消息中间件接收外部调用请求以获取待消费消息,所述消息中间件包括生产者集群、服务器集群、消费者集群和节点集群;
基于所述待消费消息的主题确定所述消费者集群中各用户对应的待消费消息以构建用户消息队列;
基于所述用户消息队列和所述节点集群向所述消费者集群中的用户发送所述待消费消息;
基于所述服务器集群监听所述待消费消息的消费结果以生成死信消息队列;
基于所述服务器集群生成重发线程以对所述死信消息队列中的消息进行重发;
统计所述死信消息队列中的消息重发数据以生成消息处理日志。
在一些实施例中,所述依据消息中间件接收外部调用请求以获取待消费消息,包括:
创建数据库表;
依据服务器集群接收外部调用请求;
基于所述外部调用请求从所述生产者集群中调用消息;
将调用的消息写入所述数据库表后作为待消费消息。
在一些实施例中,所述基于所述待消费消息的主题确定所述消费者集群中各用户对应的待消费消息以构建用户消息队列,包括:
获取所述待消费消息的主题,所述主题存储于所述节点集群中;
基于所述主题在所述数据库表中查询订阅所述待消费消息的用户;
向订阅所述主题的用户发送所述待消费消息以构建用户消息队列。
在一些实施例中,所述基于所述用户消息队列和所述节点集群向所述消费者集群中的用户发送所述待消费消息,包括:
基于所述服务器集群获取所述主题的路由信息;
基于所述路由信息将所述用户消息队列中的待消费消息路由到所述节点集群的节点上;
基于所述节点集群的节点将所述用户消息队列中的待消费消息发送给所述消费者集群中的用户进行消费。
在一些实施例中,所述基于所述服务器集群监听所述待消费消息的消费结果以生成死信消息队列包括:
基于所述服务器集群启动消息监听线程;
基于所述消息监听线程定时扫描所述用户消息队列获得所述待消费消息的消费结果,所述消费结果包括未消费、消费成功和消费失败;
基于所述消费结果对所述用户消息队列中的待消费消息进行标记;
将被标记为消费失败的待消费消息添加到死信队列中获得死信消息队列。
在一些实施例中,所述基于所述服务器集群生成重发线程以对所述死信消息队列中的消息进行重发包括:
统计所述死信消息队列中的死信消息数量;
基于所述服务器集群生成数量与所述死信消息数量相同的重发线程;
基于所述重发线程拉取所述死信消息队列中的死信消息进行重发。
在一些实施例中,所述统计所述死信消息队列中的消息重发数据以生成消息处理日志包括:
统计所述死信消息队列中死信消息的消息重发数据,所述消息重发数据包括重发次数、重发成功和重发失败;
对重发失败的死信消息进行重新发送,并更新该死信消息对应的重发次数;
当所述重发次数超过预设的重发阈值时生成预警信息;
调用日志服务记录所述消息重发数据和所述预警信息得到消息处理日志。
本申请实施例还提供一种基于消息中间件的消息处理装置,所述装置包括接收模块、构建模块、发送模块、监听模块、重发模块以及生成模块:
所述接收模块,用于依据消息中间件接收外部调用请求以获取待消费消息,所述消息中间件包括生产者集群、服务器集群、消费者集群和节点集群;
所述构建模块,用于基于所述待消费消息的主题确定所述消费者集群中各用户对应的待消费消息以构建用户消息队列;
所述发送模块,用于基于所述用户消息队列和所述节点集群向所述消费者集群中的用户发送所述待消费消息;
所述监听模块,用于基于所述服务器集群监听所述待消费消息的消费结果以生成死信消息队列;
所述重发模块,用于基于所述服务器集群生成重发线程以对所述死信消息队列中的消息进行重发;
所述生成模块,用于统计所述死信消息队列中的消息重发数据以生成消息处理日志。
本申请实施例还提供一种电子设备,所述电子设备包括:
存储器,存储至少一个指令;
处理器,执行所述存储器中存储的指令以实现所述的基于消息中间件的消息处理方法。
本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一个指令,所述至少一个指令被电子设备中的处理器执行以实现所述的基于消息中间件的消息处理方法。
本申请通过对消息中间件中各集群的综合调度可以及时获取消息的处理结果,并且能够利用多线程将死信消息进行快速重发,从而有效提高消息的处理效率。
附图说明
图1是本申请所涉及的基于消息中间件的消息处理方法的较佳实施例的流程图。
图2是本申请所涉及的基于消息中间件的消息处理装置的较佳实施例的功能模块图。
图3是本申请所涉及的基于消息中间件的消息处理方法的较佳实施例的电子设备的结构示意图。
图4是本申请所涉及的消息中间件的集群结构示意图。
具体实施方式
为了能够更清楚地理解本申请的目的、特征和优点,下面结合附图和具体实施例对本申请进行详细描述。需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互结合。在下面的描述中阐述了很多具体细节以便于充分理解本申请,所述描述的实施例仅是本申请一部分实施例,而不是全部的实施例。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个所述特征。在本申请的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中在本申请的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本申请。本文所使用的术语“和/或”包括一个或多个相关的所列项目的任意的和所有的组合。
本申请实施例提供一种基于消息中间件的消息处理方法,可应用于一个或者多个电子设备中,电子设备是一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的设备,其硬件包括但不限于微处理器、专用集成电路(Application SpecificIntegrated Circuit,ASIC)、可编程门阵列(Field-Programmable Gate Array,FPGA)、数字处理器(Digital Signal Processor,DSP)、嵌入式设备等。
电子设备可以是任何一种可与客户进行人机交互的电子产品,例如,个人计算机、平板电脑、智能手机、个人数字助理(Personal Digital Assistant,PDA)、游戏机、交互式网络电视(Internet Protocol Television,IPTV)、智能式穿戴式设备等。
电子设备还可以包括网络设备和/或客户设备。其中,所述网络设备包括,但不限于单个网络服务器、多个网络服务器组成的服务器组或基于云计算(Cloud Computing)的由大量主机或网络服务器构成的云。
电子设备所处的网络包括但不限于互联网、广域网、城域网、局域网、虚拟专用网络(Virtual Private Network,VPN)等。
如图1所示,是本申请基于消息中间件的消息处理方法的较佳实施例的流程图。根据不同的需求,该流程图中步骤的顺序可以改变,某些步骤可以省略。
该可选的实施例中,消息中间件可以为RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMq等常见的MQ(Message Queue,消息队列)集群,在MQ集群中,把应用程序交由MQ传输的数据定义为消息,所述消息有两部分组成,分别是:消息描述符,用于描述消息的特征;消息体,即用户数据部分,而队列是存放消息的容器。
S10,依据消息中间件接收外部调用请求以获取待消费消息,所述消息中间件包括生产者集群、服务器集群、消费者集群和节点集群。
在一个可选的实施例中,所述依据消息中间件接收外部调用请求以获取待消费消息,包括:
创建数据库表;
依据服务器集群接收外部调用请求;
基于所述外部调用请求从所述生产者集群中调用消息;
将调用的消息写入所述数据库表后作为待消费消息。
该可选的实施例中,可在MQ集群的数据库中创建数据库表,所述数据库表用于存储外部程序产生的消息、并记录消息的核心控制字段,本方案中所述数据库可以为MySQL、SQLServer、Oracle等常见数据库。
如图4所示,该可选的实施例中,所述MQ集群包括生产者(Producer)集群、服务器(Name Server)集群、消费者(Consumer)集群和节点(Broker)集群。所述生产者集群用于生产消息,所述消费者集群用于消费消息,所述节点集群中的节点则用于在所述生产者集群和所述消费者集群之间传递消息。
该可选的实施例中,可基于所述服务器集群接收外部调用请求,本方案中所述外部调用请求的形式不限,可以为http请求、WebService请求、RMI调用、类方法调用等。
该可选的实施例中,所述生产者集群根据所述外部调用请求生产相应的消息以供所述外部调用请求进行调用,然后将所有被调用的消息写入所述数据库表中作为待消费消息。
如此,可根据外部调用请求从消息中间件中快速获取对应的待消费消息。
S11,基于所述待消费消息的主题确定所述消费者集群中各用户对应的待消费消息以构建用户消息队列。
在一个可选的实施例中,所述基于所述待消费消息的主题确定所述消费者集群中各用户对应的待消费消息以构建用户消息队列,包括:
获取所述待消费消息的主题,所述主题存储于所述节点集群中;
基于所述主题在所述数据库表中查询订阅所述待消费消息的用户;
向订阅所述主题的用户发送所述待消费消息以构建用户消息队列。
该可选的实施例中,在生产者发送所述待消费消息给消费者之前,需要预先创建主题(Topic),所述主题相当于所述生产者和所述消费者之间的中间媒介,这样生产者和消费者之间彼此无需知道对方,生产者将消息发送到主题,消费者根据订阅的主题获取消息即可。生产者和消费者之间存在时间依赖性,需要先有主题,消费者进行了订阅,然后消费者请求消息,接着生产者接收到请求后生产消息后再发送给主题。
该可选的实施例中,存储节点和生产者以及消费者都和服务器建立了长连接,因此通过服务器节点上的主题和待消费消息之间即可产生关联,并在创建主题的时候指定该主题存储在哪些Broker上,即所述主题存储于所述节点集群的各节点中。
该可选的实施例中,每个主题都可以被所述消费者集群中的多位用户订阅到,因此可通过所述服务器集群识别所述待消费消息数据中的分组、标签或订阅主题,从而能够通过在所述数据库表中查询所述主题的订阅用户统计出所述待消费消息对应的用户及用户数量。
该可选的实施例中,在生产者发送所述待消费消息给消费者前,所述生产者集群、消费者集群和所述节点集群中的节点需要先与所述服务器集群建立并保持长连接,然后每隔固定间隔如30s向所述服务器集群中的服务器发送心跳包来保证长连接不会中断。
该可选的实施例中,可根据所述用户及用户数量在数据库中将对应推送的用户数目拉起,然后依次将每个用户和该用户对应的待消费消息封装成json数据包形成用户消息队列,以便于根据所述用户消息队列向所述消费者集群中的各用户发送对应的待消费消息。
如此,可通过所述待消费消息的主题快速确定订阅该主题的用户,从而构建出相应的用户消息队列。
S12,基于所述用户消息队列和所述节点集群向所述消费者集群中的用户发送所述待消费消息。
在一个可选的实施例中,所述基于所述用户消息队列和所述节点集群向所述消费者集群中的用户发送所述待消费消息,包括:
基于所述服务器集群获取所述主题的路由信息;
基于所述路由信息将所述用户消息队列中的待消费消息路由到所述节点集群的节点上;
基于所述节点集群的节点将所述用户消息队列中的待消费消息发送给所述消费者集群中的用户进行消费。
该可选的实施例中,由于所述生产者集群、消费者集群和节点集群均与所述服务器集群建立了长连接,因此所述生产者集群在向所述消费者集群发送消息时,可首先通过所述服务器集群获取所述主题的路由信息,即获取当前发送的Topic的用户消息队列与所述节点集群中的节点Broker的地址的映射关系。
该可选的实施例中,可根据所述路由信息建立起所述用户消息队列和该用户消息队列对应的节点Broker之间的长连接,从而能够使所述用户消息队列向节点Broker发送待消费消息。同时,所述消费者集群通过与所述服务器集群之间的长连接获取用户订阅的主题的路由信息,并建立起消费者集群中的用户与所述节点集群中的节点Broker之间的长连接,从而开始消费由所述节点集群中的节点Broker发送的所述用户消息队列中的待消费消息。
如此,通过路由信息和节点集群中的节点可快速建立起用户消息队列和对应的用户之间的联系,从而使用户完成对待消费消息的消费。
S13,基于所述服务器集群监听所述待消费消息的消费结果以生成死信消息队列。
在一个可选的实施例中,所述基于所述服务器集群监听所述待消费消息的消费结果以生成死信消息队列包括:
基于所述服务器集群启动消息监听线程;
基于所述消息监听线程定时扫描所述用户消息队列获得所述待消费消息的消费结果,所述消费结果包括未消费、消费成功和消费失败;
基于所述消费结果对所述用户消息队列中的待消费消息进行标记;
将被标记为消费失败的待消费消息添加到死信队列中获得死信消息队列。
该可选的实施例中,可通过所述服务器集群启动本地的消息监听线程,定时轮询扫描所述用户消息队列来逐一遍历扫描到的待消费消息,从而获得所述待消费消息的消费结果,所述消费结果包括未消费、消费成功和消费失败。
该可选的实施例中,可将所述用户消息队列中还没有被消费的待消费消息的状态标记为0,对应于所述消费结果中的未消费;将所述用户消息队列中成功被所述消费者集群消费掉的待消费消息标记为1,对应于所述消费结果中的消费成功;将所述用户消息队列中没有被所述消费者集群消费掉的待消费消息标记为2,对应于所述消费结果中的消费失败。
该可选的实施例中,导致所述待消费消息被消费失败的原因有很多,如因各类突发情况产生异常而导致无法被正确消费的消息,示例性的,某一待消费消息因为网络、IO等原因导致消费失败,本方案中将所有消费失败被标记为2的待消费消息添加到死信队列中作为死信消息队列。
如此,可通过启动消息监听线程获取所述用户消息队列中各待消费消息的消费结果,从而将消费失败的待消费消息及时加入死信队列中进行后续处理。
S14,基于所述服务器集群生成重发线程以对所述死信消息队列中的消息进行重发。
在一个可选的实施例中,所述基于所述服务器集群生成重发线程以对所述死信消息队列中的消息进行重发包括:
统计所述死信消息队列中的死信消息数量;
基于所述服务器集群生成数量与所述死信消息数量相同的重发线程;
基于所述重发线程拉取所述死信消息队列中的死信消息进行重发。
该可选的实施例中,可每隔固定时间如每隔一个小时对所述死信消息队列中存在的死信消息数量进行统计,然后通过所述服务器集群生成数量与统计到的死信消息数量相一致的多个重发线程。
该可选的实施例中,所述重发线程可以执行死信消息的拉取、存储和重发三个动作,具体为所述重发线程通过获取当前Topic相关联的节点将所述死信消息队列中的死信消息拉取出来并存储到数据库中,然后将存储到数据库中的这些死信消息依次重新发送给当前Topic相关联的消费者集群中的消费者,从而使所述消费者对所述死信消息进行重新消费,其中每条重发线程对应一条死信消息。
如此,可通过生成多条重发线程来对所述死信消息队列中的死信消息进行快速重发。
S15,统计所述死信消息队列中的消息重发数据以生成消息处理日志。
在一个可选的实施例中,所述统计所述死信消息队列中的消息重发数据以生成消息处理日志包括:
统计所述死信消息队列中死信消息的消息重发数据,所述消息重发数据包括重发次数、重发成功和重发失败;
对重发失败的死信消息进行重新发送,并更新该死信消息对应的重发次数;
当所述重发次数超过预设的重发阈值时生成预警信息;
调用日志服务记录所述消息重发数据和所述预警信息得到消息处理日志。
该可选的实施例中,每条死信消息的消息重发数据包括该死信消息的重发次数、重发成功和重发失败数据,若死信消息被重新发送给消费者进行消费后仍然消费失败,则可通过死信消息修复线程对该死信消息进行修复并再次发送给对应的消费者进行消费。其中,可在每次对所述死信消息进行重发后需要对该死信消息的消息重发数据进行更新。
该可选的实施例中,可通过设定重发阈值来设置死信消息被重新发送的次数上限,示例性的,预设的重发阈值可以为10,即当死信消息的重发次数超过所述重发阈值时,需立即停止重新发送并生成预警信息,以便于及时中断某些消息的处理,节省系统开支。
该可选的实施例中,可通过调用消息中间件集群的日志服务记录各死信消息的消息重发数据和预警信息得到消息处理日志,以便于工作人员根据所述消息处理日志及时掌握消息中间件集群中各死信消息的处理结果,从而及时排查出产生死信消息的问题所在,保证消息中间件集群的正常运转。
如此,可通过生成消息处理日志对消息中间件集群进行优化,减少死信消息的生成,保证推送的消息能够被正常消费。
请参见图2,图2是本申请基于消息中间件的消息处理装置的较佳实施例的功能模块图。基于消息中间件的消息处理装置11包括接收模块110、构建模块111、发送模块112、监听模块113、重发模块114、生成模块115。本申请所称的单元/模块是指一种能够被处理器13所执行,并且能够完成固定功能的一系列计算机可读指令段,其存储在存储器12中。在本实施例中,关于各单元/模块的功能将在后续的实施例中详述。
在一个可选的实施例中,接收模块110用于依据消息中间件接收外部调用请求以获取待消费消息,所述消息中间件包括生产者集群、服务器集群、消费者集群和节点集群。
在一个可选的实施例中,所述依据消息中间件接收外部调用请求以获取待消费消息,包括:
创建数据库表;
依据服务器集群接收外部调用请求;
基于所述外部调用请求从所述生产者集群中调用消息;
将调用的消息写入所述数据库表后作为待消费消息。
在一个可选的实施例中,构建模块111用于基于所述待消费消息的主题确定所述消费者集群中各用户对应的待消费消息以构建用户消息队列。
在一个可选的实施例中,所述基于所述待消费消息的主题确定所述消费者集群中各用户对应的待消费消息以构建用户消息队列,包括:
获取所述待消费消息的主题,所述主题存储于所述节点集群中;
基于所述主题在所述数据库表中查询订阅所述待消费消息的用户;
向订阅所述主题的用户发送所述待消费消息以构建用户消息队列。
在一个可选的实施例中,发送模块112用于基于所述用户消息队列和所述节点集群向所述消费者集群中的用户发送所述待消费消息。
在一个可选的实施例中,所述基于所述用户消息队列和所述节点集群向所述消费者集群中的用户发送所述待消费消息,包括:
基于所述服务器集群获取所述主题的路由信息;
基于所述路由信息将所述用户消息队列中的待消费消息路由到所述节点集群的节点上;
基于所述节点集群的节点将所述用户消息队列中的待消费消息发送给所述消费者集群中的用户进行消费。
在一个可选的实施例中,监听模块113用于基于所述服务器集群监听所述待消费消息的消费结果以生成死信消息队列。
在一个可选的实施例中,所述基于所述服务器集群监听所述待消费消息的消费结果以生成死信消息队列包括:
基于所述服务器集群启动消息监听线程;
基于所述消息监听线程定时扫描所述用户消息队列获得所述待消费消息的消费结果,所述消费结果包括未消费、消费成功和消费失败;
基于所述消费结果对所述用户消息队列中的待消费消息进行标记;
将被标记为消费失败的待消费消息添加到死信队列中获得死信消息队列。
在一个可选的实施例中,重发模块114用于基于所述服务器集群生成重发线程以对所述死信消息队列中的消息进行重发。
在一个可选的实施例中,所述基于所述服务器集群生成重发线程以对所述死信消息队列中的消息进行重发包括:
统计所述死信消息队列中的死信消息数量;
基于所述服务器集群生成数量与所述死信消息数量相同的重发线程;
基于所述重发线程拉取所述死信消息队列中的死信消息进行重发。
在一个可选的实施例中,生成模块115用于统计所述死信消息队列中的消息重发数据以生成消息处理日志。
在一个可选的实施例中,所述统计所述死信消息队列中的消息重发数据以生成消息处理日志包括:
统计所述死信消息队列中死信消息的消息重发数据,所述消息重发数据包括重发次数、重发成功和重发失败;
对重发失败的死信消息进行重新发送,并更新该死信消息对应的重发次数;
当所述重发次数超过预设的重发阈值时生成预警信息;
调用日志服务记录所述消息重发数据和所述预警信息得到消息处理日志。
由以上技术方案可以看出,本申请能够通过对消息中间件中各集群的综合调度可以及时获取消息的处理结果,并且能够利用多线程将死信消息进行快速重发,从而有效提高消息的处理效率。
请参见图3,是本申请实施例提供的一种电子设备的结构示意图。电子设备1包括存储器12和处理器13。存储器12用于存储计算机可读指令,处理器13用执行所述储器中存储的计算机可读指令以实现上述任一实施例所述的基于消息中间件的消息处理方法。
在一个可选的实施例中,电子设备1还包括总线、存储在所述存储器12中并可在所述处理器13上运行的计算机程序,例如基于消息中间件的消息处理程序。
图3仅示出了具有存储器12和处理器13的电子设备1,本领域技术人员可以理解的是,图3示出的结构并不构成对电子设备1的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。
结合图1,电子设备1中的所述存储器12存储多个计算机可读指令以实现一种基于消息中间件的消息处理方法,所述处理器13可执行所述多个指令从而实现:
依据消息中间件接收外部调用请求以获取待消费消息,所述消息中间件包括生产者集群、服务器集群、消费者集群和节点集群;
基于所述待消费消息的主题确定所述消费者集群中各用户对应的待消费消息以构建用户消息队列;
基于所述用户消息队列和所述节点集群向所述消费者集群中的用户发送所述待消费消息;
基于所述服务器集群监听所述待消费消息的消费结果以生成死信消息队列;
基于所述服务器集群生成重发线程以对所述死信消息队列中的消息进行重发;
统计所述死信消息队列中的消息重发数据以生成消息处理日志。
具体地,所述处理器13对上述指令的具体实现方法可参考图1对应实施例中相关步骤的描述,在此不赘述。
本领域技术人员可以理解,所述示意图仅仅是电子设备1的示例,并不构成对电子设备1的限定,电子设备1可以是总线型结构,也可以是星形结构,电子设备1还可以包括比图示更多或更少的其他硬件或者软件,或者不同的部件布置,例如电子设备1还可以包括输入输出设备、网络接入设备等。
需要说明的是,电子设备1仅为举例,其他现有的或今后可能出现的电子产品如可适应于本申请,也应包含在本申请的保护范围以内,并以引用方式包含于此。
其中,存储器12至少包括一种类型的可读存储介质,所述可读存储介质可以是非易失性的,也可以是易失性的。所述可读存储介质包括闪存、移动硬盘、多媒体卡、卡型存储器(例如:SD或DX存储器等)、磁性存储器、磁盘、光盘等。存储器12在一些实施例中可以是电子设备1的内部存储单元,例如该电子设备1的移动硬盘。存储器12在另一些实施例中也可以是电子设备1的外部存储设备,例如电子设备1上配备的插接式移动硬盘、智能存储卡(Smart Media Card,SMC)、安全数字(Secure Digital,SD)卡、闪存卡(Flash Card)等。存储器12不仅可以用于存储安装于电子设备1的应用软件及各类数据,例如基于消息中间件的消息处理程序的代码等,还可以用于暂时地存储已经输出或者将要输出的数据。
处理器13在一些实施例中可以由集成电路组成,例如可以由单个封装的集成电路所组成,也可以是由多个相同功能或不同功能封装的集成电路所组成,包括一个或者多个中央处理器(Central Processing unit,CPU)、微处理器、数字处理芯片、图形处理器及各种控制芯片的组合等。处理器13是电子设备1的控制核心(Control Unit),利用各种接口和线路连接整个电子设备1的各个部件,通过运行或执行存储在所述存储器12内的程序或者模块(例如执行基于消息中间件的消息处理程序等),以及调用存储在所述存储器12内的数据,以执行电子设备1的各种功能和处理数据。
所述处理器13执行所述电子设备1的操作系统以及安装的各类应用程序。所述处理器13执行所述应用程序以实现上述各个基于消息中间件的消息处理方法实施例中的步骤,例如图1所示的步骤。
示例性的,所述计算机程序可以被分割成一个或多个单元/模块,所述一个或者多个单元/模块被存储在所述存储器12中,并由所述处理器13执行,以完成本申请。所述一个或多个单元/模块可以是能够完成特定功能的一系列计算机可读指令段,该指令段用于描述所述计算机程序在电子设备1中的执行过程。例如,所述计算机程序可以被分割成接收模块110、构建模块111、发送模块112、监听模块113、重发模块114、生成模块115。
上述以软件功能模块的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、计算机设备,或者网络设备等)或处理器(processor)执行本申请各个实施例所述的基于消息中间件的消息处理方法的部分。
电子设备1集成的单元/模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指示相关的硬件设备来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。
其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存储器及其他存储器等。
进一步地,计算机可读存储介质可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据区块链节点的使用所创建的数据等。
本申请所指区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层等。
总线可以是外设部件互连标准(Peripheral Component Interconnect,简称PCI)总线或扩展工业标准结构(Extended Industry Standard Architecture,简称EISA)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,在图3中仅用一根箭头表示,但并不表示仅有一根总线或一种类型的总线。所述总线被设置为实现所述存储器12以及至少一个处理器13等之间的连接通信。
本申请实施例还提供一种计算机可读存储介质(图未示),计算机可读存储介质中存储有计算机可读指令,计算机可读指令被电子设备中的处理器执行以实现上述任一实施例所述的基于消息中间件的消息处理方法。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能模块可以集成在一个处理单元中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能模块的形式实现。
此外,显然“包括”一词不排除其他模块或步骤,单数不排除复数。说明书陈述的多个模块或装置也可以由一个模块或装置通过软件或者硬件来实现。第一、第二等词语用来表示名称,而并不表示任何特定的顺序。
最后应说明的是,以上实施例仅用以说明本申请的技术方案而非限制,尽管参照较佳实施例对本申请进行了详细说明,本领域的普通技术人员应当理解,可以对本申请的技术方案进行修改或等同替换,而不脱离本申请技术方案的精神和范围。
Claims (10)
1.一种基于消息中间件的消息处理方法,其特征在于,所述方法包括:
依据消息中间件接收外部调用请求以获取待消费消息,所述消息中间件包括生产者集群、服务器集群、消费者集群和节点集群;
基于所述待消费消息的主题确定所述消费者集群中各用户对应的待消费消息以构建用户消息队列;
基于所述用户消息队列和所述节点集群向所述消费者集群中的用户发送所述待消费消息;
基于所述服务器集群监听所述待消费消息的消费结果以生成死信消息队列;
基于所述服务器集群生成重发线程以对所述死信消息队列中的消息进行重发;
统计所述死信消息队列中的消息重发数据以生成消息处理日志。
2.如权利要求1所述的基于消息中间件的消息处理方法,其特征在于,所述依据消息中间件接收外部调用请求以获取待消费消息,包括:
创建数据库表;
依据服务器集群接收外部调用请求;
基于所述外部调用请求从所述生产者集群中调用消息;
将调用的消息写入所述数据库表后作为待消费消息。
3.如权利要求2所述的基于消息中间件的消息处理方法,其特征在于,所述基于所述待消费消息的主题确定所述消费者集群中各用户对应的待消费消息以构建用户消息队列,包括:
获取所述待消费消息的主题,所述主题存储于所述节点集群中;
基于所述主题在所述数据库表中查询订阅所述待消费消息的用户;
向订阅所述主题的用户发送所述待消费消息以构建用户消息队列。
4.如权利要求1所述的基于消息中间件的消息处理方法,其特征在于,所述基于所述用户消息队列和所述节点集群向所述消费者集群中的用户发送所述待消费消息,包括:
基于所述服务器集群获取所述主题的路由信息;
基于所述路由信息将所述用户消息队列中的待消费消息路由到所述节点集群的节点上;
基于所述节点集群的节点将所述用户消息队列中的待消费消息发送给所述消费者集群中的用户进行消费。
5.如权利要求1所述的基于消息中间件的消息处理方法,其特征在于,所述基于所述服务器集群监听所述待消费消息的消费结果以生成死信消息队列包括:
基于所述服务器集群启动消息监听线程;
基于所述消息监听线程定时扫描所述用户消息队列获得所述待消费消息的消费结果,所述消费结果包括未消费、消费成功和消费失败;
基于所述消费结果对所述用户消息队列中的待消费消息进行标记;
将被标记为消费失败的待消费消息添加到死信队列中获得死信消息队列。
6.如权利要求1所述的基于消息中间件的消息处理方法,其特征在于,所述基于所述服务器集群生成重发线程以对所述死信消息队列中的消息进行重发包括:
统计所述死信消息队列中的死信消息数量;
基于所述服务器集群生成数量与所述死信消息数量相同的重发线程;
基于所述重发线程拉取所述死信消息队列中的死信消息进行重发。
7.如权利要求1所述的基于消息中间件的消息处理方法,其特征在于,所述统计所述死信消息队列中的消息重发数据以生成消息处理日志包括:
统计所述死信消息队列中死信消息的消息重发数据,所述消息重发数据包括重发次数、重发成功和重发失败;
对重发失败的死信消息进行重新发送,并更新该死信消息对应的重发次数;
当所述重发次数超过预设的重发阈值时生成预警信息;
调用日志服务记录所述消息重发数据和所述预警信息得到消息处理日志。
8.一种基于消息中间件的消息处理装置,其特征在于,所述装置包括接收模块、构建模块、发送模块、监听模块、重发模块以及生成模块:
所述接收模块,用于依据消息中间件接收外部调用请求以获取待消费消息,所述消息中间件包括生产者集群、服务器集群、消费者集群和节点集群;
所述构建模块,用于基于所述待消费消息的主题确定所述消费者集群中各用户对应的待消费消息以构建用户消息队列;
所述发送模块,用于基于所述用户消息队列和所述节点集群向所述消费者集群中的用户发送所述待消费消息;
所述监听模块,用于基于所述服务器集群监听所述待消费消息的消费结果以生成死信消息队列;
所述重发模块,用于基于所述服务器集群生成重发线程以对所述死信消息队列中的消息进行重发;
所述生成模块,用于统计所述死信消息队列中的消息重发数据以生成消息处理日志。
9.一种电子设备,其特征在于,所述电子设备包括:
存储器,存储有计算机可读指令;及
处理器,执行所述存储器中存储的计算机可读指令以实现如权利要求1至7中任意一项所述的基于消息中间件的消息处理方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机可读指令,所述计算机可读指令被处理器执行时实现如权利要求1至7中任一项所述的基于消息中间件的消息处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310269085.2A CN116467091A (zh) | 2023-03-08 | 2023-03-08 | 基于消息中间件的消息处理方法、装置、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310269085.2A CN116467091A (zh) | 2023-03-08 | 2023-03-08 | 基于消息中间件的消息处理方法、装置、设备及介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116467091A true CN116467091A (zh) | 2023-07-21 |
Family
ID=87177923
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310269085.2A Pending CN116467091A (zh) | 2023-03-08 | 2023-03-08 | 基于消息中间件的消息处理方法、装置、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116467091A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117370457A (zh) * | 2023-09-26 | 2024-01-09 | 浪潮智慧科技有限公司 | 一种多线程数据实时同步方法、设备及介质 |
CN117544677A (zh) * | 2023-11-08 | 2024-02-09 | 苏州盖雅信息技术有限公司 | 一种消息队列topic复用的实现方法 |
CN117931484A (zh) * | 2024-03-22 | 2024-04-26 | 中国人民解放军国防科技大学 | 基于滑动窗口的消息消费方法、装置、设备及存储介质 |
-
2023
- 2023-03-08 CN CN202310269085.2A patent/CN116467091A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117370457A (zh) * | 2023-09-26 | 2024-01-09 | 浪潮智慧科技有限公司 | 一种多线程数据实时同步方法、设备及介质 |
CN117544677A (zh) * | 2023-11-08 | 2024-02-09 | 苏州盖雅信息技术有限公司 | 一种消息队列topic复用的实现方法 |
CN117544677B (zh) * | 2023-11-08 | 2024-05-17 | 苏州盖雅信息技术有限公司 | 一种消息队列topic复用的实现方法、系统、装置及存储介质 |
CN117931484A (zh) * | 2024-03-22 | 2024-04-26 | 中国人民解放军国防科技大学 | 基于滑动窗口的消息消费方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN116467091A (zh) | 基于消息中间件的消息处理方法、装置、设备及介质 | |
US9705752B2 (en) | Reliably updating a messaging system | |
US9647972B2 (en) | Message delivery in messaging networks | |
CN112118315A (zh) | 数据处理系统、方法、装置、电子设备和存储介质 | |
US9686330B2 (en) | Topic-based messaging using consumer address and pool | |
US10819641B2 (en) | Highly available servers | |
CN109783151B (zh) | 规则变更的方法和装置 | |
CN110611707B (zh) | 一种任务调度的方法及装置 | |
EP4207688A1 (en) | Asynchronous bookkeeping method and apparatus for blockchain, medium, and electronic device | |
CN110581887B (zh) | 数据处理方法、装置、区块链节点及存储介质 | |
CN114020845A (zh) | 区块链网络管理方法、系统、电子设备及存储介质 | |
CN110673959A (zh) | 用于处理任务的系统、方法和装置 | |
CN105373563B (zh) | 数据库切换方法及装置 | |
JP4612714B2 (ja) | データ処理方法、クラスタシステム、及びデータ処理プログラム | |
CN114610504A (zh) | 消息处理方法、装置、电子设备及存储介质 | |
CN115658745A (zh) | 数据处理方法、装置、计算机设备和计算机可读存储介质 | |
CN114820132A (zh) | 订单派发方法、装置、电子设备及存储介质 | |
CN114328731A (zh) | 信息处理方法、装置、电子设备和存储介质 | |
CN113254097A (zh) | 配置信息的下发方法和装置、电子设备和存储介质 | |
CN111666132A (zh) | 分布式事务实现方法、装置、计算机系统及可读存储介质 | |
US20230409375A1 (en) | Batch processing tracking | |
CN112463514A (zh) | 分布式缓存集群的监测方法和装置 | |
US8910182B2 (en) | Managing and simplifying distributed applications | |
US9588924B2 (en) | Hybrid request/response and polling messaging model | |
Neves Bessani et al. | Active replication in CORBA: Standards, protocols, and implementation framework |
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 |