本公开涉及计算机,尤其涉及一种消息处理方法和装置。
背景技术:
1、基于数据库的事务型消息队列是一种确保消息传递与数据库操作在同一个事务中原子性完成的技术。相关技术中,事务型消息发送和接收的处理逻辑复杂,事务型消息队列需要在多个服务或数据库之间协调事务,以保证数据的一致性。而且在高并发场景下,当消息处理达到十万级时处理延迟会明显增加,处理性能不佳。
技术实现思路
1、本公开提供一种消息处理方法和装置,以至少在一定程度上解决相关技术中的技术问题之一。本公开的技术方案如下:
2、根据本公开实施例的第一方面,提供一种消息处理方法,应用于消息生产端,包括:在本地事务提交前,将所述本地事务执行过程中产生的消息上传至本地消息处理组件;通过所述本地消息处理组件确定所述消息对应的本地目标消息队列;调用所述本地目标消息队列的消息持久化器将所述消息保存至本地数据库中和注册所述本地事务的事务监听器;在所述事务监听器监听到所述本地事务提交成功的情况下,将所述消息添加至所述本地目标消息队列,以通过所述本地目标消息队列向消息消费端发送所述消息。
3、根据本公开实施例的第二方面,提供了一种消息处理方法,应用于消息消费端,包括:接收消息生产端发送的消息,将所述消息上传至本地消息处理组件;通过所述本地消息处理组件确定所述消息对应的本地目标消息队列;调用所述本地目标消息队列的消息持久化器将所述消息保存至本地数据库中;将所述消息添加至所述本地目标消息队列,以通过所述本地目标消息队列向本地消息处理模块发送所述消息。
4、根据本公开实施例的第三方面,提供一种消息处理装置,应用于消息生产端,包括:上传模块,用于在本地事务提交前,将所述本地事务执行过程中产生的消息上传至本地消息处理组件;第一确定模块,用于通过所述本地消息处理组件确定所述消息对应的本地目标消息队列;第一调用模块,用于调用所述本地目标消息队列的消息持久化器将所述消息保存至本地数据库中和注册所述本地事务的事务监听器;第一处理模块,用于在所述事务监听器监听到所述本地事务提交成功的情况下,将所述消息添加至所述本地目标消息队列,以通过所述本地目标消息队列向消息消费端发送所述消息。
5、根据本公开实施例的第四方面,提供了一种消息处理装置,应用于消息消费端,包括:第三处理模块,用于接收消息生产端发送的消息,将所述消息上传至本地消息处理组件;第二确定模块,用于通过所述本地消息处理组件确定所述消息对应的本地目标消息队列;第二调用模块,用于调用所述本地目标消息队列的消息持久化器将所述消息保存至本地数据库中;第四处理模块,用于将所述消息添加至所述本地目标消息队列,以通过所述本地目标消息队列向本地消息处理模块发送所述消息。
6、根据本公开实施例的第五方面,提供一种电子设备,包括:处理器;用于存储所述处理器可执行指令的存储器;其中,所述处理器被配置为执行所述指令,以实现如本公开第一方面实施例所述的消息处理方法,或者,实现如本公开第二方面实施例所述的消息处理方法。
7、根据本公开实施例的第六方面,提供一种计算机可读存储介质,当所述计算机可读存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如本公开第一方面实施例所述的消息处理方法,或者,执行如本公开第二方面实施例所述的消息处理方法。
8、根据本公开实施例的第七方面,提供一种计算机程序产品,包括:计算机程序,所述计算机程序被处理器执行时实现如本公开第一方面实施例所述的消息处理方法,或者,实现如本公开第二方面实施例所述的消息处理方法。
9、本公开的实施例提供的技术方案至少带来以下有益效果:
10、1、通过在消息生产端利用消息生产端的本地组件和本地消息队列完成消息的发送(在本地事务提交前,先将消息持久化在本地数据库中,在本地事务提交成功后,再将消息入队后发送),简化了事务型消息发送的处理逻辑,同时这一过程将消息处理和业务逻辑处理解耦,允许异步处理消息,提升了处理性能;
11、同理,通过在消息消费端(异步处理消息时)利用消息消费端的本地组件和本地消息队列将消息发送至本地消息处理模块进行处理(接收到消息后,先将消息持久化,再将消息入队后发送本地消息处理模块处理),简化了事务型消息接收的处理逻辑,提升了处理性能;
12、2、针对消息生产端,通过在事务监听器监听到本地事务提交成功后才将消息添加到本地目标消息队列,可以确保消息发送与本地事务的原子性,即,如果本地事务失败,消息将不会被发送到消息消费端,从而避免了数据不一致的问题,保证了消息生产端的业务处理与消息发送的事务一致性,而针对消息消费端,通过异步处理消息(接收到消息后,利用消息消费端的本地组件和本地消息队列将消息发送至本地消息处理模块进行处理),也能保证消息消费端的消息接收与业务处理的事务一致性;
13、3、本公开中,在消息生产端和消息消费端均使用本地数据库来持久化消息,能在一定程度上缓解由日志文件管理和清理所带来的系统资源占用以及磁盘io性能要求较高的问题,可以使得消息不会因临时性的网络故障或消息队列服务的不可用而丢失,并且在故障恢复后,可以从本地数据库中重新加载并发送或处理这些消息。
14、应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
1.一种消息处理方法,其特征在于,应用于消息生产端,包括:
2.根据权利要求1所述的方法,其特征在于,所述通过所述本地目标消息队列向消息消费端发送所述消息,包括:
3.根据权利要求1所述的方法,其特征在于,所述通过所述本地消息处理组件确定所述消息对应的本地目标消息队列,包括:
4.根据权利要求1所述的方法,其特征在于,所述调用所述本地目标消息队列的消息持久化器将所述消息保存至本地数据库中和注册所述本地事务的事务监听器之前,还包括:
5.根据权利要求1-4中任一项所述的方法,其特征在于,所述方法,还包括:
6.一种消息处理方法,其特征在于,应用于消息消费端,包括:
7.根据权利要求6所述的方法,其特征在于,所述通过所述本地目标消息队列向本地消息处理模块发送所述消息,包括:
8.根据权利要求6所述的方法,其特征在于,所述通过所述本地消息处理组件确定所述消息对应的本地目标消息队列,包括:
9.根据权利要求6所述的方法,其特征在于,所述调用所述本地目标消息队列的消息持久化器将所述消息保存至本地数据库中之前,还包括:
10.根据权利要求6-9中任一项所述的方法,其特征在于,所述方法,还包括:
11.一种消息处理装置,其特征在于,应用于消息生产端,包括:
12.一种消息处理装置,其特征在于,应用于消息消费端,包括: