基于Redis的消息异步消费方法及装置与流程

文档序号:24235226发布日期:2021-03-12 13:06阅读:203来源:国知局
基于Redis的消息异步消费方法及装置与流程

本发明涉及通信技术领域,具体涉及一种基于redis的消息异步消费方法及装置。



背景技术:

现有技术中,消息中间件是用于系统间异步通讯的工具,是关注数据的发送和接收,利用高效可靠的异步消息传递机制集成分布式系统。主要用于解决应用解耦,异步消息,流量削锋等问题。

apachekafka是一个分布式发布-订阅消息的中间件,由于其具有高吞吐量,内置分区,复制和固有的容错能力,这使得其成为大多数大规模消息处理应用程序的首选中间件。

在消费kafka消息时,消费者需要自己存储消费消息的位置,因此消费者需要等待处理完一批消息后,再提交消息保存位置(同步处理模式),以保证后续应用已经完成对消息的处理,而不会出现消息没有处理完成就提交消息的情况出现。因此会产生一个问题,同步处理模式下,消费者处理本轮消息的等待时间会大幅影响消息的拉取速度,而异步模式又无法保证消费者在异常情况下处理kafka消息的可靠性与一致性。



技术实现要素:

根据本发明所提供的基于redis的消息异步消费方法及装置,通过应用端解决使用kafka的过程中,在规模扩展、高并发场景下出现的问题,能够实现大规模、高性能、高可用、高可靠、开放且可控可扩展的消息传输模式。

为了实现上述目的,本发明提供了一种基于redis的消息异步消费方法,包括:

响应于接收到的多个kafka消息,建立一同步线程;

将多个所述kafka消息存储在缓存中;

当所述同步线程中已生成的异步线程个数小于预设阈值,建立多个异步线程;分配所述多个kafka消息至所述多个异步线程中;

当建立多个异步线程的过程及/或分配所述多个kafka消息至所述多个异步线程中的过程出现异常时,提取所述缓存中的kafka消息的特征信息,以获取所述kafka消息的特征信息,以获取所述kafka消息。

优选地,基于redis的消息异步消费方法还包括:

将多个所述kafka消息在所位于的消息队列组合、多个所述kafka消息在所位于的消息队列组合的分区中位置、多个唯一全局事物标识、多个所述kafka消息的时间戳存放至所述同步线程中。

优选地,基于redis的消息异步消费方法还包括:

根据每个kafka消息在所位于的消息队列组合的分区中位置,生成每个kafka消息各自的唯一全局事物标识。

优选地,基于redis的消息异步消费方法还包括:

实时监听并接收多个kafka消息;

所述解析所述缓存中的kafka消息包括:根据所述kafka消息对应的唯一全局事务标识,解析所述缓存中的kafka消息。

优选地,基于redis的消息异步消费方法还包括:

解析所述异步线程中的kafka消息,以生成kafka消息内容;

当所述同步线程中所述kafka消息大于预设阈值时,解析所述同步线程中的多个kafka消息,以生成多个所述kafka消息内容。

第二方面,本发明提供一种基于redis的消息异步消费装置,该装置包括:

同步线程建立单元,用于响应于接收到的多个kafka消息,建立一同步线程;

消息缓存单元,用于将多个所述kafka消息存储在缓存中

消息分配单元,用于建立多个异步线程;分配所述多个kafka消息至所述多个异步线程中;

第一消息解析单元,用于提取所述缓存中的kafka消息的特征信息,以获取所述kafka消息。

优选地,基于redis的消息异步消费装置还包括:

时间戳存放单元,用于将多个所述kafka消息在所位于的消息队列组合、多个所述kafka消息在所位于的消息队列组合的分区中位置、多个唯一全局事物标识、多个所述kafka消息的时间戳存放至所述同步线程中。

优选地,基于redis的消息异步消费装置还包括:

标识生成单元,用于根据每个kafka消息在所位于的消息队列组合的分区中位置,生成每个kafka消息各自的唯一全局事物标识。

优选地,基于redis的消息异步消费装置还包括:

消息监控单元,实时监听并接收多个kafka消息;

所述第一消息解析单元具体用于根据所述kafka消息对应的唯一全局事务标识,解析所述缓存中的kafka消息。

优选地,基于redis的消息异步消费装置还包括:

消息内容生成单元,用于解析所述异步线程中的kafka消息,以生成kafka消息内容;

第二消息解析单元,用于当所述同步线程中所述kafka消息大于预设阈值时,解析所述同步线程中的多个kafka消息,以生成多个所述kafka消息内容。

第三方面,本发明提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现基于redis的消息异步消费方法的步骤。

第四方面,本发明提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现基于redis的消息异步消费方法的步骤。

从上述描述可知,本发明实施例提供的基于redis的消息异步消费方法及装置,首先响应于接收到的多个kafka消息,建立一同步线程;将多个kafka消息存储在缓存中;接着,当同步线程中kafka消息小于预设阈值时,建立多个异步线程;分配多个kafka消息至多个异步线程中;最后当建立多个异步线程的过程及/或分配多个kafka消息至多个异步线程中的过程出现异常时,解析缓存中的kafka消息,以生成多个kafka消息内容。本发明通过应用端解决使用kafka的过程中,在规模扩展、高并发场景下出现的问题,能够实现大规模、高性能、高可用、高可靠、开放且可控可扩展的消息传输模式。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本申请实施例的基于redis的消息异步消费系统的第一种结构示意图;

图2为本申请实施例的基于redis的消息异步消费系统的第二种结构示意图;

图3为本发明实施例中提供的基于redis的消息异步消费方法的流程示意图一;

图4为本发明实施例中提供的基于redis的消息异步消费方法的流程示意图二;

图5为本发明实施例中提供的基于redis的消息异步消费方法的流程示意图三;

图6为本发明实施例中提供的基于redis的消息异步消费方法的流程示意图四;

图7为本发明实施例中提供的基于redis的消息异步消费方法的流程示意图五;

图8为本发明具体应用实例中提供的基于redis的消息异步消费系统的结构示意图;

图9为本发明具体应用实例中提供的基于redis的消息异步消费方法的流程示意图;

图10为本发明实施例中针基于redis的消息异步消费装置的结构示意图一;

图11为本发明实施例中针基于redis的消息异步消费装置的结构示意图二;

图12为本发明实施例中针基于redis的消息异步消费装置的结构示意图三;

图13为本发明实施例中针基于redis的消息异步消费装置的结构示意图四;

图14为本发明实施例中针基于redis的消息异步消费装置的结构示意图五;

图15为本发明的实施例中的电子设备的结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本申请提供一基于redis的消息异步消费系统,参见图1,该系统可以为一种服务器a1,该服务器a1可以与多个kafka消息接收端b1通信连接,服务器a1还可以与多个数据库分别通信连接,或者如图2所示,这些数据库也可以之间设置在服务器a1中。其中,kafka消息接收端b1用于接收kafka消息。服务器a1在收取kafka消息之后,对该kafka消息发送至对应的子系统,并对该kafka消息进行处理。

可以理解的是,客户端c1可以包括智能手机、平板电子设备、网络机顶盒、便携式计算机、台式电脑、个人数字助理(pda)、车载设备、智能穿戴设备等。其中,智能穿戴设备可以包括智能眼镜、智能手表、智能手环等。

在实际应用中,进行基于redis的消息异步消费的部分可以在如上述内容的服务器a1侧执行,即,如图1或图2所示的架构,也可以所有的操作都在客户端c1设备中完成。具体可以根据客户端设备的处理能力,以及用户使用场景的限制等进行选择。本申请对此不作限定。若所有的操作都在客户端设备中完成,客户端设备还可以包括处理器,用于进行对基于redis的消息异步消费结果的处理等操作。

上述的客户端c1设备可以具有通信模块(即通信单元),可以与远程的服务器进行通信连接,实现与服务器的数据传输。服务器可以包括基于redis的消息异步消费一侧的服务器,其他的实施场景中也可以包括中间平台的服务器,例如与基于redis的消息异步消费服务器有通信链接的第三方服务器平台的服务器。服务器可以包括单台计算机设备,也可以包括多个服务器组成的服务器集群,或者分布式装置的服务器结构。

服务器与客户端设备之间可以使用任何合适的网络协议进行通信,包括在本申请提交日尚未开发出的网络协议。网络协议例如可以包括tcp/ip协议、udp/ip协议、http协议、https协议等。当然,网络协议例如还可以包括在上述协议之上使用的rpc协议(remoteprocedurecallprotocol,远程过程调用协议)、rest协议(representationalstatetransfer,表述性状态转移协议)等。

需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。

本发明的实施例提供一种基于redis的消息异步消费方法的具体实施方式,参见图3,该方法具体包括如下内容:

步骤100:响应于接收到的多个kafka消息,建立一同步线程。

可以理解的是,消息的生产者:负责进行消息信息的推送,推送给指定的服务器;消息的消费者:负责通过服务器获取消息的内容;消息服务中间件(服务器):负责消息的存储,也就是当消费者来不及处理完全部消息的时候,可以在消息中间件之中进行消息内容的缓冲,所以消息中间件也往往被称为消息队列中间件;另外,同步线程是指当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作,其他线程才能对该内存地址进行操作,而其他线程又处于等待状态。

步骤200:将多个所述kafka消息存储在缓存中。

具体地,获取每条消息的kafka-offset(每个分区中,消息存储的位置,即消息处于队列中的第几个),生成唯一全局事物标识,将消息的topic、offset、全局事物标识、时间戳信息登记进入缓存。如果登记进入缓存的过程中出现连接缓存失败的情况,则进行失败计数,如连接缓存成功则计数清零。此过程还将检查缓存访问失败计数是否超过阈值,超过阈值,将不再将消息的信息登记进入缓存中,直接进行后续处理。

步骤300:当所述同步线程中已生成的异步线程个数小于预设阈值,建立多个异步线程;分配所述多个kafka消息至所述多个异步线程中。

具体地,为每一条kafka消息开启异步线程,访问异步线程池进行分配,当所述同步线程中所述kafka消息大于预设阈值时,同步线程开始解析所述同步线程中的多个kafka消息,以生成多个所述kafka消息内容的操作。当同步线程完成本批次消息分配工作后,不进行等待,直接进行后续操作。

步骤400:当建立多个异步线程的过程及/或分配所述多个kafka消息至所述多个异步线程中的过程出现异常时,提取所述缓存中的kafka消息的特征信息,以获取所述kafka消息。

具体地,当建立多个异步线程的过程及/或分配多个kafka消息至多个异步线程中的过程出现异常时,提取缓存中kafka消息的特征信息,根据特征信息到kafka消息队列上获取原本消息。

可以理解的是,通过步骤200将kafka消息备份至在缓存中,可以解决异步线程出现问题时的问题。即此种情况下,通过解析缓存中的kafka消息,并生成多个kafka消息内容。

从上述描述可知,本发明实施例提供的基于redis的消息异步消费方法,首先响应于接收到的多个kafka消息,建立一同步线程;将多个kafka消息存储在缓存中;接着,当同步线程中kafka消息小于预设阈值时,建立多个异步线程;分配多个kafka消息至多个异步线程中;最后当建立多个异步线程的过程及/或分配多个kafka消息至多个异步线程中的过程出现异常时,解析缓存中的kafka消息,以生成多个kafka消息内容。本发明提供的基于redis的消息异步消费方法不会因为消费者及后续处理环节的故障而导致消息丢失,可实现一种高可靠以及高一致的服务网关。

一实施例中,参见图4,基于redis的消息异步消费方法还包括:

步骤500:将多个所述kafka消息在所位于的消息队列组合、多个所述kafka消息在所位于的消息队列组合的分区中位置、多个唯一全局事物标识、多个所述kafka消息的时间戳存放至所述同步线程中。

异步线程池设置最大线程开启个数和异步排队队列深度,当排队消息超过队列深度,则由同步线程(同步处理模块)直接开始进行后续操作(解析异步线程中的kafka消息,以生成kafka消息内容;根据kafka消息内容同步调用指定的后续处理服务进行业务处理以及返回信息处理),完成后返回步骤500,继续进行下一条消息处理。

一实施例中,参见图5,基于redis的消息异步消费方法还包括:

步骤600:根据每个kafka消息在所位于的消息队列组合的分区中位置,生成每个kafka消息各自的唯一全局事物标识。

需要说明的是,全局唯一标识符(guid,globallyuniqueidentifier)是一种由算法生成的二进制长度为128位的数字标识符。guid主要用于在拥有多个节点、多台计算机的网络或系统中。

一实施例中,参见图6,基于redis的消息异步消费方法还包括:

步骤700:实时监听并接收多个kafka消息;

步骤400进一步包括:根据所述kafka消息对应的唯一全局事务标识,解析kafka消息中的消息特征,进而根据缓存中存储的全局事物id和消息在kafka中的特征,从kafka消息队列中获取到原消息。

具体地,根据guid,解析其对应的缓存中的kafka消息。

一实施例中,参见图7,基于redis的消息异步消费方法还包括:

步骤800:解析所述异步线程中的kafka消息,以生成kafka消息内容;

与同步处理相对,异步线程不用阻塞当前线程来等待处理完成,而是允许后续操作,直至其它线程将处理完成,并回调通知此线程。

步骤900:当所述同步线程中所述kafka消息大于预设阈值时,解析所述同步线程中的多个kafka消息,以生成多个所述kafka消息内容。

具体地,当同步线程的线程个数大于预设阈值时,不再生成新的一步线程,而转用主同步线程进行消息后续的解析以及分发工作,即步骤300在进行的同时,同步线程开始进行步骤1000的操作。当同步线程完成本批次消息分配工作后,不进行等待,直接进行后续操作。

一实施例中,基于redis的消息异步消费方法还包括:对kafka消息消费的结果进行批量提交,具体地:完成一批消息的分发操作后,向kafka进行本批次消息提交操作,使kafka记录被处理消息的最新位置(offset)。

以及定时监控,其主要包括四个部分:

(1)检查服务间调用失败次数是否超过阈值,超过阈值则通知监听模块暂停kafka监听,即停止获取新消息。

(2)检查服务网关服务在服务中心上是否注册正常,注册异常则则通知监听模块暂停kafka监听,即停止获取新消息。

(3)检查客户端是否有人工控制操作,客户端向缓存中写入控制监听模块开关的指令,如果存在新指令,则通知监听模块进行kafka监听器的“启动”“暂停”“刷新”操作,即对于新消息消费进行控制。

(4)查看缓存中存留的消息登记记录,根据时间戳筛选n分钟之前的消息(过期消息),提取消息的kafka-topic、partition、offset等信息,将本批次提取的所有过期消息的信息提交给步骤9重处理操作。

为进一步地说明本方案,本申请提供基于redis的消息异步消费方法的具体应用实例,该具体应用实例具体包括如下内容。

本具体应用实例还提供基于redis的消息异步消费系统,参见图8,该系统包括:kafka监听器、定时监控模块、同步处理单元、异步处理单元。每个模块的主要功能如下:

kafka监听器:1、kafka消息批量拉取与手动提交。2、消息接收开关。3、多实例下消费的负载均衡。

定时监控模块:1、定时检测注册中心上服务网关服务心跳。2、从缓存中获取超时消息、错误消息offset,从业务队列提取消息,回滚至重处理队列。3、当连续调用后续服务失败达到阈值,关闭消息接收开关(熔断处理)。4、通过定时缓存刷新实现客户端向服务网关的多实例同时广播消息,执行报文接收开关开启、关闭、暂停指令。

同步处理单元:1、缓存中记录所有消息offset。2、系统吞吐量控制。3、当后续处理服务达到速度上限时,通过异步线程池控制转为同步处理(动态限流)。4、缓存不可用情况下错误计数和缓存降级。5、生成业务唯一标识号gtrid。

异步处理单元:1、报头解析、格式检查。2、微服务路由。3、系统错消息重试、转存至数据库、客户端重处理。4、解析消息处理服务返回的结果。5、删除成功业务在缓存中的记录。6、服务间调用失败情况下的错误计数。另外,在本具体应用实例中,相关的名词解释如下:

topic:消息存放的主题,可以理解为多个存放消息的队列的组合。

partition:topic(主题)划分为多个分区,可以理解为存放消息的队列。

offset:每个partition(分区)中,消息存储的位置,即消息处于队列中的第几个。

基于上述的基于redis的消息异步消费系统,参见图9,基于redis的消息异步消费方法具体包括:

s1:获取kafka消息。

监听模块监听到kafka消息,开启一个同步线程,一次收取n条消息,开启循环,对每条消息进行步骤s2处理。

s2:对kafka消息进行缓存登记。

同步线程获取每条消息的kafka-offset,根据uuid生成唯一全局事物标识,将消息的topic、offset、全局事物标识、时间戳信息登记进入缓存,开始步骤s3。如果登记进入缓存的过程中出现连接缓存失败的情况,则进行失败计数,如连接缓存成功则计数清零。此过程还将检查缓存访问失败计数是否超过阈值,超过阈值,将不再将消息的信息登记进入缓存中,直接进行后续步骤s3处理。

s3:对kafka消息进行分配异步线程。

具体地,为每一条消息开启异步线程,访问异步处理模块中的异步线程池进行分配,异步处理模块进行步骤s5、s6的操作,主线程(同步处理模块)开始进行步骤4操作。当主线程完成本批次消息分配工作后,不进行等待,直接进行步骤7操作。

异步线程池设置最大线程开启个数和异步排队队列深度,当排队消息超过队列深度,则由主线程(同步处理模块)直接开始进行步骤s5、s6的操作,完成后返回步骤s2,继续进行下一条kafka消息处理。

s4:对同步线程进行休眠操作。

同步处理模块在每一条消息处理完成步骤s3处理后,根据指定公式和输入参数进行sleep操作,用以主动控制系统吞吐量,完成等待后,返回步骤s2,进行下一条消息的处理。

s5:对kafka消息进行处理。

异步处理模块解析消息,根据消息内容同步调用指定的后续处理服务进行业务处理。

s6:返回kafka消息处理结果。

具体地,根据返回信息的不同,进行不同的处理,有以下三种情况:

(1)返回信息返回:“后续处理服务失败”或“返回值为空”:重新调起处理服务指定次数,如果全部失败则写入数据库(异常信息暂存表),并根据全局事物标识删除缓存中登记的信息。

(2)未正确返回信息,服务网关调用后续服务抛错:不删除缓存中存储的offset。并进行调用失败计数,如调用失败次数达到上限,通知定时监控模块,停止从kafka中获取新的消息。

(3)返回信息返回:“业务报错”或“处理成功”:根据消息的全局事物标识删除缓存中登记的信息,调用失败计数清零。

s7:批量提交。

异步处理模块完成一批消息的分发操作后,手动向kafka进行本批次消息提交操作,使kafka记录被处理消息的最新位置(offset)。

需要说明的是,在收到重处理请求时,开启一个新的kafka消费者,针对本批次的消息开启循环逐条处理,每条消息根据登记记录中的topicoffset信息,消费者连接kafkatopic根据offset找到指定位置的消息内容,并且不改变当前服务网关消费最新数据的偏移量,获取本批次全部消息的消息内容后,销毁kafka消费者开启kafka生产者,将消息内容重新放置至专门进行重处理的kafkatopic中,由专门对接此topic的服务网关实例(仅配置不同,应用相同)进行新一轮的消息处理,以此方式达到消息重处理的目的。

另外,在基于redis的消息异步消费方法中,时间戳的记录与异步处理单元调用失败自动重处理的判断依据具体为:在每条消息被消费前,同步处理模块均将消息的时间戳登记在缓存中,异步处理模块处理成功后,删除时间戳,完成消息处理。当异步处理模块在调用后续处理服务时发生调用失败,则不会删除时间戳。接着,定时监控模块会不断轮询缓存中的时间戳,将n分钟之前的历史登记记录取出,进行重处理。此处的设计是由于系统对单条消息的处理有一定的时限,设置的n分钟超时时间将远大于单条消息的处理时长,超过n分钟,则足以说明此条消息处理失败或处理进程异常僵死。

调用失败自动重处理的处理逻辑包括:当定时监控模块查找出缓存中n分钟之前的登记记录(可能为列表,有多条n分钟之前的记录),开启一个新的kafka消费者,根据登记记录中的topicoffset信息,消费者连接kafkatopic获取指定offset的信息内容,并且不改变当前服务网关消费topic的位置。获取(列表)中的全部信息内容后,销毁消费者,将消息内容重新放置至专门进行重处理的kafkatopic中,由专门对接此topic的服务网关实例(仅配置不同,应用相同)进行新一轮的消息处理。

系统错的判断依据及人工重处理过程包括:当异步处理模块在调用后续处理服务时调用完成,返回指定系统错误码,或未返回错误码时,则判断为系统错。当出现系统错时,由于此类错误可能与业务紧密相关,首先进行指定次数的重复调用后续处理服务,多次调用均为系统错后,异步处理单元将原消息压缩写入数据库的“错误消息暂存表”,通过客户端可以实时对表中数据进行查看、清空、重处理等操作。

当客户端执行对系统错的重处理操作时,客户端向服务网关的系统错重处理方法发送指令,重处理方法根据指令获取指定消息的完整内容,重新放置至专门进行重处理的kafkatopic中,由专门对接此topic的服务网关实例(仅配置不同,应用相同)进行新一轮的消息处理。

从上述描述可知,本发明实施例提供的基于redis的消息异步消费方法,首先响应于接收到的多个kafka消息,建立一同步线程;将多个消息在kafka队列中的特征值存储在缓存中;接着,当同步线程中kafka消息小于预设阈值时,建立多个异步线程;分配多个kafka消息至多个异步线程中;最后当建立多个异步线程的过程及/或分配多个kafka消息至多个异步线程中的过程出现异常时,解析缓存中的kafka消息,以生成多个kafka消息内容。本发明的具体应用实例所提供的基于redis的消息异步消费方法具有以下有益效果:

1.异步消费kafka消息,当消费者或后续处理环节发生故障时,自动回滚超时、错误消息,并进行重处理。

2.多实例下的kafka消息接收开关,用户可通过redis写入的方式实现对服务网关多个实例的广播控制。

3.定时检测服务网关是否在服务注册中心完成注册。

4.当网关连续调用后续服务失败达到阈值,可进行熔断和熔断恢复。

5.当redis不可用,自动进行redis降级,不影响消息处理。

6.主动的kafka消息流量控制。

7.当后续处理服务达到处理性能上限时,服务网关通过处理延时感知,并通过异步线程池进行动态限流。

8.用户可为网关调用后续服务设计指定错误返回码,服务网关识别到指定错误返回码,将消息记入数据库的“错误暂存表”。

基于同一发明构思,本申请实施例还提供了基于redis的消息异步消费装置,可以用于实现上述实施例所描述的方法,如下面的实施例。由于基于redis的消息异步消费装置解决问题的原理与基于redis的消息异步消费方法相似,因此基于redis的消息异步消费装置的实施可以参见基于redis的消息异步消费方法实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的系统较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。

本发明的实施例提供一种能够实现基于redis的消息异步消费方法的基于redis的消息异步消费装置的具体实施方式,参见图10,基于redis的消息异步消费装置具体包括如下内容:

同步线程建立单元10,用于响应于接收到的多个kafka消息,建立一同步线程;

消息缓存单元20,用于将多个所述kafka消息存储在缓存中

消息分配单元30,用于建立多个异步线程;分配所述多个kafka消息至所述多个异步线程中;

第一消息解析单元40,用于提取所述缓存中的kafka消息的特征信息,以获取所述kafka消息的特征信息,以获取所述kafka消息。

优选地,参见图11,基于redis的消息异步消费装置还包括:

时间戳存放单元50,用于将多个所述kafka消息在所位于的消息队列组合、多个所述kafka消息在所位于的消息队列组合的分区中位置、多个唯一全局事物标识、多个所述kafka消息的时间戳存放至所述同步线程中。

优选地,参见图12,基于redis的消息异步消费装置还包括:

标识生成单元60,用于根据每个kafka消息在所位于的消息队列组合的分区中位置,生成每个kafka消息各自的唯一全局事物标识。

优选地,参见图13,基于redis的消息异步消费装置还包括:

消息监控单元70,实时监听并接收多个kafka消息;

所述第一消息解析单元40具体用于根据所述kafka消息对应的唯一全局事务标识,解析所述缓存中的kafka消息。

优选地,参见图14,基于redis的消息异步消费装置还包括:

消息内容生成单元80,用于解析所述异步线程中的kafka消息,以生成kafka消息内容;

第二消息解析单元90,用于当所述同步线程中所述kafka消息大于预设阈值时,解析所述同步线程中的多个kafka消息,以生成多个所述kafka消息内容。

从上述描述可知,本发明实施例提供的基于redis的消息异步消费装置,首先响应于接收到的多个kafka消息,建立一同步线程;将多个kafka消息存储在缓存中;接着,当同步线程中kafka消息小于预设阈值时,建立多个异步线程;分配多个kafka消息至多个异步线程中;最后当建立多个异步线程的过程及/或分配多个kafka消息至多个异步线程中的过程出现异常时,解析缓存中的kafka消息,以生成多个kafka消息内容。本发明通过应用端解决使用kafka的过程中,在规模扩展、高并发场景下出现的问题,能够实现大规模、高性能、高可用、高可靠、开放且可控可扩展的消息传输模式。

本申请的实施例还提供能够实现上述实施例中的基于redis的消息异步消费方法中全部步骤的一种电子设备的具体实施方式,参见图15,电子设备具体包括如下内容:

处理器(processor)1201、存储器(memory)1202、通信接口(communicationsinterface)1203和总线1204;

其中,处理器1201、存储器1202、通信接口1203通过总线1204完成相互间的通信;通信接口1203用于实现服务器端设备、功率测量设备以及用户端设备等相关设备之间的信息传输。

处理器1201用于调用存储器1202中的计算机程序,处理器执行计算机程序时实现上述实施例中的基于redis的消息异步消费方法中的全部步骤,例如,处理器执行计算机程序时实现下述步骤:

步骤100:响应于接收到的多个kafka消息,建立一同步线程;

步骤200:将多个所述kafka消息存储在缓存中;

步骤300:当所述同步线程中已生成的异步线程个数小于预设阈值,建立多个异步线程;分配所述多个kafka消息至所述多个异步线程中;

步骤400:当建立多个异步线程的过程及/或分配所述多个kafka消息至所述多个异步线程中的过程出现异常时,提取所述缓存中的kafka消息的特征信息,以获取所述kafka消息的特征信息,以获取所述kafka消息。

本申请的实施例还提供能够实现上述实施例中的基于redis的消息异步消费方法中全部步骤的一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述实施例中的基于redis的消息异步消费方法的全部步骤,例如,处理器执行计算机程序时实现下述步骤:

步骤100:响应于接收到的多个kafka消息,建立一同步线程;

步骤200:将多个所述kafka消息存储在缓存中;

步骤300:当所述同步线程中已生成的异步线程个数小于预设阈值,建立多个异步线程;分配所述多个kafka消息至所述多个异步线程中;

步骤400:当建立多个异步线程的过程及/或分配所述多个kafka消息至所述多个异步线程中的过程出现异常时,提取所述缓存中的kafka消息的特征信息,以获取所述kafka消息的特征信息,以获取所述kafka消息。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于硬件+程序类实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。

虽然本申请提供了如实施例或流程图的方法操作步骤,但基于常规或者无创造性的劳动可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或客户端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境)。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

本发明中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1