CN109788026B - 消息处理方法及装置 - Google Patents
消息处理方法及装置 Download PDFInfo
- Publication number
- CN109788026B CN109788026B CN201811524910.4A CN201811524910A CN109788026B CN 109788026 B CN109788026 B CN 109788026B CN 201811524910 A CN201811524910 A CN 201811524910A CN 109788026 B CN109788026 B CN 109788026B
- Authority
- CN
- China
- Prior art keywords
- message
- value
- global variable
- sequence number
- kafka
- 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.)
- Active
Links
Images
Abstract
本发明提出一种消息处理方法及装置,涉及数据处理领域,通过判断从kafka获取的消息中包含的序列号与第一全局变量的值是否相同的方式,且只有在消息的序列号与第一全局变量的值相同时,消费该消息。本发明提供的消息处理方法及装置,能够确保消费者按照消息正确的生产顺序进行消费。
Description
技术领域
本发明涉及数据处理领域,具体而言,涉及一种消息处理方法及装置。
背景技术
Kafka是一种基于zookeeper协调管理的分布式流平台的消息系统,能够允许发布和订阅流数据,kafka的基本结构中至少包括有产生消息的生产者(producer)和消费消息的消费者(consumer),生产者负责生产消息,并发送给kafka服务器,消费者则从kafka集群中订阅消费主题,以使消费者获得kafka服务器中订阅的主题下的消息进行消费。
Kafka服务器在接收到生产者发送的消息时,会将一组消息归纳为一个主题(即Topic),简单的说,主题就是kafka服务器对消息的分类,kafka服务器会将所有相同类别的消息存储在同一主题下,消费者通过订阅主题进行消费,即获得相应的事件消息。
发明内容
本发明的目的在于提供一种消息处理方法及装置,能够确保消费者按照消息正确的生产顺序进行消费。
为了实现上述目的,本发明实施例采用的技术方案如下:
第一方面,本发明实施例提供了一种消息处理方法,所述方法包括:
从kafka主题获取消息,其中,所述消息中包含有序列号,所述序列号用于指示消息生产者在生产所述消息时的顺序;
若所述消息的序列号与第一全局变量的值相同,消费所述消息,其中,所述第一全局变量的值用于指示待消费的消息在所述kafka主题中的序列号。
第二方面,本发明实施例提供了一种消息处理装置,所述装置包括:
收发模块,用于从kafka主题获取消息,其中,所述消息中包含有序列号,所述序列号用于指示消息生产者在生产所述消息时的顺序;
处理模块,用于若所述消息的序列号与第一全局变量的值相同,消费所述消息,其中,所述第一全局变量的值用于指示待消费的消息在所述kafka主题中的序列号。
第三方面,本发明实施例提供了一种电子设备,包括:存储器,用于存储一个或多个程序;处理器;当所述一个或多个程序被所述处理器执行时,实现本发明实施例所提供的消息处理方法。
相对于现有技术,本发明实施例所提供的一种消息处理方法及装置,通过判断从kafka获取的消息中包含的序列号与第一全局变量的值是否相同的方式,且只有在消息的序列号与第一全局变量的值相同时,消费该消息,相比于现有技术,使消费者在消费所订阅的主题下的消息时,不再依据每条消息产生时的时间戳来判断不同消息间的生产顺序,而是依据获得的消息所包含的序列号与第一全局变量的值是否相同,以确保消费者按照正确的生产顺序消费订阅的主题下的消息。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它相关的附图。
图1示出了本发明实施例的一种示意性应用场景图;
图2示出了本发明实施例所提供的一种电子设备的一种示意性结构图;
图3示出了本发明实施例所提供的一种消息处理方法的一种示意性流程图;
图4为主题A包含的消息的一种示意图;
图5为消费消息时的一种应用场景示意图;
图6示出了本发明实施例所提供的一种消息处理装置的一种示意性结构图。
图中:100-电子设备;101-存储器;102-处理器;103-通信接口;200-消息处理装置;201-收发模块;202-处理模块。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本发明的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
下面结合附图,对本发明的一些实施方式作详细说明。在不冲突的情况下,下述的实施例及实施例中的特征可以相互组合。
请参阅图1,图1示出了本发明实施例的一种示意性应用场景图,如图1所示,生产者、kafka及消费者共同构成分布式消息系统。在该分布式消息系统中,生产者将产生的消息发送给kafka,kafka则将接收到的消息,按照消息所属的主题类别进行存储,比如在接收到一条消息,当该消息所属的主题类别为主题A时,kafka则将这条消息存储到主题A对应的存储地址下,进而将所有相同的类别的消息进行统一存储;而当消费者在消费消息时,消费者在kafka订阅消费的主题,比如订阅主题A作为消费的主题,该订阅的主题表征消费者将要消费的消息所属的类别,消费者在消费消息时,kafka将消费者所订阅的主题中的消息发送给消费者,以供消费者消费消息,比如在前述消费者订阅kafka中的主题A作为消费的主题时,kafka则将主题A中的消息发送给消费者。
值得说明的是,一般来说,kafka可以与多个生产者建立通信(图1中仅示出一个),而不同的生产者将产生的消息发送给kafka时,kafka可以存储在相同的主题下,也可以存储在不同的主题下,这取决于每个生产者产生的各类消息所预先配置的存储主题;并且,kafka还可以与多个消费者建立通信(图1中仅示出一个),而不同的消费者可以消费相同类别主题下的消息,也可以消费不同类别主题下的消息,这取决于为每个消费者预先配置的消费主题类别。
在图1所示的示意图中,虽然采用分布式消息系统具有高效、低延迟等优点,但消息在传输的过程中,可能会发生时序错乱的情况,使得消费者不能按照每条消息实际产生的先后顺序进行处理,导致事件不能完成。比如,在银行办理银行卡密码修改服务时,用户需要依次输入旧密码-新密码-新密码才会被认为修改成功,但若是用户操作的终端作为生产者,依次输入旧密码-新密码-新密码在发送给kafka的过程中,时序发生了错乱,先后顺序变成的新密码-旧密码-新密码,则银行后台的设备作为消费者在消费这三条消息时,依次接收到的消息就变成了新密码-旧密码-新密码,这时,本该正常完成的修改密码的业务变成了由于密码错误而不能被完成。
因此,在分布式消息系统中,不同消息间时序的正确性关系着事件能否被正常完成,比如上述用户修改银行卡密码的案例中由于三个密码的时序错乱导致了修改密码不成功。在现有技术中,一般采用时间戳的顺序来判断消息产生的先后顺序,即每条消息在产生时,会被记录一个时间戳,或者是消息被采集并经过初步处理再到kafka的过程中也会产生一个时间戳,而在其后的流处理过程中,进入数据流的消息可以依据其进入数据流的先后来作为判断不同消息间时序的依据,也可以辅助于消息产生时的时间戳进行时序分析。但当消息产生的频率较大时,不同消息间的时间戳可能都是一样的,也就是说,此时时间戳便不能成为每条消息的唯一标识,同样存在消费者在消费多个消息时,不同消息间时序错乱的问题。
基于上述缺陷,本发明实施例所提供的一种实现方式为:通过判断从kafka获取的消息中包含的序列号与第一全局变量的值是否相同的方式,且只有在消息的序列号与第一全局变量的值相同时,消费该消息。
请参阅图2,图2示出了本发明实施例所提供的一种电子设备100的一种示意性结构图,该电子设备100可作为如图1中的消费者,在本发明实施例中,所述电子设备100包括存储器101、处理器102和通信接口103,该存储器101、处理器102和通信接口103相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。存储器101可用于存储软件程序及模块,如本发明实施例所提供的消息处理装置200对应的程序指令/模块,处理器102通过执行存储在存储器101内的软件程序及模块,从而执行各种功能应用以及数据处理。该通信接口103可用于与其他节点设备进行信令或数据的通信。
其中,存储器101可以是但不限于,随机存取存储器(Random Access Memory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-OnlyMemory,PROM),可擦除只读存储器(Erasable Programmable Read-Only Memory,EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-Only Memory,EEPROM)等。
处理器102可以是一种集成电路芯片,具有信号处理能力。该处理器102可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(NetworkProcessor,NP)等;还可以是数字信号处理器(Digital Signal Processing,DSP))、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
可以理解,图2所示的结构仅为示意,电子设备100还可包括比图2中所示更多或者更少的组件,或者具有与图2所示不同的配置。图2中所示的各组件可以采用硬件、软件或其组合实现。
请参阅图3,图3示出了本发明实施例所提供的一种消息处理方法的一种示意性流程图,该消息处理方法可应用于图1中的消费者,在本发明实施例中,该消息处理方法包括以下步骤:
S100,从kafka主题获取消息。
S101,判断消息的序列号与第一全局变量的值是否相同;若相同,执行S102;若不相同,执行S104。
S102,消费消息。
消费者在消费消息时,从kafka的主题中获取消息,其中,消费者获取的消息为消费者在kafka所订阅的主题所包含的消息中的消息,比如在如图1所示的示意图中,假定消费者订阅的主题为主题A,则kafka发送给消费者的消息为主题A中的消息;并且,消费者所获得的消息中包含有序列号,该序列号用于指示消息生产者在生产该消息时的顺序。比如,请参阅图4,图4为主题A包含的消息的一种示意图,在如图4所示的示意图中,假定主题A为消费者在kafka中订阅的主题,在主题A中存储有消息A、消息B、消息C、消息D、消息E、消息F共计6条消息,且这六条消息各自的序列号分别为0、1、2、3、4、5,则生产者在产生这六条消息时,消息A为最先产生,消息B、消息C、消息D及消息E产生的时间依次靠后,消息F在这六条消息中最晚产生。
在欲消费消息时,消费者在本地还存储有第一全局变量,该第一全局变量的值用于指示消费者待消费的消息在kafka主题中的序列号。消费者在消费所订阅的主题中包含的所有消息时,即依据该第一全局变量的值来匹配kafka发送的每条消息的序列号,进而确保消费者按照正确的生产顺序消费所订阅的主题下的消息。
消费者从kafka主题获取消息后,将该消息的序列号与第一全局变量的值相比对,若消息的序列号与第一全局变量的值相同,表征消费者当前从kafka主题获取的消息是按照正确的生产顺序获得的消息,可以直接进行消费,此时则执行S102,消费该消息;反之,若消息的序列号与第一全局变量的值不相同,表征消费者当前从kafka主题获取的消息并不是按照正确的生产顺序获得的消息,不能直接消费,此时则执行S104。
基于上述设计,本发明实施例所提供的一种消息处理方法,通过判断从kafka获取的消息中包含的序列号与第一全局变量的值是否相同的方式,且只有在消息的序列号与第一全局变量的值相同时,消费该消息,相比于现有技术,使消费者在消费所订阅的主题下的消息时,不再依据每条消息产生时的时间戳来判断不同消息间的生产顺序,而是依据获得的消息所包含的序列号与第一全局变量的值是否相同,以确保消费者按照正确的生产顺序消费订阅的主题下的消息。
由于消费者是按消息的生产顺序消费消息,因此,消费者在每次欲消费的消息时,第一全局变量的值是不同的。
因此,可选地,作为一种实施方式,请继续参阅图3,在本发明实施例中,若消息的序列号与第一全局变量的值相同,该消息处理方法还包括以下步骤:
S103,更新第一全局变量的值。
若消费者所获得的消息中包含的序列号与第一全局变量的值相同,并消费该消息后,消费者更新该第一全局变量的值,以结束当前的消费过程,其中,该更新后的第一全局变量的值用于指示下一次待消费的消息,在消费者所订阅的主题包含的所有消息中的生产顺序。
并且,消费者在更新第一全局变量的值后,根据该更新后的第一全局变量的值,返回继续执行S100。
如上所述,若消费者判定从kafka主题获取的消息的序列号与第一全局变量的值不相同,表征消费者所获得的消息,并不是按照正确的生产顺序所获得的消息,不能直接用于消费。但由于kafka的特性之一为,同一条消息kafka只会发送一次给同一消费者。
因此,可选地,作为一种实施方式,请继续参阅图3,在本发明实施例中,若消息的序列号与第一全局变量的值不同,该消息处理方法还包括以下步骤:
S104,将消息保存到预设的数据库。
S106,在预设的数据库中查找序列号与第一全局变量的值相同的消息;若查找到,消费查找到的消息,并更新第一全局变量的值,且以更新后的第一全局变量的值,返回执行S106;若查找不到,返回执行S100。
若消费者判定消息的系列号与第一全局变量的值不相同,消费者则将该消息保存到预设的数据库,其中,该预设的数据库用于存储消费者接收到的订阅的主题下的全部消息中序列号与第一全局变量的值不相同时的消息。比如,在如图5所示的示意图中,假定第一全局变量的值为3,而消费者从kafka获取到的消息为消息E,消息E的标识信息4与第一全局变量的值不同,此时消费者则将消息E保存到预设的数据库。
消费者将所获取到的消息保存至预设的数据库后,在预设的数据库中查找序列号与第一全局变量的值相同的消息,若在预设的数据库中能够查找到序列号与第一全局变量的值相同的消息,则消费该查找到的消息,并更新第一全局变量的值,且以更新后的第一全局变量的值,返回执行S106,也就是说,若在预设的数据库中能够查找到序列号与第一全局变量的值相同的消息,则消费者在后续的消费过程中,会先在预设的数据库中查找待消费的消息;反之,若查找不到,则返回执行S100。
并且,可选地,作为一种实施方式,若消费者在该预设的数据库中查找到序列号与第一全局变量的值相同的消息,且消费该查找到的消息后,请继续参阅图3,该消息处理方法还包括以下步骤:
S107,从预设的数据库中删除查找到的消息。
对于在预设的数据库中查找到的消息,由于消费者在后续的消费过程中,不会再消费该查找到的消息,因此,消费者在消费该查找到的消息后,从预设的数据库中删除该查找到的消息,以使消费者在后续消费消息时,若从kafka主题获取到的消息的序列号与后续消费时第一全局变量的值不相同,减小从预设的数据库中查找的消息的数量,提升查找效率。
并且,若消费者在预设的数据库中查找不到序列号与第一全局变量的值相同的消息时,会再执行S100,直到消费者消费到序列号与第一全局变量的值相同的消息。但若从kafka主题中一直获取不到序列号与第一全局变量的值相同的消息,消费者可能会陷入不停地从kafka主题获取消息的循环中。
因此,可选地,作为一种实施方式,在一次消息的消费循环中,从消费者在预设的数据库中查找不到序列号与第一全局变量的值相同的消息,且返回执行S100时,开始计时,若在预设时间范围内,消费者消费到序列号与第一全局变量的值相同的消息,则停止计时;而在预设时间范围内,消费者未消费到序列号与第一全局变量的值相同的消息,则此时消费者停止所有步骤,避免消费者陷入不停地从kafka主题获取消息的循环中。
值得说明的是,在一种可能的实施方式中,若在预设的数据库中能够查找到序列号与第一全局变量的值相同的消息,则消费者在后续欲消费消息时,会先在预设的数据库中查找待消费的消息,此时若在预设的数据库中查找待消费的消息后,才会再执行S100。但应该注意的是,此时消费者执行S100从kafka获取消息,并不是因为从kafka获取的消息的序列号与第一全局变量的值不相同,而是因为预设的数据库中没有保存到序列号与第一全局变量的值相同的消息,因此,此时消费者执行S100,可以不需要计时。
也就是说,对于消费者的一次消费循环,计时机制的开启,需要消费者至少已经执行过一次S100后,若再于S106判定在预设的数据库中查找不到序列号与第一全局变量的值相同的消息,则开始计时。
并且,可选地,作为一种实施方式,若消费者在预设时间范围内,未消费到序列号与第一全局变量的值相同的消息,此时产生告警信息,比如说产生“kafka故障,请求人为干预”等字样,并通过显示设备进行显示,以告知管理人员进行人为干预,维护kafka的正常运行。
值得说明的是,上述告警的方式仅仅是用于说明进行告警的方式之一,在本发明实施例其他的一些实施方式,还可以通过其他的方式进行告警,比如消费者向预先绑定关系的手机号码发送告警短信,以告知管理人员进行人为干预,在本发明实施例中,消费者只要能产生告警信息,能够起到告知管理人员进行人为干预的效果,提醒管理人员进行维护即可,不对告警的方式进行限定,比如消费者告警的方式还可以是控制报警设备发出报警铃音。
基于上述设计,本发明实施例所提供的一种消息处理方法,通过将从kafka主题获取的序列号与第一全局变量的值不相同的消息保存到预设的数据库,以使消费者在后续消费的过程中,若从kafka主题中获取到的消息的序列号与后续消费时的第一全局变量的值不相同时,能够在该预设的数据库中查找到序列号与后续消费时的第一全局标量的值相同的消息,维持消费者正常的消费。
可选地,请继续参阅图3,作为一种实施方式,消费者在将消息保存到预设的数据库之后,该消息处理方法还包括以下步骤:
S105,判断第一全局变量的值是否大于第二全局变量的值;若为否,执行S106;若为是,执行S108。
S108,更新第二全局变量的值。
消费者在消费消息时,消费者还记录有第二全局变量,该第二全局变量的值用于指示kafka主题中保存的消息的最大序列号。比如,在如图4所示的时刻,若消费者向kafka请求更新第二全局变量的值,kafka中主题A下包含有6条消息,且最大的序列号为5,则此时消费者记录的第二全局变量的值为5;若是在kafka中主题A下只包含有消息A、消息B及消息C时,那么消费者记录的第二全局变量的值为2。
而在消费判定从kafka主题获取的消息的序列号与第一全局变量的值不相同,且第一全局变量的值小于或等于第二全局变量的值时,表征消费者当前待消费的消息有可能位于预设的数据库中,此时执行S106;反之,若第一全局变量的值大于第二全局变量的值,表征消费者可能消费超前,当前待消费的消息生产者可能还未生产或已生产但未记录在kafka的主题中,此时消费者则从kafka主题中获取新的最大序列号,以更新第二全局变量的值,进而再返回执行S105,直到第一全局变量的值小于或等于第二全局变量的值后,执行S106。
基于上述设计,本发明实施例所提供的一种消息处理方法,在判定第一全局变量的值大于第二全局变量的值时,通过从kafka主题中获取新的最大序列号,以更新第二全局变量的值,使消费者依据该更新后的第二全局变量的值,判断待消费的消息是否有可能位于预设的数据库,确保后续正常地消费消息。
请参阅图6,图6示出了本发明实施例所提供的一种消息处理装置200的一种示意性结构图,该消息处理装置200包括收发模块201及处理模块202。
收发模块201用于从kafka主题获取消息,其中,消息中包含有序列号,序列号用于指示消息生产者在生产消息时的顺序。
处理模块202用于若消息的序列号与第一全局变量的值相同,消费消息,其中,第一全局变量的值用于指示待消费的消息在kafka主题中的序列号。
可选地,作为一种实施方式,处理模块202还用于,若消息的序列号与第一全局变量的值相同,更新第一全局变量的值,且以更新后的第一全局变量的值,继续从kafka主题获取消息。
可选地,作为一种实施方式,处理模块202还用于,若消息的序列号与第一全局变量的值不同,将消息保存到预设的数据库。
处理模块202还用于,在预设的数据库中查找序列号与第一全局变量的值相同的消息。
若查找到,处理模块202消费查找到的消息,并更新第一全局变量的值,且以更新后的第一全局变量的值,继续在预设的数据库中查找序列号与第一全局变量的值相同的消息。
若查找不到,处理模块202则继续从kafka主题获取消息。
可选地,作为一种实施方式,处理模块202还用于,比较第一全局变量的值和第二全局变量的值,其中,第二全局变量的值用于指示kafka主题中保存的消息的最大序列号。
处理模块202还用于,若第一全局变量的值大于第二全局变量的值,则更新第二全局变量的值,并以更新后的第二全局变量的值,继续比较第一全局变量的值和第二全局变量的值。
处理模块202还用于,若第一全局变量的值小于或等于第二全局变量的值,则在预设的数据库中查找序列号与第一全局变量的值相同的消息。
可选地,作为一种实施方式,处理模块202还用于,从预设的数据库中删除查找到的消息。
在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
综上所述,本发明实施例所提供的一种消息处理方法及装置,通过判断从kafka获取的消息中包含的序列号与第一全局变量的值是否相同的方式,且只有在消息的序列号与第一全局变量的值相同时,消费该消息,相比于现有技术,使消费者在消费所订阅的主题下的消息时,不再依据每条消息产生时的时间戳来判断不同消息间的生产顺序,而是依据获得的消息所包含的序列号与第一全局变量的值是否相同,以确保消费者按照正确的生产顺序消费订阅的主题下的消息;还通过将从kafka主题获取的序列号与第一全局变量的值不相同的消息保存到预设的数据库,以使消费者在后续消费的过程中,若从kafka主题中获取到的消息的序列号与后续消费时的第一全局变量的值不相同时,能够在该预设的数据库中查找到序列号与后续消费时的第一全局标量的值相同的消息,维持消费者正常的消费;还在判定第一全局变量的值大于第二全局变量的值时,通过从kafka主题中获取新的最大序列号,以更新第二全局变量的值,使消费者依据该更新后的第二全局变量的值,判断待消费的消息是否有可能位于预设的数据库,确保后续正常地消费消息。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其它的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。
Claims (6)
1.一种消息处理方法,其特征在于,所述方法包括:
从kafka主题获取消息,其中,所述消息中包含有序列号,所述序列号用于指示消息生产者在生产所述消息时的顺序;
若所述消息的序列号与第一全局变量的值相同,消费所述消息,其中,所述第一全局变量的值用于指示待消费的消息在所述kafka主题中的序列号;
若所述消息的序列号与第一全局变量的值不同,将所述消息保存到预设的数据库、并在所述预设的数据库中查找序列号与所述第一全局变量的值相同的消息,若查找到,则消费所述查找到的消息,并更新所述第一全局变量的值,且以所述更新后的第一全局变量的值,返回执行在所述预设的数据库中查找序列号与所述第一全局变量的值相同的消息的步骤,若查找不到,则返回执行所述从kafka主题获取消息的步骤;若所述消息的序列号与第一全局变量的值相同,所述方法还包括:
更新所述第一全局变量的值,且以所述更新后的第一全局变量的值,返回执行所述从kafka主题获取消息的步骤,其中,所述更新后的第一全局变量的值用于指示下一次待消费的消息,在消费者所订阅的主题包含的所有消息中的生产顺序。
2.如权利要求1所述的方法,其特征在于,所述将所述消息保存到预设的数据库之后,所述方法还包括:
比较所述第一全局变量的值和第二全局变量的值,其中,所述第二全局变量的值用于指示所述kafka主题中保存的消息的最大序列号;
若所述第一全局变量的值大于所述第二全局变量的值,则更新所述第二全局变量的值,并以所述更新后的第二全局变量的值,返回执行所述比较所述第一全局变量的值和第二全局变量的值的步骤;
若所述第一全局变量的值小于或等于所述第二全局变量的值,则执行所述在所述预设的数据库中查找序列号与所述第一全局变量的值相同的消息的步骤。
3.如权利要求1所述的方法,其特征在于,若在所述预设的数据库中查找到序列号与所述第一全局变量的值相同的消息,消费所述查找到的消息后,所述方法还包括:
从所述预设的数据库中删除所述查找到的消息。
4.一种消息处理装置,其特征在于,所述装置包括:
收发模块,用于从kafka主题获取消息,其中,所述消息中包含有序列号,所述序列号用于指示消息生产者在生产所述消息时的顺序;
处理模块,用于若所述消息的序列号与第一全局变量的值相同,消费所述消息,其中,所述第一全局变量的值用于指示待消费的消息在所述kafka主题中的序列号;
所述处理模块,还用于若所述消息的序列号与第一全局变量的值不同,将所述消息保存到预设的数据库、并在所述预设的数据库中查找序列号与所述第一全局变量的值相同的消息,若查找到,则消费所述查找到的消息,并更新所述第一全局变量的值,且以所述更新后的第一全局变量的值,返回执行在所述预设的数据库中查找序列号与所述第一全局变量的值相同的消息的步骤,若查找不到,则返回执行所述从kafka主题获取消息的步骤;
所述处理模块还用于,若所述消息的序列号与第一全局变量的值相同,更新所述第一全局变量的值,且以所述更新后的第一全局变量的值,继续从kafka主题获取消息,其中,所述更新后的第一全局变量的值用于指示下一次待消费的消息,在消费者所订阅的主题包含的所有消息中的生产顺序。
5.如权利要求4所述的装置,其特征在于,
所述处理模块还用于,比较所述第一全局变量的值和第二全局变量的值,其中,所述第二全局变量的值用于指示所述kafka主题中保存的消息的最大序列号;
所述处理模块还用于,若所述第一全局变量的值大于所述第二全局变量的值,则更新所述第二全局变量的值,并以所述更新后的第二全局变量的值,继续比较所述第一全局变量的值和第二全局变量的值;
所述处理模块还用于,若所述第一全局变量的值小于或等于所述第二全局变量的值,则在所述预设的数据库中查找序列号与所述第一全局变量的值相同的消息。
6.如权利要求4所述的装置,其特征在于,
所述处理模块还用于,从所述预设的数据库中删除所述查找到的消息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811524910.4A CN109788026B (zh) | 2018-12-13 | 2018-12-13 | 消息处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811524910.4A CN109788026B (zh) | 2018-12-13 | 2018-12-13 | 消息处理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109788026A CN109788026A (zh) | 2019-05-21 |
CN109788026B true CN109788026B (zh) | 2022-03-08 |
Family
ID=66495962
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811524910.4A Active CN109788026B (zh) | 2018-12-13 | 2018-12-13 | 消息处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109788026B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111741041B (zh) * | 2019-07-10 | 2023-05-12 | 北京京东尚科信息技术有限公司 | 消息处理方法及其装置、电子设备及计算机可读介质 |
CN110413424B (zh) * | 2019-07-24 | 2021-12-10 | 深圳乐信软件技术有限公司 | 可配置的第三方消息回调方法、装置、服务器和存储介质 |
CN111555957B (zh) * | 2020-03-26 | 2022-08-19 | 孩子王儿童用品股份有限公司 | 一种基于Kafka的同步消息服务系统及实现方法 |
CN112615920B (zh) * | 2020-12-18 | 2023-03-14 | 北京达佳互联信息技术有限公司 | 异常检测方法、装置、电子设备、存储介质及程序产品 |
CN113612679B (zh) * | 2021-07-29 | 2023-02-24 | 百度在线网络技术(北京)有限公司 | 一种消息验证方法、装置、电子设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102368700A (zh) * | 2011-10-25 | 2012-03-07 | 曙光信息产业(北京)有限公司 | 一种分布式系统中消息的传递方法 |
CN105549556A (zh) * | 2015-12-17 | 2016-05-04 | 东北大学 | 一种用于工业过程实时监控的数据采集传输系统及方法 |
CN106201735A (zh) * | 2016-06-27 | 2016-12-07 | 北京票之家科技有限公司 | 消息传输方法及系统 |
CN107656825A (zh) * | 2017-09-01 | 2018-02-02 | 上海艾融软件股份有限公司 | 消息处理方法、装置及系统 |
CN108255628A (zh) * | 2016-12-29 | 2018-07-06 | 北京国双科技有限公司 | 一种数据处理方法及装置 |
CN108984325A (zh) * | 2018-07-20 | 2018-12-11 | 北京北信源信息安全技术有限公司 | 消息队列消费方法和装置 |
-
2018
- 2018-12-13 CN CN201811524910.4A patent/CN109788026B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102368700A (zh) * | 2011-10-25 | 2012-03-07 | 曙光信息产业(北京)有限公司 | 一种分布式系统中消息的传递方法 |
CN105549556A (zh) * | 2015-12-17 | 2016-05-04 | 东北大学 | 一种用于工业过程实时监控的数据采集传输系统及方法 |
CN106201735A (zh) * | 2016-06-27 | 2016-12-07 | 北京票之家科技有限公司 | 消息传输方法及系统 |
CN108255628A (zh) * | 2016-12-29 | 2018-07-06 | 北京国双科技有限公司 | 一种数据处理方法及装置 |
CN107656825A (zh) * | 2017-09-01 | 2018-02-02 | 上海艾融软件股份有限公司 | 消息处理方法、装置及系统 |
CN108984325A (zh) * | 2018-07-20 | 2018-12-11 | 北京北信源信息安全技术有限公司 | 消息队列消费方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN109788026A (zh) | 2019-05-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109788026B (zh) | 消息处理方法及装置 | |
KR101871383B1 (ko) | 계층적 데이터 구조의 노드 상에서 재귀적 이벤트 리스너를 사용하기 위한 방법 및 시스템 | |
CN110362455B (zh) | 一种数据处理方法和数据处理装置 | |
CN110543512B (zh) | 一种信息同步方法,装置及系统 | |
CN111026749B (zh) | 业务告警方法及装置 | |
CN113704243A (zh) | 数据分析方法、装置、计算机装置及存储介质 | |
CN112925661A (zh) | 消息处理方法、装置、计算机设备及存储介质 | |
AU2014302051B2 (en) | Method and apparatus for automating network data analysis of user's activities | |
US10250550B2 (en) | Social message monitoring method and apparatus | |
CN111355802A (zh) | 信息推送方法和装置 | |
CN111652658A (zh) | 画像融合方法、装置、电子设备及计算机可读存储介质 | |
CN109992279A (zh) | 配置数据更新方法、装置、计算设备及存储介质 | |
CN110311826B (zh) | 网络设备配置方法及装置 | |
CN110955460A (zh) | 一种服务进程启动方法、装置、电子设备和存储介质 | |
CN113965538B (zh) | 设备状态消息处理方法、装置及存储介质 | |
CN114422576B (zh) | 一种会话清理方法、装置、计算机设备和可读存储介质 | |
CN113595884B (zh) | 一种消息提醒方法及应用端 | |
CN109739883B (zh) | 提升数据查询性能的方法、装置和电子设备 | |
US20210141791A1 (en) | Method and system for generating a hybrid data model | |
CN108737522B (zh) | 一种消息的处理方法、装置和系统 | |
CN112667284A (zh) | 微服务维护方法、装置、服务器及存储介质 | |
CN111291127A (zh) | 一种数据同步方法、装置、服务器及存储介质 | |
CN112685557A (zh) | 可视化信息资源管理方法及装置 | |
CN112579682A (zh) | 数据模型变更的通知方法、装置、电子设备及存储介质 | |
CN111884932A (zh) | 一种链路确定方法、装置、设备和计算机可读存储介质 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |