CN116382943A - 顺序消息处理方法、总线系统、计算机设备及存储介质 - Google Patents
顺序消息处理方法、总线系统、计算机设备及存储介质 Download PDFInfo
- Publication number
- CN116382943A CN116382943A CN202310313074.XA CN202310313074A CN116382943A CN 116382943 A CN116382943 A CN 116382943A CN 202310313074 A CN202310313074 A CN 202310313074A CN 116382943 A CN116382943 A CN 116382943A
- Authority
- CN
- China
- Prior art keywords
- message
- messages
- module
- queue
- sequential
- 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
- 238000003860 storage Methods 0.000 title claims description 22
- 238000012545 processing Methods 0.000 claims abstract description 54
- 238000001914 filtration Methods 0.000 claims description 24
- 238000000034 method Methods 0.000 claims description 17
- 230000008569 process Effects 0.000 claims description 8
- 238000009826 distribution Methods 0.000 claims description 7
- 238000004590 computer program Methods 0.000 claims description 4
- 230000002618 waking effect Effects 0.000 claims description 4
- 238000011161 development Methods 0.000 abstract description 12
- 238000012423 maintenance Methods 0.000 abstract description 5
- 230000001276 controlling effect Effects 0.000 description 10
- 230000005540 biological transmission Effects 0.000 description 8
- 238000005192 partition Methods 0.000 description 8
- 238000010586 diagram Methods 0.000 description 7
- 230000007246 mechanism Effects 0.000 description 7
- 238000004891 communication Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 238000012790 confirmation Methods 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000036541 health Effects 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000007689 inspection Methods 0.000 description 2
- 238000002955 isolation Methods 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 241000533950 Leucojum Species 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 230000008030 elimination Effects 0.000 description 1
- 238000003379 elimination reaction Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000002045 lasting effect Effects 0.000 description 1
- 238000012805 post-processing Methods 0.000 description 1
- 238000007639 printing Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000001105 regulatory effect Effects 0.000 description 1
Images
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
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q30/00—Commerce
- G06Q30/06—Buying, selling or leasing transactions
- G06Q30/0601—Electronic shopping [e-shopping]
- G06Q30/0633—Lists, e.g. purchase orders, compilation or processing
- G06Q30/0635—Processing of requisition or of purchase orders
-
- 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/548—Queue
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Business, Economics & Management (AREA)
- Finance (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Accounting & Taxation (AREA)
- General Engineering & Computer Science (AREA)
- Development Economics (AREA)
- Economics (AREA)
- Marketing (AREA)
- Strategic Management (AREA)
- General Business, Economics & Management (AREA)
- Multi Processors (AREA)
Abstract
本发明涉及一种顺序消息处理方法,包括如下步骤:接收消息,并依据消息的主题将所接收的消息发送至对应的主题消息队列;对主题消息队列中的消息进行存储;根据消息的主题找出对应的订阅关系,并将消息分别发送至订阅关系所对应的消息通道队列;对每一消息通道队列进行消费处理,以将消息通道队列中的消息按顺序的发送给订阅关系中对应的客户端接口。本发明的顺序消息处理方法能够解决订单推送中的消息顺序问题,解决掉顺序问题带来的业务错误,且各开发团队无需再维护消息中间件,降低服务器费用,开发接入简单,开发效率提升,扩展能力增加,仅需简单的维护配置。
Description
技术领域
本发明涉及通信技术领域,特指一种顺序消息处理方法、总线系统、计算机设备及存储介质。
背景技术
在使用微服务架构的系统中,消息传递是一种常见的通信方式,通常会采用消息中间件方案。基于消息中间件的异步消息传递,可以增加系统吞吐量和减少系统响应时间,解决系统瓶颈,通过解耦提高系统的可伸缩性,采用发送后无须等待回应的方式,从而提高其生产率。但是也带来了一些问题,例如很难实现严格的顺序消息,在用户下单成功后,又立即退款,系统发出两条消息,pos端先收到退款,再收到下单成功消息,产生业务错误。例如在参与协作的各应用系统的开发团队不同、技术路线不统一的情况下,各团队有着自己的消息中间件,耦合数随着应用程序的增加呈平方增加。连接越来越多,维护管理、修改和集成的难度越来越大,业务改进困难重重。
发明内容
本发明的目的在于克服现有技术的缺陷,提供一种顺序消息处理方法、总线系统、计算机设备及存储介质,解决现有的消息中间件方案存在的很难实现严格的顺序消息进而产生业务错误以及多个开发团队间不方便通信,需要大量改造的问题。
实现上述目的的技术方案是:
本发明提供了一种顺序消息处理方法,包括如下步骤:
接收消息,并依据消息的主题将所接收的消息发送至对应的主题消息队列;
对主题消息队列中的消息进行存储;
根据消息的主题找出对应的订阅关系,并将消息分别发送至订阅关系所对应的消息通道队列;以及
对每一消息通道队列进行消费处理,以将消息通道队列中的消息按顺序的发送给订阅关系中对应的客户端接口。
本发明的顺序消息处理方法能够解决订单推送中的消息顺序问题,解决掉顺序问题带来的业务错误,且各开发团队无需再维护消息中间件,降低服务器费用,开发接入简单,开发效率提升,扩展能力增加,仅需简单的维护配置。
本发明顺序消息处理方法的进一步改进在于,对每一消息通道队列进行消费处理的步骤包括:
对消息通道队列中的消息依据过滤脚本进行前置过滤;
创建未推送状态的一条推记录至数据库表以保存记录;
对消息通道队列中的消息进行并发控制以实现控制一条消息不会重复的出现在消息通道队列中;
对消息通道队列中的消息进行顺序控制以处理有序的消息;
对消息通道队列中的消息进行去重控制;
将消息通道队列中的消息发送到对应的客户端接口。
本发明顺序消息处理方法的进一步改进在于,在消息处理完成后,将链表中等待的消息进行唤醒,将唤醒的消息发送至消息通道队列进行重新排队执行。
本发明顺序消息处理方法的进一步改进在于,还包括定时扫描数据库表中未执行的消息记录,将未执行的消息重新发送到消息通道队列中进行重新排队执行。
本发明还提供了一种顺序消息总线系统,包括:
接收模块,用于接收消息;
存储模块,用于存储消息;
分发模块,与所述接收模块连接,用于根据消息的主题找出对应的订阅关系,并将消息分别发送至订阅关系所对应的消息通道队列;以及
处理模块,与所述接收模块和所述存储模块连接,用于依据消息的主体将所接收的消息发送至对应的主题消息队列;还用于对每一消息通道队列进行消费处理,以将消息通道队列中的消息按顺序的发送给订阅关系中对应的客户端接口。
本发明顺序消息总线系统的进一步改进在于,所述处理模块包括前置过滤子模块、保存记录子模块、并发控制子模块、顺序控制子模块、去重控制子模块以及发送子模块;
所述前置过滤子模块用于对消息通道队列中的消息依据过滤脚本进行前置过滤;
所述保存记录子模块用于创建未推送状态的一条推记录至数据库表中;
所述并发控制子模块用于对消息通道队列中的消息进行并发控制以实现控制一条消息不会重复的出现在消息通道队列中;
所述顺序控制子模块用于对消息通道队列中的消息进行顺序控制;
所述去重控制子模块用于对消息通道队列中的消息进行去重控制;
所述发送子模块用于将消息通道队列中的消息发送到对应的客户端接口。
本发明顺序消息总线系统的进一步改进在于,还包括唤醒模块,用于在消息处理完成后,将链表中等待的消息进行唤醒,并将唤醒的消息发送至消息通道队列进行重新排队执行。
本发明顺序消息总线系统的进一步改进在于,还包括补偿处理模块,用于定时扫描数据库表中未执行的消息记录,并将未执行的消息重新发送到消息通道队列中进行重新排队执行。
本发明又提供了一种计算机设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述存储器中存储的可执行代码以实现上述的顺序消息处理方法。
本发明还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器运行时执行上述的顺序消息处理方法。
附图说明
图1为本发明顺序消息总线系统的架构图。
图2为本发明顺序消息总线系统中主题模块的内部结构图。
图3为本发明顺序消息处理方法的流程图。
图4为本发明顺序消息总线系统中分发模块的内部结构图。
图5为本发明顺序消息总线系统中消息通道的内部结构图。
图6为本发明顺序消息总线系统中发送模块的内部结构图。
图7为本发明顺序消息总线系统中消息链表存储结构图。
具体实施方式
下面结合附图和具体实施例对本发明作进一步说明。
参阅图1,本发明提供了一种顺序消息处理方法、总线系统、计算机设备及存储介质,用于解决多个开发团队使用不同的技术、消息协议、需要各自维护消息中间件,各团队应用不方便通信,需要大量改造的问题;还用于解决开发复杂度高,时间长,运维维护费用高,耦合度高不易扩展的问题;还用于解决很多场景需要准确的顺序消息,需要接入方自行实现,实现起来很复杂的问题;还用于解决没有管理能力,无法进行消息的溯源查询与补偿的问题。本发明的消息总线系统需部署多个实例,形成分布式集群,对外提供的api接口,需通过负载均衡来访问,保证接口高可用。消息流转过程使用RabbitMQ进行异步处理,将消息的接收与消息的发送进行解耦,使用队列将消息进行分区隔离形成通道,通道之间相互独立,可以并行处理消息,提高系统的处理效率,在同一通道内的消息,采用队列的方式进行排序和处理。下面结合附图对本发明顺序消息处理方法、总线系统、计算机设备及存储介质进行说明。
参阅图1,显示了本发明顺序消息总线系统的架构图。下面结合图1,对本发明顺序消息总线系统进行说明。
如图1所示,本发明的消息总线与消息生产端连接,接收消息生产端生产的消息,还与消息消费端连接,用于将接收的消息发生给消息消费端,实现对消息的消费处理。该消息总线内部部署有多个实例,包括实例1至实例n,形成分布式集群,多个实例与负载均衡模块连接,通过负载均衡模块来实现访问,各个实例对外提供api接口,利用负载均衡模块实现访问可保证接口的高可用性。
本发明的顺序消息总线系统包括接收模块、存储模块、分发模块以及处理模块,分发模块与接收模块连接,处理模块与接收模块和存储模块连接;其中接收模块用于接收消息,存储模块用于存储消息,分发模块用于根据消息的主题找出对应的订阅关系,并将消息分别发送至订阅关系所对应的消息通道队列;处理模块用于依据消息的主体将所接收的消息发送至对应的主题消息队列;还用于对每一消息通道队列进行消费处理,以将消息通道队列中的消息按顺序的发送给订阅关系中对应的客户端接口。
本发明的消息总线内部部署的实例在发送消息时,内部至少建立一条消息通道队列。
如图2所示,本发明的消息总线系统还包括主题模块,该主题模块用于实现创建主题、订阅主题、取消订阅、发布消息以及心跳检测等功能,该主题模块与客户端连接,用于接收客户端的指令,并执行指令以实现相应的功能。客户端可以通过api接口创建主题,生产者客户端向主题中投放消息,消费者客户端订阅主题,消费者客户端接收到主题中的消息。
具体地,可以通过web控制台、api接口创建主题,所创建的主题会持久化存储在数据库表中,同时会创建一个主题消息队列,用于处理发布的消息。消费者实例需要先订阅主题,才可以接受到该主题上的消息,订阅主体需要提供如下信息:订阅的主题、消费者服务标识、消费者信息(IP、端口、URL、接收接口、过滤脚本、分区等),消息总线系统存储消费者订阅主题时提供的信息,并创建消息通道队列。在订阅成功后,消息总线系统与消费者形成心跳检查机制,每10秒进行一次健康检查,如果健康检查失败,则将状态标记为下线,后续不会将消息分发到该消息通道队列。消费者下线时也可以调接口,主动通知消息总线系统。分区字段用于对基础组件进行隔离使用,这样可以使不同的主题使用各自的RabbitMQ、Redis、MySQL,结合图1所示,消息总线系统内设置有基础组件,该基础组件包括RabbitMQ集群、Redis集群、MySQL集群,以实现分区存储,可按主题进行分区,每个分区使用不同的集群服务器,可以做到各个主题的隔离与性能保证。
生产者实例通过api接口发布消息,需要制定消息对应的主题。消息详情包括消息头和消息体,消息头包含消息位移标识、业务key、版本号、消息生产者标识、时间缀、重试标识等必要字段,消息体标识消息的内容,为文本格式,不做任何限定,可采用JSON格式。版本号字段用于控制消息的顺序,如果是为空,则表示无序的消息。
生产者实例发布消息到指定主题中,消息总线系统的接收模块通过接口接收到消息,然后分发模块根据消息主题的不同,将消息发送至对应的主题消息队列,表示发布消息成功。
对主题消息队列进行消费处理,将消息存储到数据库表中。通过业务key与雪花算法生成消息ID字段,然后使用消息ID作为数据库分片键,这样就可以保证同一业务key的消息保存在同一个数据库表中,方便后续查询和更新处理。例如,一笔餐饮订单过程中会产生很多事件,包括下单、支付、接单、打印小票、制作完成、配送、订单完成等,这些事件会产生很多消息,则业务key就是订单号,这些消息都会存储在同一个数据表中。
分发模块根据消息的主题找到对应的消息通道队列(也即订阅时产生的队列,需要排除下线的),然后将消息分裂,结合图3和图4所示,分别给每一个消息通道发送一份消息,产生了多条通道消息,这样保证每个消息通道是隔离的,会进行并行消息处理,消息通道队列和订阅关系可以是一对一关系,还可以是一对多关系,可以根据计算资源情况而决定,可以动态调整。较佳地,分发模块用于将一条消息按订阅优先级顺序发送至对应的消息通道中。
在本发明的一种具体实施方式中,处理模块包括前置过滤子模块、保存记录子模块、并发控制子模块、顺序控制子模块、去重控制子模块以及发送子模块;
前置过滤子模块用于对消息通道队列中的消息依据过滤脚本进行前置过滤;
保存记录子模块用于创建未推送状态的一条推记录至数据库表中;
并发控制子模块用于对消息通道队列中的消息进行并发控制以实现控制一条消息不会重复的出现在消息通道队列中;
顺序控制子模块用于对消息通道队列中的消息进行顺序控制;
去重控制子模块用于对消息通道队列中的消息进行去重控制;
发送子模块用于将消息通道队列中的消息发送到对应的客户端接口。
如图5所示,对消息通道队列进行消费处理,整体是一个链条式的处理逻辑,每个环节逐个的执行。
前置过滤可以对一些消息进行过滤,过滤掉的消息不会发送到消费者实例,可在订阅主题的时候指定过滤脚本。该过滤脚本需要用Groovy语言编写,返回结果为布尔值,若存在过滤脚本,则执行脚本,结果为true时,则过滤掉此消息。比如,餐饮pos机服务需要过滤掉购买会员卡等虚拟商器订单,则可在订阅中传递过滤脚本。
保存记录,创建一条推记录至数据库表,状态为未推送。
并发控制,用于控制一条消息不会重复的出现在队列中,使用Redis分布式锁机制对消息进行控制,减少消息的数量,减少计算成本,因为分布式服务,分发模块和唤醒模块都有可能将通道消息发送到队列中,可能使同一条消息在一个队列中同时出现多条的情况。
顺序控制,用于处理有序的消息,使用链表结构存储,当通道消息执行顺序不合理的情况下,将消息存放到链表中,可结合图7所示,链表中按照执行顺序存储,消息的版本号从0开始,版本号由生产者指定,顺序控制模块执行时会对当前的消息进行版本检查,会出现三种情况:
值为0,则表示通过检查,创建一个链表结构,将消息存入链表头;值非0,同时上一版本的消息已执行完,则可立即执行,然后再将消息存入链表中,维护好前后关系;值非0,同时上一版本的消息未执行完,则不可执行,需要等待唤醒,将消息存入链表中,维护好前后关系。
去重控制,因为消息总线系统是分布式部署,多实例消费时可能存在并发问题,使用Redis分布式锁机制对消息进行控制,保证同一个通道消息不可同时在多个实例被消费处理,以防止出现业务错误。
后置处理,用于处理一些其他操作,比如释放并发控制锁等。
发送子模块将通道消息发送到消费者客户端,并记录发送日志。提供http、mq、websocket三种发送方式。
结合图6所示,发送消息根据订阅时提供的客户端接口,将消息发送到消费者实例。为保证结果准确性,可以提供同步、异步消息确认的机制(ack),确认成功则会记录到数据库表中,将状态改为发送成功,同时记录时间信息。同步ack:是通过消费者的接口响应来判断,定位code等于200时表示成功。异步ack:是消息总线系统提供一个独立的接口,供消费者实例来调用,需要传入消息ID和code,code等于200时表示成功。
为保证消息尽可能正确发送,还包括重试模块,该重试模块可进行重试发送消息,实现多次重试功能,尽可能的多次通知客户端,分别在5秒、10秒、30秒、60秒、120秒多个时间段通知消费者。若发送失败则会将状态改为发送失败,并记录失败原因,每次失败都需要记录到数据库表中,以方便追溯源查询。
在本发明的一种具体实施方式中,还包括唤醒模块,用于在消息处理完成后,将链表中等待的消息进行唤醒,并将唤醒的消息发送至消息通道队列进行重新排队执行。
在当前版本的消息处理完成后,进行唤醒处理,将链表中的等待的消息进行唤醒,使用当前版本+1来查询即将唤醒的消息,若查询到有需唤醒的消息存在,则将消息发至消息通道进行重新排队执行。
在本发明的一种具体实施方式中,还包括补偿处理模块,用于定时扫描数据库表中未执行的消息记录,并将未执行的消息重新发送到消息通道队列中进行重新排队执行。
补偿处理用于唤醒长期未推送的消息,是一种容错和恢复机制,可确保消息的可靠传递,即使某个组件或者通道出现故障,消息总线仍然可以确保系统的稳定性,补偿处理模块定时的扫描数据库表中未执行的记录,可设定时间为一分钟,也即每到一分钟就进行一次扫描,然后重新发送到消息通道进行重新排队执行。
本发明的消息总线系统部署多个实例,形成分布式集群。对外提供的api接口,需通过负载均衡来访问,保证接口高可用。消息流转过程使用RabbitMQ进行异步处理,将消息的接收与消息的发送进行解耦。使用队列将消息进行分区隔离形成通道,通道之间相互独立,可以并行处理消息,提高系统的处理效率。对于同一通道内的消息,采用队列的方式进行排序和处理。在队列中,消息按照时间戳或者其他规则进行排序,保证消息的处理顺序。在消息通道中,设置多个控制器,负责对不同通道内的消息进行调度和控制,保证系统处理消息的正确性和稳定性。数据存储上面使用MySQL集群结构,保证消息不丢失,消息按一定的规则进行分片存储,定期清理过期的数据,保证每个表有较高的性能。查询数据时使用Redis对数据缓存,减少数据库的访问,实现较高的并发。系统中的各组件都有较高的伸缩性,可以快速的对性能完成扩容升级。除了性能扩容之外,还有其他扩容方式,比喻可以按主题进行分区,每个分区使用不同的RabbitMQ、Redis、MySQL集群服务器,可以做到各主题的隔离与性能保证。
本发明还提供了一种顺序消息处理方法,下面对该处理方法进行说明。
本发明的顺序消息处理方法包括如下步骤:
接收消息,并依据消息的主题将所接收的消息发送至对应的主题消息队列;
对主题消息队列中的消息进行存储;
根据消息的主题找出对应的订阅关系,并将消息分别发送至订阅关系所对应的消息通道队列;以及
对每一消息通道队列进行消费处理,以将消息通道队列中的消息按顺序的发送给订阅关系中对应的客户端接口。
本发明的第一步接收消息:生产者实例发布消息到指定主题中,消息总线通过接口接收到消息,然后根据消息主题不同,将消息发送至对应的主题消息队列,表示发布消息成本。
本发明的第二步存储消息:对主题消息队列进行消费处理,将消息存储起来,以数据库表、文件等形式,可按一定的规则存储,方便后续查询和更新处理。
本发明的第三步分发消息:根据消息的主题找到对应的订阅关系,将消息分别发送至这些订阅关系对应的消息通道队列,即产生了多条通道消息。这样保证每个消息通道是隔离的,会进行并行消息处理。消息通道队列和订阅关系可以是一对一关系,还可以是一对多,可以根据计算资源情况而决定,可以动态调整。
在本发明的一种具体实施方式中,对每一消息通道队列进行消费处理的步骤包括:
对消息通道队列中的消息依据过滤脚本进行前置过滤;
创建未推送状态的一条推记录至数据库表以保存记录;
对消息通道队列中的消息进行并发控制以实现控制一条消息不会重复的出现在消息通道队列中;
对消息通道队列中的消息进行顺序控制以处理有序的消息;
对消息通道队列中的消息进行去重控制;
将消息通道队列中的消息发送到对应的客户端接口。
本发明对通道消息进行处理:对消息通道队列进行消费处理,整体是一个链条式处理逻辑。
首先是前置过滤:可以对一些消息进行过滤掉,可以再订阅主题的时候指定条件。其次是并发控制:用于控制一条消息不会重复的出现在对列中,减少消息的数量,减少计算成本。再进行顺序控制:用于处理有序的消息。可以使用链表结构存储,当通道消息执行顺序不合理的情况下,将消息存放到链表中,链表中按照执行顺序存储存,请参阅图7所示。再进行去重控制:可以使用锁机制对消息进行控制,保证同一个消息不可同时被处理,以防止出现业务错误。再进行发送消息:根据订阅时提供的客户端接口,将消息发送到消费者实例。为保证结果准确性,可以提供同步、异步消息确认的机制(ack),为保证消息尽可能正确发送,可以提供重试能力,将可能的多次通知客户端。同时还需要将消息发送情况日志存储起来。最后进行唤醒处理,可以链表中的消息进行唤醒,发至到消息通道进行排队执行。
在本发明的一种具体实施方式中,在消息处理完成后,将链表中等待的消息进行唤醒,将唤醒的消息发送至消息通道队列进行重新排队执行。
在本发明的一种具体实施方式中,还包括定时扫描数据库表中未执行的消息记录,将未执行的消息重新发送到消息通道队列中进行重新排队执行。
本发明还提供了一种计算机设备,包括存储器和处理器,存储器中存储有可执行代码,处理器执行存储器中存储的可执行代码以实现上述的顺序消息处理方法。
本发明还提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器运行时执行上述的顺序消息处理方法。
本发明的有益效果为:
各团队服务无须再维护消息中间件,降低服务器费用。开发接入简单,开发效率提升。扩展能力增加,仅需简单的维护配置。解决订单推着中的消息顺序问题,解决掉顺序问题带来的业务错误。提供控制和管理的能力,可以查询消息的轨迹,并可以对消息进行手动补偿,无须技术人员的介入,提升运营效率。
以上结合附图实施例对本发明进行了详细说明,本领域中普通技术人员可根据上述说明对本发明做出种种变化例。因而,实施例中的某些细节不应构成对本发明的限定,本发明将以所附权利要求书界定的范围作为本发明的保护范围。
Claims (10)
1.一种顺序消息处理方法,其特征在于,包括如下步骤:
接收消息,并依据消息的主题将所接收的消息发送至对应的主题消息队列;
对主题消息队列中的消息进行存储;
根据消息的主题找出对应的订阅关系,并将消息分别发送至订阅关系所对应的消息通道队列;以及
对每一消息通道队列进行消费处理,以将消息通道队列中的消息按顺序的发送给订阅关系中对应的客户端接口。
2.如权利要求1所述的顺序消息处理方法,其特征在于,对每一消息通道队列进行消费处理的步骤包括:
对消息通道队列中的消息依据过滤脚本进行前置过滤;
创建未推送状态的一条推记录至数据库表以保存记录;
对消息通道队列中的消息进行并发控制以实现控制一条消息不会重复的出现在消息通道队列中;
对消息通道队列中的消息进行顺序控制以处理有序的消息;
对消息通道队列中的消息进行去重控制;
将消息通道队列中的消息发送到对应的客户端接口。
3.如权利要求1所述的顺序消息处理方法,其特征在于,在消息处理完成后,将链表中等待的消息进行唤醒,将唤醒的消息发送至消息通道队列进行重新排队执行。
4.如权利要求1所述的顺序消息处理方法,其特征在于,还包括定时扫描数据库表中未执行的消息记录,将未执行的消息重新发送到消息通道队列中进行重新排队执行。
5.一种顺序消息总线系统,其特征在于,包括:
接收模块,用于接收消息;
存储模块,用于存储消息;
分发模块,与所述接收模块连接,用于根据消息的主题找出对应的订阅关系,并将消息分别发送至订阅关系所对应的消息通道队列;以及
处理模块,与所述接收模块和所述存储模块连接,用于依据消息的主体将所接收的消息发送至对应的主题消息队列;还用于对每一消息通道队列进行消费处理,以将消息通道队列中的消息按顺序的发送给订阅关系中对应的客户端接口。
6.如权利要求5所述的顺序消息总线系统,其特征在于,所述处理模块包括前置过滤子模块、保存记录子模块、并发控制子模块、顺序控制子模块、去重控制子模块以及发送子模块;
所述前置过滤子模块用于对消息通道队列中的消息依据过滤脚本进行前置过滤;
所述保存记录子模块用于创建未推送状态的一条推记录至数据库表中;
所述并发控制子模块用于对消息通道队列中的消息进行并发控制以实现控制一条消息不会重复的出现在消息通道队列中;
所述顺序控制子模块用于对消息通道队列中的消息进行顺序控制;
所述去重控制子模块用于对消息通道队列中的消息进行去重控制;
所述发送子模块用于将消息通道队列中的消息发送到对应的客户端接口。
7.如权利要求5所述的顺序消息总线系统,其特征在于,还包括唤醒模块,用于在消息处理完成后,将链表中等待的消息进行唤醒,并将唤醒的消息发送至消息通道队列进行重新排队执行。
8.如权利要求5所述的顺序消息总线系统,其特征在于,还包括补偿处理模块,用于定时扫描数据库表中未执行的消息记录,并将未执行的消息重新发送到消息通道队列中进行重新排队执行。
9.一种计算机设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述存储器中存储的可执行代码以实现权利要求1至4中任一项所述的顺序消息处理方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器运行时执行如权利要求1至4中任一项所述的顺序消息处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310313074.XA CN116382943A (zh) | 2023-03-28 | 2023-03-28 | 顺序消息处理方法、总线系统、计算机设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310313074.XA CN116382943A (zh) | 2023-03-28 | 2023-03-28 | 顺序消息处理方法、总线系统、计算机设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116382943A true CN116382943A (zh) | 2023-07-04 |
Family
ID=86966874
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310313074.XA Pending CN116382943A (zh) | 2023-03-28 | 2023-03-28 | 顺序消息处理方法、总线系统、计算机设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116382943A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117234709A (zh) * | 2023-08-31 | 2023-12-15 | 广州市玄武无线科技股份有限公司 | 一种基于消息中间件的去重方法、系统、设备和介质 |
CN117370457A (zh) * | 2023-09-26 | 2024-01-09 | 浪潮智慧科技有限公司 | 一种多线程数据实时同步方法、设备及介质 |
-
2023
- 2023-03-28 CN CN202310313074.XA patent/CN116382943A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117234709A (zh) * | 2023-08-31 | 2023-12-15 | 广州市玄武无线科技股份有限公司 | 一种基于消息中间件的去重方法、系统、设备和介质 |
CN117370457A (zh) * | 2023-09-26 | 2024-01-09 | 浪潮智慧科技有限公司 | 一种多线程数据实时同步方法、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN116382943A (zh) | 顺序消息处理方法、总线系统、计算机设备及存储介质 | |
CN108874558B (zh) | 分布式事务的消息订阅方法、电子装置及可读存储介质 | |
EP2633423B1 (en) | Consistent messaging with replication | |
CN112069265B (zh) | 配置数据的同步方法、业务数据系统、计算机系统和介质 | |
CN106874334B (zh) | 一种数据处理方法及装置、资讯处理系统 | |
CN110266783B (zh) | 一种基于dds的铁路ctc系统通信平台 | |
CN114363407B (zh) | 消息服务方法及装置、可读存储介质及电子设备 | |
CN110691133A (zh) | 一种应用于网络通信设备的web服务拟态系统及方法 | |
US20060288037A1 (en) | Queued system event notification and maintenance | |
CN112118315A (zh) | 数据处理系统、方法、装置、电子设备和存储介质 | |
CN102035893A (zh) | 一种服务器主动推送数据的方法和系统 | |
CN113347164A (zh) | 基于区块链的分布式共识系统及方法、设备、存储介质 | |
CN102833080A (zh) | 一种应用软件的进程间通信方法和系统 | |
CN112559208A (zh) | 一种应用于政务云平台构建微服务mq的方法 | |
US8301750B2 (en) | Apparatus, system, and method for facilitating communication between an enterprise information system and a client | |
CN110300188A (zh) | 数据传输系统、方法和设备 | |
CN109451078A (zh) | 一种分布式架构下的事务处理方法和装置 | |
CN114116259A (zh) | 基于消息队列的消息实时推送方法、系统、装置及介质 | |
CN110727507B (zh) | 一种消息的处理方法、装置、计算机设备和存储介质 | |
US20060020678A1 (en) | Time and event controlled message processing | |
CN116319732A (zh) | 一种基于RabbitMQ的消息队列集中配置管理系统及方法 | |
CN115185787A (zh) | 处理事务日志的方法及装置 | |
US20080021955A1 (en) | Message oriented middleware server pipeline architecture | |
CN112825525B (zh) | 用于处理事务的方法和装置 | |
EP2693337B1 (en) | Method, system and computer program products for sequencing asynchronous messages in a distributed and parallel environment |
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 |