事件处理方法、装置及系统
文献发布时间:2023-06-19 10:19:37
技术领域
本发明涉及微服务技术领域,具体而言,涉及一种事件处理方法、装置及系统。
背景技术
SpringCloud是基于SpringBoot的一系列有序框架集合,它提供了微服务开发所需要的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等组件,并对其进行了封装与整合,组件之间互相解耦、使用灵活,从而降低了各服务模块的开发成本。其中,Spring Cloud Eureka是对Eureka的二次封装,实现了服务治理的功能,Spring Cloud Eureka提供服务器与客户端,服务器即是Eureka服务注册中心,客户端完成微服务向Eureka服务的注册与发现。
但是,在微服务部署完成后,各服务的运行状态不能自动检测、上报,需要运维人员手动检测、上报,不利于问题的定位排查以及系统的日常运维。
针对上述的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种事件处理方法、装置及系统,以至少解决现有技术中各服务的运行状态无法自动检测、上报的技术问题。
根据本发明实施例的一个方面,提供了一种事件处理方法,包括:监听目标事件,其中,目标事件包括如下至少之一:注册、下线、续约;获取监听到的目标事件的事件信息;根据目标事件的事件信息,确定目标事件是否出现异常。
可选地,监听目标事件,包括:创建目标事件监听类;通过目标事件监听类对目标事件进行监听。
可选地,在获取监听到的目标事件的事件信息之后,该方法还包括:对目标事件的事件信息进行封装;将封装后的事件信息发送至业务服务器中,其中,业务服务器用于根据目标事件的事件信息,确定目标事件是否出现异常。
可选地,目标事件的事件信息包括如下至少之一:IP地址、端口号、事件名称,其中,根据目标事件的事件信息,确定目标事件是否出现异常,包括:判断目标事件的事件信息与预设事件信息是否相同;如果目标事件的事件信息与预设事件信息不同,则确定目标事件出现异常;如果目标事件的事件信息与预设事件信息相同,则确定目标事件未出现异常。
可选地,事件信息包括:上报时间,其中,根据目标事件的事件信息,确定目标事件是否出现异常,包括:获取当前时间与目标事件的上报时间的差值,得到时间差;判断时间差是否大于预设值;如果时间差大于预设值,则确定目标事件出现异常;如果时间差小于或等于预设值,则确定目标事件未出现异常。
可选地,在确定目标事件出现异常之后,该方法还包括:基于目标事件的事件信息,生成告警信息,其中,告警信息用于表征目标事件出现异常;发送告警信息至预设终端。
可选地,在获取监听到的目标事件的事件信息之后,该方法还包括:将目标事件的事件信息存储至关系型数据库中。
可选地,在根据目标事件的事件信息,确定目标事件是否出现异常之前,该方法还包括:在定时时间到达的情况下,获取关系型数据库中存储的目标事件的事件信息,并根据目标事件的事件信息,确定目标事件是否出现异常。
根据本发明实施例的另一方面,还提供了一种事件处理装置,包括:监听模块,用于监听目标事件,其中,目标事件包括如下至少之一:注册、下线、续约获取模块,用于获取监听到的目标事件的事件信息;确定模块,用于根据目标事件的事件信息,确定目标事件是否出现异常。
根据本发明实施例的另一方面,还提供了一种事件处理系统,包括:监听服务器,用于监听目标事件,获取监听到的目标事件的事件信息,其中,目标事件包括如下至少之一:注册、下线、续约;业务服务器,与监听服务器连接,用于根据目标事件的事件信息,确定目标事件是否出现异常。
可选地,该系统还包括:预设终端,与业务服务器连接,用于接收业务服务器发送的告警信息,其中,告警信息由业务服务器基于目标事件的事件信息生成,告警信息用于表征目标事件出现异常。
可选地,业务服务器包括:关系型数据库,用于存储目标事件的事件信息。
根据本发明实施例的另一方面,还提供了一种计算机可读存储介质,计算机可读存储介质包括存储的程序,其中,在程序运行时控制计算机可读存储介质所在设备执行上述的事件处理方法。
根据本发明实施例的另一方面,还提供了一种处理器,处理器用于运行程序,其中,程序运行时执行上述的事件处理方法。
在本发明实施例中,在监听到目标事件之后,可以基于获取到的目标事件的事件信息判断目标事件是否出现异常,实现了各服务的运行状态自动检测的目的,达到了降低人力与时间的工作成本的技术效果,进而解决了现有技术中各服务的运行状态无法自动检测、上报的技术问题。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本申请的实施例的一种事件处理方法的流程图;
图2是根据本发明实施例的一种可选的事件处理方法的流程图;
图3是根据本发明实施例的一种可选的服务集群的示意图;
图4是根据本发明实施例的一种事件处理装置的示意图;以及
图5是根据本发明实施例的一种事件处理系统的示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
实施例1
根据本发明实施例,提供了一种事件处理方法,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
图1是根据本发明实施例的一种事件处理方法的流程图,如图1所示,该方法包括如下步骤:
步骤S102,监听目标事件,其中,目标事件包括如下至少之一:注册、下线、续约。
上述步骤中的目标事件可以是各个服务的注册(EurekaInstanceRegisteredEvent)、下线(EurekaInstanceCanceledEvent)、续约(EurekaInstanceRenewedEvent)事件。
Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。对于像Hadoop一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。kafka具有高性能、持久化、多副本备份、横向扩展能力。生产者往队列里写消息,消费者从队列里取消息进行业务逻辑。一般在架构设计中起到解耦、削峰、异步处理的作用。kafka对外使用topic的概念,生产者往topic里写消息,消费者从读消息。为了做到水平扩展,一个topic实际是由多个partition组成的,遇到瓶颈时,可以通过增加partition的数量来进行横向扩容。单个parition内是保证消息有序。每新写一条消息,kafka就是在对应的文件append写,所以性能非常高。
在一种可选的实施例中,可以在Eureka服务中对各个服务的注册、下载、续约等目标事件进行监听。
步骤S104,获取监听到的目标事件的事件信息。
上述步骤中的目标事件的事件信息可以包括:IP地址、端口号、事件名称等,但不仅限于此。可选的,事件信息还可以包括:上报时间,该上报时间可以是指将事件信息上报给系统管理员的最后时间。
在一种可选的实施例中,在对微服务进行监听时,首先获取目标事件的事件信息,以续约事件为例,IP地址为:http://127.0.0.1:10086/EUREKA,端口号:10086,事件名称:“服务进行续约”。在获取到事件信息之后,可以将事件信进行封装存储,完成事件信息记录的目的。
步骤S106,根据目标事件的事件信息,确定目标事件是否出现异常。
上述步骤中的异常可以是指服务状态未及时上报或者服务状态发生异常。
在一种可选的实施例中,在获取到事件信息之后,可以基于事件信息本身确定服务状态是否发生异常,例如,通过服务唯一标识及目标事件的更新事件是否超过某一阈值进行判断,或者通过事件上报心跳频率判断服务是否频繁上下线;通过判断事件信息是否上报超时确定服务状态未及时上报,从而确定出现异常的目标事件,达到目标事件自动检测的目的,进一步通过对出现异常的目标时间进行上报,达到目标事件自动上报的目的。
通过本发明上述实施例,在监听到目标事件之后,可以基于获取到的目标事件的事件信息判断目标事件是否出现异常,实现了各服务的运行状态自动检测的目的,达到了降低人力与时间的工作成本的技术效果,进而解决了现有技术中各服务的运行状态无法自动检测、上报的技术问题。
可选地,在本发明上述实施例中,监听目标事件,包括:创建目标事件监听类;通过目标事件监听类对目标事件进行监听。
在一种可选的实施例中,可以在服务启动类中添加@EnableEurekaClient注解开启Eureka客户端服务,并在Eureka服务中编写事件监听类,可以利用@EventListener注解完成Eureka中事件的监听实现。
可选地,在本发明上述实施例中,在获取监听到的目标事件的事件信息之后,该方法还包括:对目标事件的事件信息进行封装;将封装后的事件信息发送至业务服务器中,其中,业务服务器用于根据目标事件的事件信息,确定目标事件是否出现异常。
在一种可选的实施例中,Eureka服务可以实现目标事件的监听,在获取到事件信息之后,可以将事件信息进行封装,并将事件信息统一通过kafka发送至业务服务中,由于业务服务根据事件信息或是否超时未上报新的事件信息判定服务状态。
可选地,在本发明上述实施例中,根据目标事件的事件信息,确定目标事件是否出现异常,包括:判断目标事件的事件信息与预设事件信息是否相同;如果目标事件的事件信息与预设事件信息不同,则确定目标事件出现异常;如果目标事件的事件信息与预设事件信息相同,则确定目标事件未出现异常。
上述的预设事件信息可以是在目标事件未出现异常时的事件信息,可以根据实际检测需要进行设定,本发明对此不作具体限定。
在一种可选的实施例中,在获取到事件信息之后,可以通过将事件信息与对应的预设事件信息进行比较,确定目标事件是否出现异常,如果事件信息与预设事件信息相同,则确定目标事件未出现异常;如果事件信息与预设事件信息不同,则确定目标事件出现异常。
可选地,在本发明上述实施例中,根据目标事件的事件信息,确定目标事件是否出现异常,包括:获取当前时间与目标事件的上报时间的差值,得到时间差;判断时间差是否大于预设值;如果时间差大于预设值,则确定目标事件出现异常;如果时间差小于或等于预设值,则确定目标事件未出现异常。
上述的预设值可以是系统中预先设置的超时判定值,可以根据实际检测需要进行设定,本发明对此不作具体限定。
在一种可选的实施例中,可以利用当前时间减去目标事件的事件信息的最后的上报时间,得到时间差,并判断时间差是否大于超时判定值,如果是,则表明该目标事件超时未上报新的事件信息,因此可以确定目标事件出现异常;如果否,则表明该目标时间未超时,因此可以确定目标事件未出现异常。
可选地,在本发明上述实施例中,在确定目标事件出现异常之后,该方法还包括:基于目标事件的事件信息,生成告警信息,其中,告警信息用于表征目标事件出现异常;发送告警信息至预设终端。
上述的预设终端可以是系统管理员的智能手机、平板电脑、掌上电脑、笔记本电脑、个人电脑等终端。
在一种可选的实施例中,在确定目标事件出现异常之后,可以统计封装出现异常的目标事件的事件信息,生成告警信息,并通过发送邮件、短信、微信等方式将告警信息发送至系统管理员,实现各服务的运行状态自动上报的目的,进一步降低了人力与时间的工作成本的效果。
可选地,在本发明上述实施例中,在获取监听到的目标事件的事件信息之后,该方法还包括:将目标事件的事件信息存储至关系型数据库中。
上述的关系型数据库可以是mysql,但不仅限于此,也可以是其他类型的数据库。
在一种可选的实施例中,业务服务可以启动新线程,拉取kafka中发送的事件信息,并将其存储在mysql中,kafka中利用相同的groupID保证集群内不会拉取到重复的事件信息。同时每一个服务根据唯一标识在mysql中存储为一条记录,后续事件日志都只会对其更新,所以即便重复也不影响效果。
可选地,在本发明上述实施例中,在根据目标事件的事件信息,确定目标事件是否出现异常之前,该方法还包括:在定时时间到达的情况下,获取关系型数据库中存储的目标事件的事件信息,并根据目标事件的事件信息,确定目标事件是否出现异常。
上述的定时时间可以是部署定时任务时预先设定的时间,可以根据实际检测需要进行设定,本发明对此不作具体限定。
在一种可选的实施例中,在业务服务中,可以利用quartz框架实现集群环境下的定时任务,保证同一时间只有一个业务服务在执行,并定时读取mysql中存储的事件信息,并根据读取出的事件信息确定目标事件是否出现异常。
下面结合图2和图3对本发明一种优选的实施例进行详细说明。如图2所示,该方法包括如下步骤:
步骤S21,搭建SpringCloud Eureka服务集群。
如图3所示,服务集群可以包括:服务器1和服务器2,每个服务器可以包括:Eureka、网关服务和业务服务等。
可选的,可以导入spring-cloud-starter-netflix-eureka-server jar包,在服务启动类中添加@EnableEurekaServer注解开启Eureka服务,并修改服务器口、IP等相关配置。
需要说明的是,如果已经搭建成功,则无需执行步骤S21。
步骤S22,将集群内其他服务注册至注册中心。
可选的,可以导入spring-cloud-starter-netflix-eureka-client jar包,在服务启动类中添加@EnableEurekaClient注解开启Eureka客户端服务,修改注册中心的IP、端口等相关配置。
需要说明的是,如果已经将其他服务注册,则无需执行步骤S22。
步骤S23,编写Eureka事件监听类,监听工程内其他服务的注册、下线、续约事件。
可选的,可以利用@EventListener注解完成Eureka中事件的监听实现,监听服务的注册(EurekaInstanceRegisteredEvent)、下线(EurekaInstanceCanceledEvent)、续约(EurekaInstanceRenewedEvent)事件。
步骤S24,记录事件、IP地址、端口、服务名称等信息,并进行封装。
步骤S25,将事件信息通过kafka发送至业务服务。
如图3所示,上述步骤S23至步骤S25可以在Eureka服务中执行,并通过kafka发送事件信息至业务服务。
步骤S26,启动线程实时拉取kafka中的事件信息并存储。
可选的,启动新线程,拉取kafka中发送的服务状态信息,将其存储在mysql中,其中,kafka中利用相同的groupId保证集群内不会拉取到重复的状态数据。
步骤S27,启动定时任务,获取集群中已下线服务或超时未上报新事件信息的服务。
可选的,可以利用quartz框架实现集群环境下的定时任务,保证同一时间只有一个业务服务在执行;定时读取mysql中的事件信息,根据事件信息或是否超时未上报新的事件信息判定目标事件(在系统中预置超时判定值,利用当前时间减去事件信息最后的上报时间是否大于判定值来判断目标事件是否正常)。
步骤S28,封装告警信息,并发送至指定管理员邮箱。
可选的,可以统计封装异常服务信息,发送邮件至系统管理员。
如图3所示,上述步骤S26至步骤S28可以在业务服务中执行,通过业务服务将事件信息存储至mysql,并通过业务服务发送电子邮件。
通过上述方案,可以在微服务部署完成后,对集群内的服务进行监控,并将异常服务的事件信息进行记录反馈的过程,方便研发人员与实施人员实时知晓服务状态,若出现异常也可以第一时间通知运维人员,同时记录来源方便定位,从而避免了问题的遗留、堆积,达到了节约人力成本,提高了系统的运维效率的效果。
根据本发明实施例的另一方面,还提供了一种事件处理装置,该装置可以执行上述实施例中的事件处理方法,具体实施方案和优选应用场景与上述实施例相同,在此不作赘述。
图4是根据本发明实施例的一种事件处理装置的示意图,如图4所示,该装置包括:
监听模块42,用于监听目标事件,其中,目标事件包括如下至少之一:注册、下线、续约;
获取模块44,用于获取监听到的目标事件的事件信息;
确定模块46,用于根据目标事件的事件信息,确定目标事件是否出现异常。
可选地,在本发明上述实施例中,监听模块包括:创建单元,用于创建目标事件监听类;监听单元,用于通过目标事件监听类对目标事件进行监听。
可选地,在本发明上述实施例中,该装置还包括:封装模块,用于对目标事件的事件信息进行封装;第一发送模块,用于将封装后的事件信息发送至业务服务器中,其中,业务服务器用于根据目标事件的事件信息,确定目标事件是否出现异常。
可选地,在本发明上述实施例中,确定模块包括:第一判断单元,用于判断目标事件的事件信息与预设事件信息是否相同;第一确定单元,用于如果目标事件的事件信息与预设事件信息不同,则确定目标事件出现异常;第二确定单元,用于如果目标事件的事件信息与预设事件信息相同,则确定目标事件未出现异常。
可选地,在本发明上述实施例中,确定模块包括:获取单元,用于获取当前时间与目标事件的上报时间的差值,得到时间差;第二判断单元,用于判断时间差是否大于预设值;第一确定单元,用于如果时间差大于预设值,则确定目标事件出现异常;第二确定单元,用于如果时间差小于或等于预设值,则确定目标事件未出现异常。
可选地,在本发明上述实施例中,该装置还包括:生成模块,用于基于目标事件的事件信息,生成告警信息,其中,告警信息用于表征目标事件出现异常;第二发送模块,用于发送告警信息至预设终端。
可选地,在本发明上述实施例中,该装置还包括:存储模块,用于将目标事件的事件信息存储至关系型数据库中。
可选地,在本发明上述实施例中,该装置还包括:处理模块,用于在定时时间到达的情况下,获取关系型数据库中存储的目标事件的事件信息,并根据目标事件的事件信息,确定目标事件是否出现异常。
根据本发明实施例的另一方面,还提供了一种事件处理系统,该系统可以执行上述实施例中的事件处理方法,具体实施方案和优选应用场景与上述实施例相同,在此不作赘述。
图5是根据本发明实施例的一种事件处理系统的示意图,如图5所示,该系统包括:
监听服务器52,用于监听目标事件,获取监听到的目标事件的事件信息,其中,目标事件包括如下至少之一:注册、下线、续约。
上述的监听服务器可以是执行Eureka服务的服务器。
业务服务器54,与监听服务器52连接,用于根据目标事件的事件信息,确定目标事件是否出现异常。
上述的业务服务器可以是执行业务服务的服务器。
可选地,在本发明上述实施例中,监听服务器52还用于创建目标事件监听类,并通过目标事件监听类对目标事件进行监听。
可选地,在本发明上述实施例中,监听服务器52还用于对目标事件的事件信息进行封装,并将封装后的事件信息发送至业务服务器54中。
可选地,在本发明上述实施例中,业务服务器54还用于判断目标事件的事件信息与预设事件信息是否相同,其中,如果目标事件的事件信息与预设事件信息不同,则确定目标事件出现异常;如果目标事件的事件信息与预设事件信息相同,则确定目标事件未出现异常。
可选地,在本发明上述实施例中,业务服务器54还用于获取当前时间与目标事件的上报时间的差值,得到时间差,并判断时间差是否大于预设值,其中,如果时间差大于预设值,则确定目标事件出现异常;如果时间差小于或等于预设值,则确定目标事件未出现异常。
可选地,在本发明上述实施例中,如图5所示,该系统还包括:预设终端56,与业务服务器54连接,用于接收业务服务器发送的告警信息,其中,告警信息由业务服务器基于目标事件的事件信息生成,告警信息用于表征目标事件出现异常。
可选地,在本发明上述实施例中,业务服务器包括:关系型数据库,用于存储目标事件的事件信息。
可选地,在本发明上述实施例中,业务服务器54还用于在定时时间到达的情况下,获取关系型数据库中存储的目标事件的事件信息,并根据目标事件的事件信息,确定目标事件是否出现异常。
根据本发明实施例的另一方面,还提供了一种计算机可读存储介质,计算机可读存储介质包括存储的程序,其中,在程序运行时控制计算机可读存储介质所在设备执行上述实施例中的事件处理方法。
根据本发明实施例的另一方面,还提供了一种处理器,处理器用于运行程序,其中,程序运行时执行上述实施例中的事件处理方法。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
- 订阅事件的注册方法及系统、订阅事件的处理方法及系统
- 基于事件机制模板对实时流事件配置化处理方法及系统