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

消息中间件的并发消费方法以及装置

文献发布时间:2023-06-19 09:26:02


消息中间件的并发消费方法以及装置

技术领域

本申请涉及大数据领域,尤其涉及消息中间件的并发消费领域。

背景技术

消息中间件通过提供消息传递和消息排队模型,在分布式环境下扩展进程间的通信。在实际应用环境中,例如短信通知服务、数据统计服务等都是依赖于消息中间件去消费这条消息来完成自己的业务逻辑。对于消息中间件,常见的角色大致有生产者(producer)、消费者(consumer)以及消息队列(Message Queue)。其中,在线程世界里,生产者就是生产消息的线程,也叫做生产线程。消费者就是消费消息的线程,也叫做消费线程。消息(Message)是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。消息队列是一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递。生产者只管把消息发布到消息队列中而不用管谁来取,消费者只管从消息队列中取消息而不管是谁发布的。这样生产者和消费者都不用知道对方的存在。

消息中间件的消费能力受限于消息中间件本身的架构与设计。例如,消息队列kafka(高吞吐量的分布式发布订阅消息系统)集群的同一个主题(topic)中,单个消费者的性能是每一个分区(partition)只能被一个消费者消费,kafka集群消费者的最大消费者数量取决于分区的数量,分区数量和单个消费者性能极大地约束了kafka集群的消费者性能,导致消费者的消费能力较差。尤其当系统遇到高并发请求时,由于消费者消费能力没有跟上生产者的生产能力,导致消息堆积甚至消息丢失。

发明内容

本申请实施例提供一种消息中间件的消息并发处理方法以及装置,以解决相关技术存在的问题,技术方案如下:

第一方面,本实施例提供了一种消息中间件的消息并发处理方法,包括:

消费者从消息队列中提取消息,并将提取的消息存储至缓存队列中;

采用线程池中的工作线程并发处理缓存队列中的消息,同时返回执行消费者从消息队列中提取消息并将提取的消息存储至缓存队列中的步骤,直至消息队列中的消息处理完成。

在一种实施方式中,还包括:

在缓存队列中的消息达到阈值的情况下,停止对缓存队列中的消息进行处理。

在一种实施方式中,消费者从消息队列中提取消息,并将提取的消息存储至缓存队列中,包括:

每个消费者从消息队列为kafka集群中每个分区提取多个消息,并将同一个分区提取的消息存储至同一个缓存队列中。

在一种实施方式中,采用线程池中的多个工作线程并发处理缓存队列中的消息,包括:

采用单个线程池中的多个工作线程,按照预设消费顺序处理缓存队列中的多个消息。

在一种实施方式中,消费者从消息队列中提取消息,并将提取的消息存储至缓存队列中,包括:

每个消费者从消息队列为kafka集群中每个分区提取多个消息,并将同一个分区提取的消息存储至多个缓存队列中。

在一种实施方式中,采用线程池中的多个工作线程并发处理缓存队列中的消息,包括:

为每个缓存队列分配对应的线程池,采用分配的线程池中多个工作线程处理对应的缓存队列中的消息。

在一种实施方式中,还包括:

在缓存队列中有消息丢失的情况下,生产者停止生产用于发布至消息队列中的消息。

第二方面,本实施例提供了一种消息中间件的消息并发处理装置,包括:

消息提取模块,用于消费者从消息队列中提取消息,并将提取的消息存储至缓存队列中;

消息处理模块,用于采用线程池中的工作线程并发处理缓存队列中的消息,同时返回执行消费者从消息队列中提取消息并将提取的消息存储至缓存队列中的步骤,直至消息队列中的消息处理完成。

在一种实施方式中,还包括:

处理停止模块,用于在缓存队列中的消息达到阈值的情况下,停止对缓存队列中的消息进行处理。

在一种实施方式中,消息提取模块,包括:

第一提取子模块,用于每个消费者从消息队列为kafka集群中每个分区提取多个消息,并将同一个分区提取的消息存储至同一个缓存队列中。

在一种实施方式中,消息处理模块,包括:

第一处理子模块,用于采用单个线程池中的多个工作线程,按照预设消费顺序处理各个缓存队列中的消息。

在一种实施方式中,消息提取模块,包括:

第二提取子模块,用于每个消费者从消息队列为kafka集群中每个分区提取多个消息,并将同一个分区提取的消息存储至多个缓存队列中。

在一种实施方式中,消息处理模块,包括:

第二处理子模块,用于为每个缓存队列分配对应的线程池,采用分配的线程池中多个工作线程处理对应的缓存队列中的消息。

在一种实施方式中,还包括:

生产停止模块,用于在缓存队列中有消息丢失的情况下,生产者停止生产用于发布至消息队列中的消息。

第三方面,提供了一种电子设备,包括:

至少一个处理器;以及

与至少一个处理器通信连接的存储器;其中,

存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行上述任一项的方法。

第四方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,计算机指令用于使计算机执行上述任一项的方法。

上述申请中的一个实施例具有如下优点或有益效果:一方面,由于消费者不执行业务逻辑,仅仅是将消息提取至缓存队列中,能够显著地提高单个消费者的性能。将消息存储至缓存队列的同时利用线程池中的大量工作线程并发处理消息,节约了时间,提高了并发处理消息的速度和效率。另一方面,使用线程池可以打破固有的消息中间件本身的限制,利用线程池中的大量的工作线程并发处理缓存队列中的消息,明显提高了大批量消息的并发处理的能力。

上述可选方式所具有的其他效果将在下文中结合具体实施例加以说明。

附图说明

附图用于更好地理解本方案,不构成对本申请的限定。其中:

图1是根据本申请一实施例的一种消息中间件的消息并发处理方法的示意图;

图2是根据本申请一实施例的一种消息中间件的消息并发处理的场景示意图;

图3是根据本申请一实施例的另一种消息中间件的消息并发处理方法的示意图;

图4是根据本申请一实施例的另一种消息中间件的消息并发处理方法的示意图;

图5是根据本申请一实施例的另一种消息中间件的消息并发处理方法的示意图;

图6是根据本申请一实施例的一种消息中间件的消息并发处理装置的示意图;

图7是根据本申请另一实施例的一种消息中间件的消息并发处理装置的示意图;

图8是根据本申请一实施例的消息中间件的消息并发处理装置的示意图;

图9是根据本申请一实施例的消息中间件的消息并发处理装置的示意图;

图10是用来实现本申请实施例的一种消息中间件的消息并发处理方法的电子设备的框图。

具体实施方式

以下结合附图对本申请的示范性实施例做出说明,其中包括本申请实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本申请的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。

如图1所示,在一种具体的实施方式中,提供一种消息中间件的消息并发处理方法,包括:

步骤S110:消费线程从消息队列中提取消息,并将提取的消息存储至缓存队列中;

步骤S120:采用线程池中的工作线程并发处理缓存队列中的消息,同时返回执行消费线程从消息队列中提取消息并将提取的消息存储至缓存队列中的步骤,直至消息队列中的消息处理完成。

一种示例中,为了提高消息中间件的消息并发处理的性能,本实施方式提供了一种消息中间件的消息并发处理装置,包括缓存队列和线程池。缓存队列和线程池依次设置于现有的消费者集群之后,便于消费者集群中的消费线程将从消息队列中提取的消息存储至缓存队列,线程池中的多个工作线程从缓存队列中获取多个消息进行并发处理。

具体的,首先,消费者集群中的各个消费线程从消息队列中提取消息,不会对提取的消息做任何业务处理,仅仅是拿出消息放到缓存队列中。然后,采用线程池中的多个工作线程处理并发处理缓存队列中的消息。其中,消息队列可以包括kafka(分布式消息系统)集群、RabbitMQ(基于Erlang语言编写的开源消息队列)、ActiveMQ(基于Java语言编写的开放源代码消息队列)等。缓存队列可以是任意一种阻塞队列,例如,Array Blocking Queue(基于数组实现的阻塞队列)、Linked Blocking Queue(基于链表实现的阻塞队列)、DelayQueue(延时阻塞队列)等。阻塞队列可以替换为其他队列,只需要有储存功能即可,用来临时存储消息中间件中消费的消息。线程池中可以设置较多的工作线程,工作线程的数量可以远大于消费线程的数量,能够提高并发消费能力。需要指出的是,缓存队列的数量、线程池的数量以及线程池中的工作线程的数量可以根据需要处理的消息的数量进行动态调整,均在本实施方式的保护范围内。

现有的消息并发处理方法中,一个消费线程只能从消息队列里消费一条消息,并执行业务逻辑。例如,在1s内10个消费线程仅仅只能并发处理10条消息。而在本实施方式中,每个消费线程仅仅是提取消息队列中的消息,而并不对其做任何业务逻辑的执行,仅仅提取消息的速度要比提取消息并且执行业务逻辑的速度要快,提高了单个消费线程的性能。由于线程池中可以预设大量的工作线程,所以可以快速高效的处理消息。例如,在1s内消费线程从消息队列中能够提取10条消息,并将其存储在缓存队列中之后,返回从消息队列中继续提取另外10条消息,返回的同时,线程池中有50个工作线程对缓存队列中当前提取的10条消息进行处理。相比现有的消息并发处理方法,本实施方式提供的消息并发处理方法,明显提高了消费线程的消费能力,能够有效适应生产线程的生产能力,通过增加线程池中工作线程的数量可以显著提高消息中间件消费线程的并发处理能力,并且支持横向扩展,解决了消息堆积的技术问题,提高了消息处理的速度和效率。

本实施方式中,一方面,由于消费线程不执行业务逻辑,仅仅是将消息提取至缓存队列中,能够显著地提高单个消费线程的性能。将消息存储至缓存队列的同时利用线程池中的大量工作线程并发处理消息,节约了时间,提高了并发处理消息的速度和效率。另一方面,使用线程池可以打破固有的消息中间件本身的限制,利用线程池中的大量的工作线程并发处理缓存队列中的消息,明显提高了大批量消息的并发处理的能力。

如图2所示,以消息队列为kafka集群为例进行说明。Kafka集群作为一种分布式发布-订阅消息系统,具有可水平扩展的能力和高吞吐率。kafka集群可以有多个主题(topic),每个主题是生产线程发布的同一类消息的分类名称或者说是同一类消息的主题。同时一个主题通常有多个订阅者进行消息消费。每个主题可以有多个分区(partition),每个分区都是一个有序的、消息记录顺序不可变的、且向末尾不断追加新的消息的一种数据结构,这种数据结构存储结构化的日志,并提交记录。分区中的每一条消息记录都会被分配一个唯一的序列id—offset(Identity document,身份标志号-偏移量)。每一个消费线程需要配置自己的消费组(consumer group)来标识自己的身份。生产线程发布到主题中的每一条消息,只会被发送到订阅该主题的消费者集群中的一台消费线程实例。消费线程实例可以在不同的进程内,或在不同的服务器内。如果所有的消费线程实例拥有统一的消费组,那么被订阅的主题的消息数据将会负载均衡分配到消费者集群的实例中。如果所有的消费线程实例拥有不一样的消费组,那么被订阅的主题的消息数据将会以广播(broadcast)的方式分配到每一台消费线程实例。其中,消费线程的数量并不能大于分区的数量,每个消费线程至少提取一个分区的消息。

kafka集群中,某一个主题的N个分区由至多M个消费线程消费(M小于或等于N),消费线程仅取出消息,放到阻塞队列中,阻塞队列临时存储消息中间件中消费的消息,然后采用线程池处理阻塞队列中的存储的消息。具体的消息处理由线程池中的多个工作线程进行并发处理,尤其面对大批量的消息时,可以通过调整工作线程的数量来显著提高消息处理能力。

在一种实施方式中,如图3所示,还包括:

步骤S130:在缓存队列中的消息达到阈值的情况下,停止对缓存队列中的消息进行处理。

一种示例中,阻塞队列可以在队列满时阻塞消费线程从kafka集群中提取消息,阻止线程池中的工作线程对消息进行处理,不会丢失消息。所以,使用缓存队列来防止消息堆积导致的消息丢失,解决了消息丢失的技术问题。阈值可以根据缓存队列中能够存储的最大数量的消息进行确定。

在一种实施方式中,如图4所示,步骤S110,包括:

步骤S111:每个消费线程从消息队列为kafka集群中每个分区提取多个消息,并将同一个分区提取的消息存储至同一个缓存队列中。

一种示例中,为了适用于并发性要求非常高,而且对顺序也有要求的业务场景,例如短时间内有大量的通知消息生产出来,为了不影响通知方的性能,通过kafka解耦通知消息的响应和通知消息的处理。如果各个通知消息前后有互相依赖,并且需要及时处理消息,以体现实时性,就需要提高消息处理性能。本实施方式使用多个缓存队列,同时为了保证同一类通知消息的处理顺序,则需要保证同一个分区的消息储存到同一个缓存队列,这样最多可以有分区数个数的缓存队列,每个缓存队列储存一个分区的数据,能够在保证处理顺序的条件下,消费性能和处理性能最高。

在一种实施方式中,如图4所示,步骤S120,包括:

步骤S121:采用单个线程池中的多个工作线程,按照预设消费顺序处理各个缓存队列中的消息;

同时返回执行步骤S111,直至消息队列中的消息处理完成。

一种示例中,如图2所示,消费集群中的每个消费线程从kafka集群中每个分区提取多个消息,并将每个分区提取的多个消息存储至对应的缓存队列中,采用单个线程池中的多个工作线程处理每个缓存队列中的消息,在处理过程中,按照每个缓存队列对应的预设消费顺序进行处理。例如,在消息的并发要求较高,并且需要保证消费消息的顺序和生产消息的顺序一致的场景中,一笔订单有消费和退货两种形式,退货是在消费成功之后进行,所以,在处理订单类型的消息时,保证消费订单在退货订单之前生产并消费,严格保证订单的前后顺序,否则有可能发生退货发生在消费之前,导致退货失败。在生产消息时由于消费和退货对应的是同一笔订单同一个订单号,可以用订单号作为分区字段,保证消费消息和退货消息生产到同一个分区,进而保证kafka的同一个消费线程提取消费消息和退货消息。如果使用多个缓存队列,则需要保证消费消息和退货消息放到同一个队列中,避免出现先处理退货订单信息再处理消费订单信息的情况。

在一种实施方式中,如图5所示,步骤S110,包括:

步骤S112,每个消费线程从消息队列为kafka集群中每个分区提取多个消息,并将同一个分区提取的消息存储至多个缓存队列中。

一种示例中,每个消费线程从消息队列为kafka集群中对应的分区中提取消息(此时消费性能最高),并将提取的消息存储至多个缓存队列中,使得单个分区的数据可能分布在多个缓存队列中,无需考虑消息处理的顺序,可以通过适当扩大缓存队列的个数来提高消息处理的速度。适用于对并发要求非常高,对顺序要求不高的场景,比如日志归集和监控这种场景,日志量和数据量非常大,需要处理性能很高,但是对日志和数据的顺序要求不高,可以有一定比例消息的倒序。

在一种实施方式中,如图5所示,步骤S120,包括:

步骤S122,为每个缓存队列分配对应的线程池,采用分配的线程池中多个工作线程处理对应的缓存队列中的消息;

同时返回执行步骤S112,直至消息队列中的消息处理完成。

一种示例中,将同一个分区提取的消息存储至多个缓存队列,缓存队列的数量可以根据需求进行设置。为每个缓存队列分配一个线程池,线程池的数量可以等于缓存队列的数量,利用线程池中的工作线程处理对应的缓存队列中的消息,同时,多个线程池并行处理,有效加快了消息处理的速度。

在一种实施方式中,如图3所示,还包括:

步骤S140:在缓存队列中有消息丢失的情况下,生产线程停止生产用于发布至消息队列中的消息。

一种示例中,在服务器宕机或者重启过程中,可能会导致阻塞队列中有消息会丢失,所以在服务器重启前,生产线程停止对消息的生产,以及对服务器是否宕机进行检测和预警,在宕机之前生产线程停止对消息的生产。

在另一种具体实施方式中,如图6所示,提供了一种消息中间件的消息并发处理装置,包括:

消息提取模块110,用于消费线程从消息队列中提取消息,并将提取的消息存储至缓存队列中;

消息处理模块120,用于采用线程池中的工作线程并发处理缓存队列中的消息,同时返回执行消费线程从消息队列中提取消息并将提取的消息存储至缓存队列中的步骤,直至消息队列中的消息处理完成。

在一种实施方式中,如图7所示,还包括:

处理停止模块130,用于在缓存队列中的消息达到阈值的情况下,停止对缓存队列中的消息进行处理。

在一种实施方式中,如图8所示,消息提取模块110,包括:

第一提取子模块111,用于每个消费线程从消息队列为kafka集群中每个分区提取多个消息,并将同一个分区提取的消息存储至同一个缓存队列中。

在一种实施方式中,如图8所示,消息处理模块120,包括:

第一处理子模块121,用于采用单个线程池中的多个工作线程,按照预设消费顺序处理各个缓存队列中的消息。

在一种实施方式中,如图9所示,消息提取模块110,包括:

第二提取子模块112,用于每个消费线程从消息队列为kafka集群中每个分区提取多个消息,并将同一个分区提取的消息存储至多个缓存队列中。

在一种实施方式中,如图9所示,消息处理模块120,包括:

第二处理子模块122,用于为每个缓存队列分配对应的线程池,采用分配的线程池中多个工作线程处理对应的缓存队列中的消息。

在一种实施方式中,如图7所示,还包括:

生产停止模块140,用于在缓存队列中有消息丢失的情况下,生产线程停止生产用于发布至消息队列中的消息。

请实施例各装置中的各模块的功能可以参见上述方法中的对应描述,在此不再赘述。

根据本申请的实施例,本申请还提供了一种电子设备和一种可读存储介质。

如图10所示,是根据本申请实施例的一种消息中间件的消息并发处理方法的电子设备的框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本申请的实现。

如图10所示,该电子设备包括:一个或多个处理器1001、存储器1002,以及用于连接各部件的接口,包括高速接口和低速接口。各个部件利用不

同的总线互相连接,并且可以被安装在公共主板上或者根据需要以其它方式安装。处理器可以对在电子设备内执行的指令进行处理,包括存储在存储器中或者存储器上以在外部输入/输出装置(诸如,耦合至接口的显示设备)上显示GUI的图形信息的指令。在其它实施方式中,若需要,可以将多个处理器和/或多条总线与多个存储器和多个存储器一起使用。同样,可以连接多个电子设备,各个设备提供部分必要的操作(例如,作为服务器阵列、一组刀片式服务器、或者多处理器系统)。图10中以一个处理器1001为例。

存储器1002即为本申请所提供的非瞬时计算机可读存储介质。其中,所述存储器存储有可由至少一个处理器执行的指令,以使所述至少一个处理器执行本申请所提供的一种消息中间件的消息并发处理方法。本申请的非瞬时计算机可读存储介质存储计算机指令,该计算机指令用于使计算机执行本申请所提供的一种消息中间件的消息并发处理方法。

存储器1002作为一种非瞬时计算机可读存储介质,可用于存储非瞬时软件程序、非瞬时计算机可执行程序以及模块,如本申请实施例中的一种消息中间件的消息并发处理方法对应的程序指令/模块(例如,附图6所示的消息提取模块110和消息处理模块120)。处理器1001通过运行存储在存储器1002中的非瞬时软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述方法实施例中的一种消息中间件的消息并发处理方法。

存储器1002可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据一种消息中间件的消息并发处理方法的电子设备的使用所创建的数据等。此外,存储器1002可以包括高速随机存取存储器,还可以包括非瞬时存储器,例如至少一个磁盘存储器件、闪存器件、或其他非瞬时固态存储器件。在一些实施例中,存储器1002可选包括相对于处理器1001远程设置的存储器,这些远程存储器可以通过网络连接至一种消息中间件的消息并发处理方法的电子设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

一种消息中间件的消息并发处理方法的电子设备还可以包括:输入装置1003和输出装置1004。处理器1001、存储器1002、输入装置1003和输出装置1004可以通过总线或者其他方式连接,图10中以通过总线连接为例。

输入装置1003可接收输入的数字或字符信息,以及产生与一种消息中间件的消息并发处理方法的电子设备的用户设置以及功能控制有关的键信号输入,例如触摸屏、小键盘、鼠标、轨迹板、触摸板、指示杆、一个或者多个鼠标按钮、轨迹球、操纵杆等输入装置。输出装置1004可以包括显示设备、辅助照明装置(例如,LED)和触觉反馈装置(例如,振动电机)等。该显示设备可以包括但不限于,液晶显示器(LCD)、发光二极管(LED)显示器和等离子体显示器。在一些实施方式中,显示设备可以是触摸屏。

此处描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、专用ASIC(专用集成电路)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。

这些计算程序(也称作程序、软件、软件应用、或者代码)包括可编程处理器的机器指令,并且可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。如本文使用的,术语“机器可读介质”和“计算机可读介质”指的是用于将机器指令和/或数据提供给可编程处理器的任何计算机程序产品、设备、和/或装置(例如,磁盘、光盘、存储器、可编程逻辑装置(PLD)),包括,接收作为机器可读信号的机器指令的机器可读介质。术语“机器可读信号”指的是用于将机器指令和/或数据提供给可编程处理器的任何信号。

为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。

可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。

计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。

应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本申请中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本申请公开的技术方案所期望的结果,本文在此不进行限制。

上述具体实施方式,并不构成对本申请保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本申请的精神和原则之内所作的修改、等同替换和改进等,均应包含在本申请保护范围之内。

相关技术
  • 消息中间件的并发消费方法以及装置
  • 基于Spark的Kafka消费并发处理方法及装置
技术分类

06120112168621