掌桥专利:专业的专利平台
掌桥专利
首页

技术领域

本发明涉及大数据技术的批量更新领域,尤其涉及一种消息处理方法、装置、设备及存储介质。

背景技术

消息队列中间件是分布式系统中重要的组件,主要解决应用解耦、异步消息、流量削峰和消息通讯等问题,实现高性能、高可用、可伸缩和最终一致性架构。

消息队列rabbitmq是常见的消息队列中间件之一,目前在市面上只提供基础的rabbitmq方法调用,常见的方法调用依赖包包括基于微框架springboot的高级消息队列协议amqp和基于安全工具包springcloud的消息驱动stream-rabbit。而amqp依赖包直接使用在项目中,由于amqp的调用方法入参为字符串,而非对象,使得创建消息队列的方法需要逐一调用或在一个类中逐个申明,不仅代码量大,而且通过类申明的方式无法根据互联网协议地址控制消费服务器,导致业务维护成本高和业务维护效率低,并且现有的消息队列缺少可控的批量消费消息,存在服务器资源浪费和消息吞吐率低的问题。

发明内容

本发明提供了一种消息处理方法、装置、设备及存储介质,用于提高业务维护效率和代码可读性,并提高消息处理效率。

为实现上述目的,本发明第一方面提供了一种消息处理方法,包括:实例化环境配置对象,通过预设的消费者工具类按照所述环境配置对象生成业务交换机和业务消息队列,并对所述业务交换机和所述业务消息队列建立对应的绑定关系,所述业务消息队列为实时消息队列或延迟消息队列;通过预设的消息中间件将已生产消息传入至所述业务交换机,通过所述业务交换机按照所述绑定关系将所述已生产消息传入至所述业务消息队列中,当所述已生产消息在所述延迟消息队列中等待预设的延迟发送时长时,将所述延迟发送时长到期的已生产消息传入至所述实时消息队列中,同一延迟消息队列对应的延迟发送时长相同;通过预设的订阅者接收所述实时消息队列推送的至少一个已生产消息,并将所述至少一个已生产消息缓存至预设的阻塞队列中;每隔预设的等待时长从所述预设的阻塞队列中批量读取每批次消息数据,在预设的消费者线程池中创建实际消费者线程,通过所述实际消费者线程对所述每批次消息数据进行业务处理。

可选的,在本发明第一方面的第一种实现方式中,所述实例化环境配置对象,通过预设的消费者工具类按照所述环境配置对象生成业务交换机和业务消息队列,并对所述业务交换机和所述业务消息队列建立对应的绑定关系,所述业务消息队列为实时消息队列或延迟消息队列,包括:实例化环境配置对象,并启动预设的消费者工具类,所述环境配置对象包括预设的实时交换机名、预设的实时消息队列名、预设的延迟交换机名、预设的延迟消息队列名和预设的延迟发送时长,所述预设的延迟发送时长与预设的队列序号规则一一对应;通过所述预设的消费者工具类按照所述预设的实时交换机名、所述预设的延迟交换机名、所述预设的实时消息队列名和所述预设的延迟消息队列名生成业务交换机和业务消息队列,所述业务交换机包括实时交换机和延迟交换机,所述业务消息队列包括实时消息队列和延迟消息队列;基于所述预设的队列序号规则和所述队列序号规则对应的延迟发送时长,分别设置延迟消息队列的延迟序号和延迟参数,并对所述业务交换机和所述业务消息队列建立对应的绑定关系。

可选的,在本发明第一方面的第二种实现方式中,所述通过预设的消息中间件将已生产消息传入至所述业务交换机,通过所述业务交换机按照所述绑定关系将所述已生产消息传入至所述业务消息队列中,当所述已生产消息在所述延迟消息队列中等待预设的延迟发送时长时,将所述延迟发送时长到期的已生产消息传入至所述实时消息队列中,同一延迟消息队列对应的延迟发送时长相同,包括:接收预设的生产者工具类发送的已生产消息,通过预设的消息中间件将所述已生产消息传入至所述业务交换机中,所述已生产消息携带有期望消费时效,所述期望消费时效用于指示已生产消息为实时消息或延迟消息;基于所述期望消费时效确定所述已生产消息对应的消息类别,根据所述消息类别从所述业务交换机中匹配对应的目标交换机,所述目标交换机为实时交换机或延迟交换机;通过所述目标交换机按照所述绑定关系将所述已生产消息传入至对应的业务消息队列中,同一延迟消息队列对应的延迟发送时长相同;当所述已生产消息在所述延迟消息队列中等待预设的延迟发送时长时,将所述延迟发送时长到期的已生产消息传入至所述实时交换机,并通过所述实时交换机将所述延迟发送时长到期的已生产消息存入至所述实时消息队列中。

可选的,在本发明第一方面的第三种实现方式中,所述通过预设的订阅者接收所述实时消息队列推送的至少一个已生产消息,并将所述至少一个已生产消息缓存至预设的阻塞队列中,包括:通过预设的订阅者接收所述实时消息队列推送的至少一个已生产消息,并对每个已生产消息进行数据格式转换,得到转换后的消息数据集;将所述转换后的消息数据集写入至预设的阻塞队列中,所述预设的阻塞队列为内存缓冲区。

可选的,在本发明第一方面的第四种实现方式中,所述每隔预设的等待时长从所述预设的阻塞队列中批量读取每批次消息数据,在预设的消费者线程池中创建实际消费者线程,通过所述实际消费者线程对所述每批次消息数据进行业务处理,包括:每隔预设的等待时长根据预设的每批次最大消费数量,从所述预设的阻塞队列中批量读取每批次消息数据,每批次消息数据的数量小于或者等于所述预设的每批次最大消费数量;按照预设的最大消费者线程数量在预设的消费者线程池中创建实际消费者线程,并通过所述实际消费者线程处理所述每批次消息数据,得到处理结果,并将所述处理结果发送至消息中间件,以使得所述消息中间件传入每个已生产消息对应的消息状态。

可选的,在本发明第一方面的第五种实现方式中,在所述每隔预设的等待时长从所述预设的阻塞队列中批量读取每批次消息数据,在预设的消费者线程池中创建实际消费者线程,通过所述实际消费者线程对所述每批次消息数据进行业务处理之后,所述消息处理方法还包括:通过预设的配置变更线程对所述环境配置对象进行周期扫描;当检测到所述环境配置对象存在配置信息变更时,获取变更后的环境配置对象,并按照所述变更后的环境配置对象传入预设的订阅者对应的订阅状态,并变更所述预设的消费者线程池大小。

可选的,在本发明第一方面的第六种实现方式中,在所述每隔预设的等待时长从所述预设的阻塞队列中批量读取每批次消息数据,在预设的消费者线程池中创建实际消费者线程,通过所述实际消费者线程对所述每批次消息数据进行业务处理之后,所述消息处理方法还包括:初始化实际消费者线程的链路标识;基于所述实际消费者线程的链路标识,将实际消费者线程的所有消费过程数据分别记录至预设的当前线程局部变量和预设的日志打印对象中。

本发明第二方面提供了一种消息处理装置,包括:生成模块,用于实例化环境配置对象,通过预设的消费者工具类按照所述环境配置对象生成业务交换机和业务消息队列,并对所述业务交换机和所述业务消息队列建立对应的绑定关系,所述业务消息队列为实时消息队列或延迟消息队列;传入模块,用于通过预设的消息中间件将已生产消息传入至所述业务交换机,通过所述业务交换机按照所述绑定关系将所述已生产消息传入至所述业务消息队列中,当所述已生产消息在所述延迟消息队列中等待预设的延迟发送时长时,将所述延迟发送时长到期的已生产消息传入至所述实时消息队列中,同一延迟消息队列对应的延迟发送时长相同;缓存模块,用于通过预设的订阅者接收所述实时消息队列推送的至少一个已生产消息,并将所述至少一个已生产消息缓存至预设的阻塞队列中;处理模块,用于每隔预设的等待时长从所述预设的阻塞队列中批量读取每批次消息数据,在预设的消费者线程池中创建实际消费者线程,通过所述实际消费者线程对所述每批次消息数据进行业务处理。

可选的,在本发明第二方面的第一种实现方式中,所述生成模块具体用于:实例化环境配置对象,并启动预设的消费者工具类,所述环境配置对象包括预设的实时交换机名、预设的实时消息队列名、预设的延迟交换机名、预设的延迟消息队列名和预设的延迟发送时长,所述预设的延迟发送时长与预设的队列序号规则一一对应;通过所述预设的消费者工具类按照所述预设的实时交换机名、所述预设的延迟交换机名、所述预设的实时消息队列名和所述预设的延迟消息队列名生成业务交换机和业务消息队列,所述业务交换机包括实时交换机和延迟交换机,所述业务消息队列包括实时消息队列和延迟消息队列;基于所述预设的队列序号规则和所述队列序号规则对应的延迟发送时长,分别设置延迟消息队列的延迟序号和延迟参数,并对所述业务交换机和所述业务消息队列建立对应的绑定关系。

可选的,在本发明第二方面的第二种实现方式中,所述传入模块具体用于:接收预设的生产者工具类发送的已生产消息,通过预设的消息中间件将所述已生产消息传入至所述业务交换机中,所述已生产消息携带有期望消费时效,所述期望消费时效用于指示已生产消息为实时消息或延迟消息;基于所述期望消费时效确定所述已生产消息对应的消息类别,根据所述消息类别从所述业务交换机中匹配对应的目标交换机,所述目标交换机为实时交换机或延迟交换机;通过所述目标交换机按照所述绑定关系将所述已生产消息传入至对应的业务消息队列中,同一延迟消息队列对应的延迟发送时长相同;当所述已生产消息在所述延迟消息队列中等待预设的延迟发送时长时,将所述延迟发送时长到期的已生产消息传入至所述实时交换机,并通过所述实时交换机将所述延迟发送时长到期的已生产消息存入至所述实时消息队列中。

可选的,在本发明第二方面的第三种实现方式中,所述缓存模块具体用于:通过预设的订阅者接收所述实时消息队列推送的至少一个已生产消息,并对每个已生产消息进行数据格式转换,得到转换后的消息数据集;将所述转换后的消息数据集写入至预设的阻塞队列中,所述预设的阻塞队列为内存缓冲区。

可选的,在本发明第二方面的第四种实现方式中,所述处理模块具体用于:每隔预设的等待时长根据预设的每批次最大消费数量,从所述预设的阻塞队列中批量读取每批次消息数据,每批次消息数据的数量小于或者等于所述预设的每批次最大消费数量;按照预设的最大消费者线程数量在预设的消费者线程池中创建实际消费者线程,并通过所述实际消费者线程处理所述每批次消息数据,得到处理结果,并将所述处理结果发送至消息中间件,以使得所述消息中间件传入每个已生产消息对应的消息状态。

可选的,在本发明第二方面的第五种实现方式中,所述消息处理装置还包括:扫描模块,用于通过预设的配置变更线程对所述环境配置对象进行周期扫描;变更模块,用于当检测到所述环境配置对象存在配置信息变更时,获取变更后的环境配置对象,并按照所述变更后的环境配置对象传入预设的订阅者对应的订阅状态,并变更所述预设的消费者线程池大小。

可选的,在本发明第二方面的第六种实现方式中,所述消息处理装置还包括:初始化模块,用于初始化实际消费者线程的链路标识;记录模块,用于基于所述实际消费者线程的链路标识,将实际消费者线程的所有消费过程数据分别记录至预设的当前线程局部变量和预设的日志打印对象中。

本发明第三方面提供了一种消息处理设备,包括:存储器和至少一个处理器,所述存储器中存储有指令;所述至少一个处理器调用所述存储器中的所述指令,以使得所述消息处理设备执行上述的消息处理方法。

本发明的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述的消息处理方法。

本发明提供的技术方案中,实例化环境配置对象,通过预设的消费者工具类按照所述环境配置对象生成业务交换机和业务消息队列,并对所述业务交换机和所述业务消息队列建立对应的绑定关系,所述业务消息队列为实时消息队列或延迟消息队列;通过预设的消息中间件将已生产消息传入至所述业务交换机,通过所述业务交换机按照所述绑定关系将所述已生产消息传入至所述业务消息队列中,当所述已生产消息在所述延迟消息队列中等待预设的延迟发送时长时,将所述延迟发送时长到期的已生产消息传入至所述实时消息队列中,同一延迟消息队列对应的延迟发送时长相同;通过预设的订阅者接收所述实时消息队列推送的至少一个已生产消息,并将所述至少一个已生产消息缓存至预设的阻塞队列中;每隔预设的等待时长从所述预设的阻塞队列中批量读取每批次消息数据,在预设的消费者线程池中创建实际消费者线程,通过所述实际消费者线程对所述每批次消息数据进行业务处理。本发明实施例中,通过预设的消费者工具类按照环境配置对象在消息中间件中创建业务交换机和业务消息队列,降低了开发成本和业务维护成本,并提高了业务维护效率和代码可读性。通过在预设的消费者线程池中创建实际消费者线程,调用实际消费者线程对阻塞队列中的每批次消息数据进行批量消费,降低了服务器资源消耗和压力,并提高了消息处理效率。

附图说明

图1为本发明实施例中消息处理方法的一个实施例示意图;

图2为本发明实施例中消息处理方法的另一个实施例示意图;

图3为本发明实施例中消息处理装置的一个实施例示意图;

图4为本发明实施例中消息处理装置的另一个实施例示意图;

图5为本发明实施例中消息处理设备的一个实施例示意图。

具体实施方式

本发明实施例提供了一种消息处理方法、装置、设备及存储介质,用于通过消费者工具类批量消费消息,降低服务器资源消耗和压力,并提高消息处理效率。

本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”或“具有”及其任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

为便于理解,下面对本发明实施例的具体流程进行描述,请参阅图1,本发明实施例中消息处理方法的一个实施例包括:

101、实例化环境配置对象,通过预设的消费者工具类按照环境配置对象生成业务交换机和业务消息队列,并对业务交换机和业务消息队列建立对应的绑定关系,业务消息队列为实时消息队列或延迟消息队列。

具体的,服务器启动预设的消费者工具类,并实例化环境配置对象;服务器调用预设的消费者工具类,按照环境配置对象创建业务交换机和业务消息队列,业务交换机为实时交换机和/或延迟交换机,业务消息队列为实时消息队列和/或延迟消息队列,业务交换机和业务消息队列基于预设的路由规则一一映射绑定,其中,预设的路由规则用于指示将业务交换机和业务消息队列进行绑定的配置信息,该预设的路由规则可以按照实际业务应用场景进行动态配置。也就是,实时交换机与实时消息队列存在一一对应关系,延迟交换机和延迟消息队列存在一一对应关系,延迟消息队列和实时交换机存在多对一关系。

可以理解的是,本发明的执行主体可以为消息处理装置,还可以是终端或者服务器,具体此处不做限定。本发明实施例以服务器为执行主体为例进行说明。

102、通过预设的消息中间件将已生产消息传入至业务交换机,通过业务交换机按照绑定关系将已生产消息传入至业务消息队列中,当已生产消息在延迟消息队列中等待预设的延迟发送时长时,将延迟发送时长到期的已生产消息传入至实时消息队列中,同一延迟消息队列对应的延迟发送时长相同。

具体的,服务器接收预设的生产者工具类生成并发送的已生产消息,已生产消息为实时消息或延迟消息;服务器通过业务交换机按照对应的绑定关系将实时消息或延迟消息分别传入至实时消息队列或延迟消息队列中,同一延迟消息队列中的延迟发送时长相同。例如,已生产消息A、B、C、D、E和F,分别对应的延迟发送时长为5秒、3秒、3秒、1秒、5秒和3秒,延迟队列序号包含queue_005、queue_003和queue_001,其中,延迟发送时长5秒对应的延迟队列序号为queue_005,延迟发送时长3秒对应的延迟队列序号为queue_003,延迟发送时长1秒对应的延迟队列序号为queue_001,则服务器将已生产消息A和E推送至延迟队列序号为queue_005的延迟消息队列,服务器将已生产消息B、C和F推送至延迟队列序号为queue_003的延迟消息队列,服务器将已生产消息D推送至延迟队列序号为queue_001的延迟消息队列。

103、通过预设的订阅者接收实时消息队列推送的至少一个已生产消息,并将至少一个已生产消息缓存至预设的阻塞队列中。

其中,预设的订阅者的数量可以为0个,也可以为多个,具体此处不做限定,当预设的订阅者的数量为0时,服务器确定暂不消费,仅用作临时存储消息,当并发峰值小于预期阈值时,服务器重新设置预设的订阅者的数量大于0,再次进行消息消费。具体的,服务器通过预设的订阅者接收实时消息队列传入的至少一个已生产消息,服务器通过预设的订阅者将至少一个已生产消息存入至预设的阻塞队列中。

104、每隔预设的等待时长从预设的阻塞队列中批量读取每批次消息数据,在预设的消费者线程池中创建实际消费者线程,通过实际消费者线程对每批次消息数据进行业务处理。

具体的,服务器按照预设的等待时长周期性从预设的阻塞队列中批量读取预设的每批次最大消费数量的数据,得到读取结果;当读取结果为空值,服务器继续执行下一次数据读取操作;当读取结果不为空值时,服务器在预设的消费者线程池中创建实际消费者线程,服务器通过实际消费者线程对每批次消息数据进行业务处理。可以理解的是,服务器不仅能灵活控制每批次消费的消息数量,还能对每批次消息数据进行多线程消费,进而服务器通过批量处理方式提高了消息处理效率。

进一步地,服务器将每批次消息数据存储于区块链数据库中,具体此处不做限定。

本发明实施例中,通过预设的消费者工具类按照环境配置对象在消息中间件中创建业务交换机和业务消息队列,降低了开发成本和业务维护成本,并提高了业务维护效率和代码可读性。通过在预设的消费者线程池中创建实际消费者线程,调用实际消费者线程对阻塞队列中的每批次消息数据进行批量消费,降低了服务器资源消耗和压力,并提高了消息处理效率。

请参阅图2,本发明实施例中消息处理方法的另一个实施例包括:

201、实例化环境配置对象,通过预设的消费者工具类按照环境配置对象生成业务交换机和业务消息队列,并对业务交换机和业务消息队列建立对应的绑定关系,业务消息队列为实时消息队列或延迟消息队列。

其中,环境配置对象为RabbitContext,应用于消息中间件rabbitmq中,环境配置对象包括预设的每批次最大消费数量和预设的最大消费者线程数量,还可以包括预设的等待时长和订阅者服务器网际协议地址(internet protocol address,IP),预设的等待时长用于指示预估拉取最大数量消息的等待时长。

可选的,服务器实例化环境配置对象,并启动预设的消费者工具类,环境配置对象包括预设的实时交换机名、预设的实时消息队列名、预设的延迟交换机名、预设的延迟消息队列名和预设的延迟发送时长,预设的延迟发送时长与预设的队列序号规则一一对应;服务器通过预设的消费者工具类按照预设的实时交换机名、预设的延迟交换机名、预设的实时消息队列名和预设的延迟消息队列名生成业务交换机和业务消息队列,业务交换机包括实时交换机和延迟交换机,业务消息队列包括实时消息队列和延迟消息队列;服务器基于预设的队列序号规则和队列序号规则对应的延迟发送时长,分别设置延迟消息队列的延迟序号和延迟参数,并对业务交换机和业务消息队列建立对应的绑定关系。需要说明的是,实时交换机的数量和实时消息队列的数量均为1个、延迟交换机的数量和延迟消息队列的数量均可以大于或等于0,并且在同一环境配置对象中,实时交换机的数量和实时消息队列的数量相等,延迟交换机的数量和延迟消息队列的数量相等。

202、通过预设的消息中间件将已生产消息传入至业务交换机,通过业务交换机按照绑定关系将已生产消息传入至业务消息队列中,当已生产消息在延迟消息队列中等待预设的延迟发送时长时,将延迟发送时长到期的已生产消息传入至实时消息队列中,同一延迟消息队列对应的延迟发送时长相同。

需要说明的是,已生产消息可为实时消息,已生产消息在延迟队列中到达指定时长(也就是,预设的延迟发送时长)后,该已生产消息会被传入至实时交换机中,再由实时交换机将其传入至实时消息队列中。

可选的,首先,服务器接收预设的生产者工具类发送的已生产消息,通过预设的消息中间件将已生产消息传入至业务交换机中,已生产消息携带有期望消费时效,期望消费时效用于指示已生产消息为实时消息或延迟消息;然后,服务器基于期望消费时效确定已生产消息对应的消息类别,根据消息类别从业务交换机中匹配对应的目标交换机,目标交换机为实时交换机或延迟交换机;接着,服务器通过目标交换机按照绑定关系将已生产消息传入至对应的业务消息队列中,同一延迟消息队列对应的延迟发送时长相同,也就是,服务器将实时消息传入到实时交换机,然后通过实时交换机将实时消息传入到实时消息队列,服务器将延迟消息传入到期望消费时效对应序号的延迟交换机,然后通过延迟交换机将延迟消息传入对应的延迟队列。最后,当已生产消息在延迟消息队列中等待预设的延迟发送时长时,服务器将延迟发送时长到期的已生产消息传入至实时交换机,并通过实时交换机将延迟发送时长到期的已生产消息存入至实时消息队列中。

可以理解的是,同一消息队列中的已生产消息对应的延迟发送时长相同;当已生产消息对应的业务消息队列为延迟消息队列,并且已生产消息对应的延迟发送时长到期时,服务器通过消息中间件将已生产消息存入至实时交换机中,并通过实时交换机将延迟发送时长到期的已生产消息存入至实时消息队列中,该延迟消息队列与对应的实时交换机存在预设的绑定规则,其中,预设的绑定规则用于指示将延迟消息队列中的已生产消息传入至对应的实时消息队列中。

203、通过预设的订阅者接收实时消息队列推送的至少一个已生产消息,并将至少一个已生产消息缓存至预设的阻塞队列中。

其中,至少一个已生产消息可以包括实时消息队列中已经存在的消息,还可以包括延迟消息队列传入的消息。实时消息队列中的实时消息由预设的订阅者进行处理,并且同一个订阅者一次可以处理多条实时消息(也就是,至少一个已生产消息),多个订阅者可以同时对同一个实时消息队列中的实时消息进行处理,例如,实时消息队列A有3个预设的订阅者,每个订阅者每次订阅4条消息,所以,3个预设的订阅者最多可同时处理3*4,也就是12条消息,提高了实时消息处理效率。

可选的,服务器通过预设的订阅者接收实时消息队列推送的至少一个已生产消息,并对每个已生产消息进行数据格式转换,得到转换后的消息数据集;服务器将转换后的消息数据集写入至预设的阻塞队列中,预设的阻塞队列为内存缓冲区。可以理解的是,对于分布式系统,为了兼容不同依赖包对消息中间件推送的格式不同,服务器对每个已生产消息进行数据格式转换。服务器通过预设的生产者工具类发送消息时,服务器将环境配置对象转换为JS对象简谱JSON字符串,然后服务器再通过预设的消费者工具类将JSON字符串转换为对象进行处理。

204、每隔预设的等待时长从预设的阻塞队列中批量读取每批次消息数据,在预设的消费者线程池中创建实际消费者线程,通过实际消费者线程对每批次消息数据进行业务处理。

其中,实际消费者线程的数量可以为1个,可以为多个,具体此处不做限定,当预设的阻塞队列中的消息数据数量为0时,实际消费者线程的数量为0。可选的,服务器每隔预设的等待时长根据预设的每批次最大消费数量,从预设的阻塞队列中批量读取每批次消息数据,每批次消息数据的数量小于或者等于预设的每批次最大消费数量;服务器按照预设的最大消费者线程数量在预设的消费者线程池中创建实际消费者线程,并通过实际消费者线程处理每批次消息数据,得到处理结果,并将处理结果发送至消息中间件,以使得消息中间件传入每个已生产消息对应的消息状态。也就是,当实际消费者线程通知消息中间件处理结果为处理完成时,消息中间件才会推新的批次消息至预设的阻塞队列。预设的每批次最大消费数量用于指示每次从预设的阻塞队列中批量读取的消息数据最大数量阈值,预设的最大消费者线程数量用于指示实际消费者线程的最大数量阈值。预设的每批次最大消费数量和预设的最大消费者线程数量预先设置在环境配置对象中,并根据实际应用场景进行动态配置。

进一步地,服务器初始化实际消费者线程的链路标识;服务器基于实际消费者线程的链路标识,将实际消费者线程的所有消费过程数据分别记录至预设的当前线程局部变量和预设的日志打印对象中。可以理解的是,服务器按照实际消息者线程的链路标识将实际消费者线程的所有消费过程数据记录至预设的当前线程局部变量和预设的日志打印对象MDC中,以使得所有消费过程可以被链路跟踪,降低了业务维护成本。

205、通过预设的配置变更线程对环境配置对象进行周期扫描。

具体的,服务器采用预设的配置变量存储环境配置对象的配置信息,预设的配置变量包括处理线程最大数、单次消费最大数量和订阅者网际协议地址;当预设的消费者工具类启动时,处理线程最大数、单次消费最大数量和订阅者网际协议地址分别和当前环境配置对象中各自对应的变量值是一致的;当服务器通过预设的配置变更线程周期性检测到处理线程最大数、单次消费最大数量和订阅者网际协议地址分别和当前环境配置对象中各自对应的变量值不一致时,服务器确定环境配置对象存在配置信息变更。

206、当检测到环境配置对象存在配置信息变更时,获取变更后的环境配置对象,并按照变更后的环境配置对象传入预设的订阅者对应的订阅状态,并变更预设的消费者线程池大小。

具体的,当检测到环境配置对象存在配置信息变更时,服务器获取变更后的环境配置对象,服务器按照变更后的环境配置对象(也就是,处理线程最大数、单次消费最大数量和订阅者网际协议地址)传入预设的订阅者的订阅状态,并变更预设的消费者线程池大小,然后,服务器将环境配置对象中的变量赋值给当前线程对应的变量,以便下次比对。当订阅者网际协议地址和当前服务器网际协议地址不一致时,服务器将环境配置对象中实时消息队列中的订阅者(也就是,预设的订阅者)全部注销;当订阅者网际协议地址和当前服务器网际协议地址一致,并且线程数量和订阅者数量不一致,服务器注册或注销环境配置对象中实时消息队列中的订阅者;当每批次消费数量不一致时,服务器注销全部订阅者,并重新注册环境配置对象中实时消息队列中的订阅者。进一步地,当已生产消息,并且预设的每批次最大消费数量发生变更时,服务器通过预设的配置变更线程重新初始化环境配置对象中实时消息队列中的所有订阅者;当预设的最大消费者线程数发生变更时,服务器注册或注销环境配置对象中实时消息队列中的部分订阅者,并扩大或缩小预设的消费者线程池大小。

本发明实施例中,通过预设的消费者工具类按照环境配置对象在消息中间件中创建业务交换机和业务消息队列,降低了开发成本和业务维护成本,并提高了业务维护效率和代码可读性。通过在预设的消费者线程池中创建实际消费者线程,调用实际消费者线程对阻塞队列中的每批次消息数据进行批量消费,降低了服务器资源消耗和压力,并提高了消息处理效率。

上面对本发明实施例中消息处理方法进行了描述,下面对本发明实施例中消息处理装置进行描述,请参阅图3,本发明实施例中消息处理装置的一个实施例包括:

生成模块301,用于实例化环境配置对象,通过预设的消费者工具类按照环境配置对象生成业务交换机和业务消息队列,并对业务交换机和业务消息队列建立对应的绑定关系,业务消息队列为实时消息队列或延迟消息队列;

传入模块302,用于通过预设的消息中间件将已生产消息传入至业务交换机,通过业务交换机按照绑定关系将已生产消息传入至业务消息队列中,当已生产消息在延迟消息队列中等待预设的延迟发送时长时,将延迟发送时长到期的已生产消息传入至实时消息队列中,同一延迟消息队列对应的延迟发送时长相同;

缓存模块303,用于通过预设的订阅者接收实时消息队列推送的至少一个已生产消息,并将至少一个已生产消息缓存至预设的阻塞队列中;

处理模块304,用于每隔预设的等待时长从预设的阻塞队列中批量读取每批次消息数据,在预设的消费者线程池中创建实际消费者线程,通过实际消费者线程对每批次消息数据进行业务处理。

进一步地,将每批次消息数据存储于区块链数据库中,具体此处不做限定。

本发明实施例中,通过预设的消费者工具类按照环境配置对象在消息中间件中创建业务交换机和业务消息队列,降低了开发成本和业务维护成本,并提高了业务维护效率和代码可读性。通过在预设的消费者线程池中创建实际消费者线程,调用实际消费者线程对阻塞队列中的每批次消息数据进行批量消费,降低了服务器资源消耗和压力,并提高了消息处理效率。

请参阅图4,本发明实施例中消息处理装置的另一个实施例包括:

生成模块301,用于实例化环境配置对象,通过预设的消费者工具类按照环境配置对象生成业务交换机和业务消息队列,并对业务交换机和业务消息队列建立对应的绑定关系,业务消息队列为实时消息队列或延迟消息队列;

传入模块302,用于通过预设的消息中间件将已生产消息传入至业务交换机,通过业务交换机按照绑定关系将已生产消息传入至业务消息队列中,当已生产消息在延迟消息队列中等待预设的延迟发送时长时,将延迟发送时长到期的已生产消息传入至实时消息队列中,同一延迟消息队列对应的延迟发送时长相同;

缓存模块303,用于通过预设的订阅者接收实时消息队列推送的至少一个已生产消息,并将至少一个已生产消息缓存至预设的阻塞队列中;

处理模块304,用于每隔预设的等待时长从预设的阻塞队列中批量读取每批次消息数据,在预设的消费者线程池中创建实际消费者线程,通过实际消费者线程对每批次消息数据进行业务处理。

可选的,生成模块301还可以具体用于:

实例化环境配置对象,并启动预设的消费者工具类,环境配置对象包括预设的实时交换机名、预设的实时消息队列名、预设的延迟交换机名、预设的延迟消息队列名和预设的延迟发送时长,预设的延迟发送时长与预设的队列序号规则一一对应;

通过预设的消费者工具类按照预设的实时交换机名、预设的延迟交换机名、预设的实时消息队列名和预设的延迟消息队列名生成业务交换机和业务消息队列,业务交换机包括实时交换机和延迟交换机,业务消息队列包括实时消息队列和延迟消息队列;

基于预设的队列序号规则和队列序号规则对应的延迟发送时长,分别设置延迟消息队列的延迟序号和延迟参数,并对业务交换机和业务消息队列建立对应的绑定关系。

可选的,传入模块302还可以具体用于:

接收预设的生产者工具类发送的已生产消息,通过预设的消息中间件将已生产消息传入至业务交换机中,已生产消息携带有期望消费时效,期望消费时效用于指示已生产消息为实时消息或延迟消息;

基于期望消费时效确定已生产消息对应的消息类别,根据消息类别从业务交换机中匹配对应的目标交换机,目标交换机为实时交换机或延迟交换机;

通过目标交换机按照绑定关系将已生产消息传入至对应的业务消息队列中,同一延迟消息队列对应的延迟发送时长相同;

当已生产消息在延迟消息队列中等待预设的延迟发送时长时,将延迟发送时长到期的已生产消息传入至实时交换机,并通过实时交换机将延迟发送时长到期的已生产消息存入至实时消息队列中。

可选的,缓存模块303还可以具体用于:

通过预设的订阅者接收实时消息队列推送的至少一个已生产消息,并对每个已生产消息进行数据格式转换,得到转换后的消息数据集;

将转换后的消息数据集写入至预设的阻塞队列中,预设的阻塞队列为内存缓冲区。

可选的,处理模块304还可以具体用于:

每隔预设的等待时长根据预设的每批次最大消费数量,从预设的阻塞队列中批量读取每批次消息数据,每批次消息数据的数量小于或者等于预设的每批次最大消费数量;

按照预设的最大消费者线程数量在预设的消费者线程池中创建实际消费者线程,并通过实际消费者线程处理每批次消息数据,得到处理结果,并将处理结果发送至消息中间件,以使得消息中间件传入每个已生产消息对应的消息状态。

可选的,消息处理装置还包括:

扫描模块305,用于通过预设的配置变更线程对环境配置对象进行周期扫描;

变更模块306,用于当检测到环境配置对象存在配置信息变更时,获取变更后的环境配置对象,并按照变更后的环境配置对象传入预设的订阅者对应的订阅状态,并变更预设的消费者线程池大小。

可选的,消息处理装置还包括:

初始化模块307,用于初始化实际消费者线程的链路标识;

记录模块308,用于基于实际消费者线程的链路标识,将实际消费者线程的所有消费过程数据分别记录至预设的当前线程局部变量和预设的日志打印对象中。

本发明实施例中,通过预设的消费者工具类按照环境配置对象在消息中间件中创建业务交换机和业务消息队列,降低了开发成本和业务维护成本,并提高了业务维护效率和代码可读性。通过在预设的消费者线程池中创建实际消费者线程,调用实际消费者线程对阻塞队列中的每批次消息数据进行批量消费,降低了服务器资源消耗和压力,并提高了消息处理效率。

上面图3和图4从模块化的角度对本发明实施例中的消息处理装置进行详细描述,下面从硬件处理的角度对本发明实施例中消息处理设备进行详细描述。

图5是本发明实施例提供的一种消息处理设备的结构示意图,该消息处理设备500可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(centralprocessing units,CPU)510(例如,一个或一个以上处理器)和存储器520,一个或一个以上存储应用程序533或数据532的存储介质530(例如一个或一个以上海量存储设备)。其中,存储器520和存储介质530可以是短暂存储或持久存储。存储在存储介质530的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对消息处理设备500中的一系列指令操作。更进一步地,处理器510可以设置为与存储介质530通信,在消息处理设备500上执行存储介质530中的一系列指令操作。

消息处理设备500还可以包括一个或一个以上电源540,一个或一个以上有线或无线网络接口550,一个或一个以上输入输出接口560,和/或,一个或一个以上操作系统531,例如Windows Serve,Mac OS X,Unix,Linux,FreeBSD等等。本领域技术人员可以理解,图5示出的消息处理设备结构并不构成对消息处理设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

本发明还提供一种计算机可读存储介质,该计算机可读存储介质可以为非易失性计算机可读存储介质,该计算机可读存储介质也可以为易失性计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令在计算机上运行时,使得计算机执行所述消息处理方法的步骤。

本发明还提供一种消息处理设备,所述消息处理设备包括存储器和处理器,存储器中存储有指令,所述指令被处理器执行时,使得处理器执行上述各实施例中的所述消息处理方法的步骤。

进一步地,所述计算机可读存储介质可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据区块链节点的使用所创建的数据等。

本发明所指区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层等。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

相关技术
  • 消息处理方法、消息处理装置、存储介质及电子设备
  • 消息处理方法、消息处理装置、电子设备及存储介质
技术分类

06120113023256