一种异步消息的监听方法、装置、存储介质及电子设备与流程

文档序号:31943826发布日期:2022-10-26 03:47阅读:32来源:国知局
一种异步消息的监听方法、装置、存储介质及电子设备与流程

1.本技术涉及分布式系统技术领域,尤其涉及一种异步消息的监听方法、装置、存储介质及电子设备。


背景技术:

2.在分布式系统中,消息队列都是一个至关重要的组件,其提供了异步处理机制。随着异步消息应用场景愈加广泛,异步消息发送数据可靠性显得尤为重要。
3.通过对异步消息进行监听,能够及时确定消息队列中是否新增了异步消息,目前利用spring-kafka项目可实现创建监听器,一般是通过注解的方式进行创建。
4.但对于核心系统与众多的外部系统交互的场景,其中很多消息通过消息中间件通讯,使用异步消息的场景不同,要求也不尽相同,有些应用程序需监听多个队列,有些队列由多个应用程序监听,因此对异步消息的灵活监听显得尤为重要,也即需要动态创建监听器。


技术实现要素:

5.为了解决现有技术存在的上述技术问题,本技术提供了一种异步消息的监听方法、装置、存储介质及电子设备,能够动态创建监听器,实现难度低,具有较高的实用性。
6.第一方面,本技术提供了一种异步消息的监听方法,该方法包括:在应用程序启动时,根据所述应用程序的监听器使能参数确定是否创建消费者,所述消费者用于消息系统中轮询获取消息并进行处理;当根据所述监听器使能参数确定需要创建消费者时,读取所述应用程序的yaml文件中的配置信息以创建监听器消费者,所述配置信息包括主题topic和消费者组的标识号,所述监听器消费者为持有消费者实例,所述消费者实例为一个所述消费者。
7.利用本技术提供的方法,通过监听器使能参数确定是否开启监听,若开启监听,则读取应用程序的yaml文件中的配置参数动态创建监听者,使用简单方便,复用性强。
8.在一种可能的实现方式中,读取所述应用程序的yaml文件中的配置信息以创建监听器,具体包括:
9.根据所述配置信息,为每个所述消费者创建的监听器端点和监听器容器并发工厂;
10.将所述监听器端点和所述监听器容器并发工厂注册到监听器端点注册表中,所述监听器端点注册表用于管理所述消费者的生命周期,并为每个所述监听器端点创建对应的并发消息监听容器;
11.并发消息监听容器根据并发数创建消息监听器容器,每个所述消息监听器容器包括一个监听器消费者,所述监听器消费者用于从消息系统中拉取消息。
12.在一种可能的实现方式中,读取所述应用程序的yaml文件中的配置信息以创建监听器,具体包括:
13.根据所述配置信息,为每个所述消费者创建的监听器端点和监听器容器并发工厂;
14.将所述监听器端点和所述监听器容器并发工厂注册到监听器端点注册表中,所述监听器端点注册表用于管理所述消费者的生命周期,并为每个所述监听器端点创建对应的并发消息监听容器;
15.并发消息监听容器根据并发数创建消息监听器容器,每个所述消息监听器容器包括一个监听器消费者,所述监听器消费者用于从消息系统中拉取消息。
16.在一种可能的实现方式中,所述方法还包括:
17.所述消息监听器容器采用与所述消费者不同的线程执行所述消费者对应的消息处理方法。
18.在一种可能的实现方式中,所述根据所述应用程序的监听器使能参数确定是否创建消费者前,所述方法还包括:
19.利用监听器注册器实现智能初始化单例smart initializing singleton接口。
20.第二方面,本技术还提供了一种异步消息的监听装置,该装置包括:确定单元和创建单元。其中,所述确定单元,用于在应用程序启动时,根据所述应用程序的监听器使能参数确定是否创建消费者,所述消费者用于消息系统中轮询获取消息并进行处理;所述创建单元,用于当根据所述监听器使能参数确定需要创建消费者时,读取所述应用程序的yaml文件中的配置信息以创建监听器消费者,所述配置信息包括主题topic和消费者组的标识号,所述监听器消费者为持有消费者实例,所述消费者实例为一个所述消费者。
21.利用本技术提供的装置,通过监听器使能参数确定是否开启监听,若开启监听,则读取应用程序的yaml文件中的配置参数动态创建监听者,使用简单方便,复用性强。
22.在一种可能的实现方式中,所述创建单元,具体包括:第一创建子单元、注册子单元和第二创建子单元。所述第一创建子单元,用于根据所述配置信息,为每个所述消费者创建的监听器端点和监听器容器并发工厂;所述注册子单元,用于将所述监听器端点和所述监听器容器并发工厂注册到监听器端点注册表中,所述监听器端点注册表用于管理所述消费者的生命周期,并为每个所述监听器端点创建对应的并发消息监听容器;所述第二创建子单元,用于使并发消息监听容器根据并发数创建消息监听器容器,每个所述消息监听器容器包括一个监听器消费者,所述监听器消费者用于从消息系统中拉取消息。
23.在一种可能的实现方式中,所述注册子单元,具体用于初始化监听器端点注册器,以将所述监听器端点和所述监听器容器并发工厂注册到所述监听器端点注册表中。
24.第三方面,本技术还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现以上实现方式中的异步消息的监听方法。
25.第四方面,本技术还提供了一种电子设备,电子设备用于运行程序,其中,所述程序运行时执行以上实现方式中的异步消息的监听方法。
附图说明
26.图1为本技术实施例提供的一种异步消息的监听方法的流程图;
27.图2为本技术实施例提供的另一种异步消息的监听方法的流程图;
28.图3为本技术实施例提供的实现图2所示监听方案的架构图;
29.图4为本技术实施例提供的配置参数的示意图;
30.图5为本技术实施例提供的模块架构图;
31.图6为本技术实施例提供的一种异步消息的监听装置的示意图;
32.图7为本技术实施例提供的另一种异步消息的监听装置的示意图。
具体实施方式
33.为了使本技术领域的人员更清楚地理解本技术方案,下面首先说明本技术技术方案涉及的专业术语。
34.为了使本技术领域的人员更清楚地理解本技术方案,下面首先说明本技术技术方案涉及的专业术语。
35.kafka消息系统:由scala编程语言和java编程语言编写的一种高吞吐量的分布式发布订阅消息系统。
36.消息队列:是在消息的传输过程中保存消息的容器。
37.消息中间件:也即面向消息的中间件是支持在分布式系统之间发送和接收消息的软件或硬件基础结构。
38.异步消息:当使用异步消息传送时,发送者在发送消息以后无需等待接收程序的执行和返回结果,而是可以继续处理其他请求。
39.主题(topic):topic是消息发布(pub)者和订阅(sub)者之间的传输中介。设备可通过topic实现消息的发送和接收,从而实现服务端与设备端的通信。一个topic对应一个消息队列。kafka支持多生产者,多消费者。kafka在概念上将一个topic分成了多个分区(partition),写入topic的消息会被(平均)分配到其中一个partition。partition中会为消息保存一个partition内唯一的id,一般称为偏移量(offset)。这样当性能/存储不足时kafka就可以通过增加partition实现横向扩展。
40.监听器(listener)是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象。当被监听对象发生上述事件或状态改变后,监听器某个方法将立即被执行。
41.端点(endpoints):实现逻辑服务的网络节点。
42.通过对异步消息进行监听,能够及时确定消息队列中是否新增了异步消息,目前利用spring-kafka可实现创建监听器,但其需要通过使用基于“@kafkalistener”的注解的方式创建。
43.但对于核心系统与众多的外部系统交互的场景,其中很多消息通过消息中间件通讯,如牌价接收,头寸报送等。使用异步消息的场景不同,要求也不尽相同,有些应用需监听多个队列,有些队列有多个应用监听,因此对异步消息的灵活监听显得尤为重要,也即需求动态的创建监听器。
44.为了解决以上问题,本技术实施例提供了一种异步消息的监听方法、装置、存储介质及电子设备,能够根据动态的配置参数来创建监听器,实现难度低,具有较高的实用性。
45.为了使本技术领域的人员更清楚地理解本技术方案,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行描述。`
46.本技术说明中的“第一”、“第二”等用词仅用于描述目的,而不能理解为指示或暗
示相对重要性或者隐含指明所指示的技术特征的数量
47.本技术实施例提供了一种异步消息的监听方法,下面结合附图具体说明。
48.参见图1,该图为本技术实施例提供的一种异步消息的监听方法的流程图。
49.该方法包括以下步骤:
50.s101:在应用程序启动时,根据应用程序的监听器使能参数确定是否创建消费者。
51.消费者用于消息系统中轮询获取消息并进行处理,也即不同的消费者对应不同的消息处理方法。
52.s102:当根据所述监听器使能参数确定需要创建消费者时,读取所述应用程序的yaml文件中的配置信息以创建监听器消费者。
53.配置信息包括主题topic和消费者组的标识号,监听器消费者为持有消费者实例,消费者实例为一个消费者。
54.消息模型一般包括队列模型(queuing)和发布-订阅模型(publish-subscribe)。
55.其中,队列模型的处理方式是一组消费者从服务器读取消息,一条消息只由其中的一个消费者来处理。
56.发布-订阅模型中,消息被广播给所有的消费者,接收到消息的消费者都可以处理此消息。
57.kafka为这两种模型提供了单一的消费者抽象模型:消费者组(consumer group)
58.消费者用一个消费者组名标记自己。一个发布在topic上消息被分发给此消费者组中的一个消费者。假如所有的消费者都在一个组中,那么这就变成了队列模型。假如所有的消费者都在不同的组中,那么就完全变成了发布-订阅模型。一个消费者组中消费者订阅同一个topic,每个消费者接受topic的一部分分区的消息,从而实现对消费者的横向扩展,对消息进行分流。
59.当单个消费者无法跟上数据生成的速度,就可以增加更多的消费者分担负载,每个消费者只处理部分分区(partition)的消息,从而实现单个应用程序的横向伸缩。此外,kafka还允许多个应用程序从同一个topic读取所有的消息,此时只要保证每个应用程序有自己的消费者组即可。
60.消费者组的概念就是:当有多个应用程序都需要从kafka获取消息时,让每个app对应一个消费者组,从而使每个应用程序都能获取一个或多个topic的全部消息;在每个消费者组中,往消费者组中添加消费者来伸缩读取能力和处理能力,消费者组中的每个消费者只处理每个topic的一部分的消息,每个消费者对应一个线程。
61.下面具体说明本技术方案的实现方式。
62.一并参见图2和图3。其中,图2为本技术实施例提供的另一种异步消息的监听方法的流程图;图3为本技术实施例提供的实现图2所示监听方案的架构图;
63.监听工程的实现包括以下步骤:
64.s201:监听器注册器实现智能初始化单例接口。
65.kafka的监听器注册器(listener registrar)实现了智能初始化单例(smart initializing singleton)接口。smart initializing singleton中只有一个接口aftersingletonsinstantiated(),其作用是是在spring容器管理的所有单例对象初始化完成之后调用的回调接口。
66.其中,单例模式,也叫单子模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,有利于协调系统整体的行为。如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。
67.s202:监听器注册器根据监听器使能参数确定需要创建消费者。
68.参见图4,该图为本技术实施例提供的配置参数的示意图。
69.在yaml文件中配置参数以创建监听者消费异步消息。
70.以监听器使能参数为kafkalistener.enabled为例,根据该使能参数的参数值确定是否创建消费者,若enabled应用配置为true,则读取yaml文件中topic、group id等创建监听者。其中,group id也即消费者组的标识号。
71.yaml(yaml ain't markup language)是一个可读性高,用来表达数据序列化的格式。yaml的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件等。
72.s203:为每一个消费者创建对应的监听器端点和监听器容器并发工厂,并通过初始化监听器端点注册器注册到监听器端点注册表中。
73.如果需要创建消费者,则为每一个消费者创建一个kafka监听器端点(listener endpoint)和kafka并发监听器容器工厂(concurrent listener container factory)。
74.通过初始化辅助类kafka监听器端点注册器(listener endpoint registrar)注册到kafka监听器端点注册表(listener endpoint registry)中。
75.并发监听器容器工厂(concurrent listener container factory)用于实现工厂方法模式(factory method pattern)。是一种实现了“工厂”概念的面向对象设计模式。就像其他创建型模式一样,它也是处理在不指定对象具体类型的情况下创建对象的问题。工厂方法模式的实质是“定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。
76.s204:监听器端点注册表管理注册的消费者的生命周期,并为每个监听器端点创建一个并发消息监听容器。
77.kafka监听器端点注册表(kafka listener endpoint registry)负责管理注册的消费者的生命周期,为每个kafka监听器端点(kafka listener endpoint)创建一个对应的kafka并发消息监听容器(concurrent message listener container)。
78.kafka并发消息监听容器中可以指定消费的topic、消息监听器(message listener)等。
79.s205:并发消息监听容器根据并发数创建消息监听器容器,每个消息监听器容器有一个监听器消费者。
80.并发消息监听容器(concurrent message listener container)根据并发数创建kafka消息监听器容器(message listener container),每个消息监听器容器有一个监听器消费者(listener consumer)。
81.s206:监听器消费者从kafka消息系统中拉取消息,所述监听器消费者对应一个消
费者示例,每个消费者实例为一个消费者。
82.监听器消费者(listener consumer)负责从kafka消息系统拉取消息,监听器消费者持有一个消费者实例,该消费者实例为kafka驱动提供的消费者客户端入口,每个消费者实例即一个消费者,消费者是线程不安全的,因此kafka消息监听器容器中有单独的线程用来执行消费者对应的消息处理方法。也即在消息监听器容器采用与所述消费者不同的线程执行所述消费者对应的消息处理方法。
83.s207:消费者每获取一条消息,对获取的消息进行处理。
84.消费者负责从kafka消息系统中采用轮询(poll)的方式进行消息处理,每获取一条消息,调用kafka的进程(process)的方法,对消息进行处理。
85.在一些实施例中,kafka的进程的可以参见图5所示的模块架构图,kafkaprocess位于listener目录下。该kafka进程的方法可以调用监听工程中的消息服务以处理消息。
86.消费者对获取的消息进行处理,也即实现了对异步消息的监听。
87.以上步骤的划分仅是为了方便说明,并不构成对于本技术技术方案的限定,实际应用中,可以进行适当的调整,例如合并其中的一些步骤,本技术实施例在此不再赘述。
88.综上所述,利用本技术提供的方法,通过监听器使能参数确定是否开启监听,若开启监听,则读取应用程序的yaml文件中的配置参数动态创建监听者,使用简单方便,复用性强。
89.基于以上实施例提供的异步消息的监听方法,本技术实施例还提供了一种异步消息的监听装置,下面结合附图具体说明。
90.参见图6,该图为本技术实施例提供的一种异步消息的监听装置的示意图。
91.该装置包括:确定单元61和创建单元62。
92.其中,所述确定单元61,用于在应用程序启动时,根据所述应用程序的监听器使能参数确定是否创建消费者,所述消费者用于消息系统中轮询获取消息并进行处理;
93.所述创建单元62,用于当根据所述监听器使能参数确定需要创建消费者时,读取所述应用程序的yaml文件中的配置信息以创建监听器消费者,所述配置信息包括主题topic和消费者组的标识号,所述监听器消费者为持有消费者实例,所述消费者实例为一个所述消费者。
94.在一些实施例中,创建单元62还用于利用监听器注册器实现智能初始化单例smart initializing singleton接口。
95.利用该装置,通过监听器使能参数确定是否开启监听,若开启监听,则读取应用程序的yaml文件中的配置参数动态创建监听者,使用简单方便,复用性强。
96.下面结合具体的实现方式进行说明。
97.参见图7,该图为本技术实施例提供的另一种异步消息的监听装置的示意图。
98.图示创建单元62具体包括第一创建子单元621、注册子单元622和第二创建子单元623。
99.其中,所述第一创建子单元621,用于根据所述配置信息,为每个所述消费者创建的监听器端点和监听器容器并发工厂。
100.所述注册子单元622,用于将所述监听器端点和所述监听器容器并发工厂注册到监听器端点注册表中,所述监听器端点注册表用于管理所述消费者的生命周期,并为每个
所述监听器端点创建对应的并发消息监听容器。
101.所述第二创建子单元623,用于使并发消息监听容器根据并发数创建消息监听器容器,每个所述消息监听器容器包括一个监听器消费者,所述监听器消费者用于从消息系统中拉取消息。
102.在一种可能的实现方式中,消息监听器容器采用与所述消费者不同的线程执行所述消费者对应的消息处理方法。
103.所述装置包括处理器和存储器,上述确定单元61和创建单元62等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。
104.处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来实现以上的异步消息的监听方法。
105.本发明实施例提供了一种存储介质,其上存储有程序,该程序被处理器执行时实现所述的异步消息的监听方法。
106.本发明实施例提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行所述的异步消息的监听方法。
107.本发明实施例提供了一种设备,设备包括至少一个处理器、以及与处理器连接的至少一个存储器、总线。
108.其中,处理器、存储器通过总线完成相互间的通信;处理器用于调用存储器中的程序指令,以执行上述的异步消息的监听方法。本文中的设备可以是服务器、pc、pad、手机等。
109.本技术还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序:
110.在应用程序启动时,根据所述应用程序的监听器使能参数确定是否创建消费者,所述消费者用于消息系统中轮询获取消息并进行处理;
111.当根据所述监听器使能参数确定需要创建消费者时,读取所述应用程序的yaml文件中的配置信息以创建监听器消费者,所述配置信息包括主题topic和消费者组的标识号,所述监听器消费者为持有消费者实例,所述消费者实例为一个所述消费者。
112.可选的,读取所述应用程序的yaml文件中的配置信息以创建监听器,具体包括:
113.根据所述配置信息,为每个所述消费者创建的监听器端点和监听器容器并发工厂;
114.将所述监听器端点和所述监听器容器并发工厂注册到监听器端点注册表中,所述监听器端点注册表用于管理所述消费者的生命周期,并为每个所述监听器端点创建对应的并发消息监听容器;
115.并发消息监听容器根据并发数创建消息监听器容器,每个所述消息监听器容器包括一个监听器消费者,所述监听器消费者用于从消息系统中拉取消息。
116.可选的,,所述将所述监听器端点和所述监听器容器并发工厂注册到监听器端点注册表中,具体包括:
117.初始化监听器端点注册器,以将所述监听器端点和所述监听器容器并发工厂注册到所述监听器端点注册表中。
118.可选的,所述方法还包括:
119.使所述消息监听器容器采用与所述消费者不同的线程执行所述消费者对应的消
息处理方法。
120.可选的,所述根据所述应用程序的监听器使能参数确定是否创建消费者前,所述方法还包括:
121.利用监听器注册器实现智能初始化单例smart initializing singleton接口。
122.本技术是参照根据本技术实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
123.在一个典型的配置中,设备包括一个或多个处理器(cpu)、存储器和总线。设备还可以包括输入/输出接口、网络接口等。
124.存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flash ram),存储器包括至少一个存储芯片。存储器是计算机可读介质的示例。
125.计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的单元或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
126.需要说明的是,本技术提供的异步消息发送的处理方法、装置、存储介质及电子设备可用于人工智能领域、区块链领域、分布式领域、云计算领域、大数据领域、物联网领域、移动互联领域、网络安全领域、芯片领域、虚拟现实领域、增强现实领域、全息技术领域、量子计算领域、量子通信领域、量子测量领域、数字孪生领域或金融领域。上述仅为示例,并不对本技术的应用领域进行限定。
127.还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
128.应当理解,在本技术中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“a和/或b”可以表示:只存在a,只存在b以及同时存在a和b三种情况,其中a,b可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b或c中的至少一项(个),可以表示:a,b,c,“a和b”,“a和c”,“b和c”,或“a和b和c”,其中a,b,c可以是单个,也可
以是多个。
129.本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元及模块可以是或者也可以不是物理上分开的。另外,还可以根据实际的需要选择其中的部分或者全部单元和模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
130.以上所述仅是本技术的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本技术原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本技术的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1