消息推送方法、装置、电子设备及存储介质与流程

    专利2022-07-07  119


    本申请实施例涉及计算机
    技术领域
    ,尤其涉及一种消息推送方法、装置、电子设备及存储介质。
    背景技术
    :消息可以理解为数据,由一个固定长度的消息头和一个可变长度的消息体组成,通常将消息的发送者称为生产者,将消息的接收者称为消费者。对于分布式消息系统,生产者a执行本地的一个事务,在事务执行成功时,向消费者b发送消息,使得消费者b根据该消息执行相关的操作。但是,在向消费者b发送消息时,可能存在发送失败的情况,这样会导致生成者a的本地事务执行成功,但是消费者b接收不到消息,造成本地事务的执行和消息的发送不一致的问题。技术实现要素:本申请实施例提供一种消息推送方法、装置、电子设备及存储介质,用于实现本地事务的执行和消息的发送一致。第一方面,本申请实施例提供一种消息推送方法,应用于第一设备,包括:将第一消息发送至第二设备的第一消息队列中,所述第一设备与第一用户对应,所述第一消息用于指示第二用户执行预设操作;执行第一事务,并根据所述第一事务的执行结果,生成第二消息,所述第二消息用于指示是否将所述第一消息推送至所述第二用户;将所述第二消息发送至所述第一消息队列中。在第一方面的一种可能的实现方式中,所述根据所述第一事务的执行结果,生成第二消息,包括:在所述第一事务的执行结果为成功时,将第一推送指令携带在所述第二消息中,所述第一推送指令用于指示向所述第二用户推送所述第一消息;在所述第一事务的执行结果为失败时,将第二推送指令携带在所述第二消息中,所述第二推送指令用于指示不向所述第二用户推送所述第一消息。在第一方面的一种可能的实现方式中,所述方法还包括:在所述第一事务的执行结果为成功时,将所述第一消息发送至数据库。在第一方面的一种可能的实现方式中,所述将第一消息发送至第二设备的第一消息队列中,包括:根据所述第一消息与其他消息之间的发送顺序关系,获得所述其他消息所在的目标片区的标识信息,所述目标片区为所述第一消息队列的一个片区,所述目标片区内的消息的处理顺序与排列顺序一致;根据所述目标片区的标识信息,将所述第一消息存放在所述目标片区上。第二方面,本申请实施例提供一种消息推送方法,应用于第二设备,所述方法包括:从第二设备中的第一消息队列中查询第一消息,所述第一消息用于指示第二用户执行预设操作;在预设时间内,从所述第一消息队列中查询第二消息,所述第二消息用于指示是否将所述第一消息推送至所述第二用户;根据所述第二消息,确定是否向所述第二用户推送所述第一消息。在第二方面的一种可能的实现方式中,所述根据所述第二消息,确定是否向所述第二用户推送所述第一消息,包括:在所述第二消息携带第一推送指令时,确定向所述第二用户推送所述第一消息,所述第一推送指令用于指示向所述第二用户推送所述第一消息;在所述第二消息携带第二推送指令时,确定不向所述第二用户推送所述第一消息,所述第二推送指令用于指示不向所述第二用户推送所述第一消息。在第二方面的一种可能的实现方式中,所述方法还包括:在所述预设时间内,从所述第一消息队列中未查询到所述第二消息时,从所述第一设备处查询第一事务的执行结果;在所述第一事务的执行结果为成功时,向所述第二用户推送所述第一消息;在所述第一事务的执行结果为失败时,不向所述第二用户推送所述第一消息。在第二方面的一种可能的实现方式中,所述方法还包括:在所述预设时间内,从所述第一消息队列中未查询到所述第二消息时,从数据库中查询所述第一消息;在所述数据库中查询到所述第一消息时,向所述第二用户推送所述第一消息;在所述数据库中未查询到所述第一消息时,不向所述第二用户推送所述第一消息。在第二方面的一种可能的实现方式中,所述方法还包括:在所述第一消息队列中未查询到所述第一消息时,从所述数据库中查询到所述第一消息;将查询到的所述第一消息推送给所述第二用户。在第二方面的一种可能的实现方式中,所述第二设备还包括第二消息队列,所述向所述第二用户推送所述第一消息,包括:将所述第一消息发送至所述第二消息队列;在预设条件满足时,将所述第二消息队列中的所述第一消息推送至所述第二用户。在第二方面的一种可能的实现方式中,所述第一消息队列和/或所述第二消息队列包括第一存储区和第二存储区,所述第一存储区和所述第二存储区中分别存储有所述第一消息。在第二方面的一种可能的实现方式中,所述方法还包括:在将所述第一消息提交至所述第二消息队列时,向所述第一消息队列中写入所述第一消息在所述第一消息队列中的位置偏移量;和/或在将所述第一消息发送至所述第二用户时,向所述第二消息队列中写入所述第一消息在所述第二消息队列中的位置偏移量。在第二方面的一种可能的实现方式中,所述第一消息存放在所述第一消息队列的目标片区上,所述目标片区为所述第一消息队列的一个片区,所述目标片区内的消息的处理顺序与排列顺序一致。在第二方面的一种可能的实现方式中,所述将所述第一消息发送至所述第二消息队列,包括:根据所述目标片区的标识,将所述第一消息发送至所述第二消息队列中所述目标片区的标识对应的片区上。第三方面,本申请实施例提供一种消息推送装置,该消息推送装置应用于第一设备,该消息推送装置包括:发送单元和处理单元。发送单元,用于将第一消息发送至第二设备的第一消息队列中,所述第一设备与第一用户对应,所述第一消息用于指示第二用户执行预设操作;处理单元,用于执行第一事务,并根据所述第一事务的执行结果,生成第二消息,所述第二消息用于指示是否将所述第一消息推送至所述第二用户;发送单元,还用于将所述第二消息发送至所述第一消息队列中。在第三方面的一种可能的实现方式中,上述处理单元,具体用于在所述第一事务的执行结果为成功时,将第一推送指令携带在所述第二消息中,所述第一推送指令用于指示向所述第二用户推送所述第一消息;在所述第一事务的执行结果为失败时,将第二推送指令携带在所述第二消息中,所述第二推送指令用于指示不向所述第二用户推送所述第一消息。在第三方面的一种可能的实现方式中,上述发送单元,还用于在所述第一事务的执行结果为成功时,将所述第一消息发送至数据库。在第三方面的一种可能的实现方式中,上述发送单元,具体用于根据所述第一消息与其他消息之间的发送顺序关系,获得所述其他消息所在的目标片区的标识信息,所述目标片区为所述第一消息队列的一个片区,所述目标片区内的消息的处理顺序与排列顺序一致;根据所述目标片区的标识信息,将所述第一消息存放在所述目标片区上。第四方面,本申请实施例提供一种消息推送装置,该消息推送装置应用于第二设备,该消息推送装置可以包括:处理单元;处理单元,用于从第二设备中的第一消息队列中查询第一消息,所述第一消息用于指示第二用户执行预设操作;并在预设时间内,从所述第一消息队列中查询第二消息,所述第二消息用于指示是否将所述第一消息推送至所述第二用户;处理单元,还用于根据所述第二消息,确定是否向所述第二用户推送所述第一消息。在一些实施例中,处理单元,具体用于在所述第二消息携带第一推送指令时,确定向所述第二用户推送所述第一消息,所述第一推送指令用于指示向所述第二用户推送所述第一消息;在所述第二消息携带第二推送指令时,确定不向所述第二用户推送所述第一消息,所述第二推送指令用于指示不向所述第二用户推送所述第一消息。在一些实施例中,上述装置还包括发送单元;处理单元,还用于在所述预设时间内,从所述第一消息队列中未查询到所述第二消息时,从所述第一设备处查询第一事务的执行结果;发送单元,用于在所述第一事务的执行结果为成功时,向所述第二用户推送所述第一消息;在所述第一事务的执行结果为失败时,不向所述第二用户推送所述第一消息。在一些实施例中,处理单元,还用于在所述预设时间内,从所述第一消息队列中未查询到所述第二消息时,从数据库中查询所述第一消息;发送单元,还用于在所述数据库中查询到所述第一消息时,向所述第二用户推送所述第一消息;在所述数据库中未查询到所述第一消息时,不向所述第二用户推送所述第一消息。在一些实施例中,处理单元,还用于在所述第一消息队列中未查询到所述第一消息时,从所述数据库中查询到所述第一消息;发送单元,还用于将查询到的所述第一消息推送给所述第二用户。在一些实施例中,发送单元,具体用于将所述第一消息发送至所述第二消息队列;在预设条件满足时,将所述第二消息队列中的所述第一消息推送至所述第二用户。在一些实施例中,所述第一消息队列和/或所述第二消息队列包括第一存储区和第二存储区,所述第一存储区和所述第二存储区中分别存储有所述第一消息。在一些实施例中,上述发送单元,还用于在将所述第一消息提交至所述第二消息队列时,向所述第一消息队列中写入所述第一消息在所述第一消息队列中的位置偏移量;和/或在将所述第一消息发送至所述第二用户时,向所述第二消息队列中写入所述第一消息在所述第二消息队列中的位置偏移量。在一些实施例中,所述第一消息存放在所述第一消息队列的目标片区上,所述目标片区为所述第一消息队列的一个片区,所述目标片区内的消息的处理顺序与排列顺序一致。在一些实施例中,上述发送单元,具体用于根据所述目标片区的标识,将所述第一消息发送至所述第二消息队列中所述目标片区的标识对应的片区上。第五方面,本申请实施例还提供一种电子设备,包括存储器和处理器;所述存储器用于存储计算机程序;所述处理器用于执行所述计算机程序,以实现上述第一方面任一项所述的消息推送方法。第六方面,本申请实施例还提供一种电子设备,包括存储器和处理器;所述存储器用于存储计算机程序;所述处理器用于执行所述计算机程序,以实现上述第二方面任一项所述的消息推送方法。第七方面,本申请实施例提供了一种计算机可读存储介质,所述存储介质包括计算机指令,当所述指令被计算机执行时,使得所述计算机实现如第一方面或第二方面任一项所述的消息推送方法。第八方面,本申请实施例提供一种计算机程序产品,所述程序产品包括计算机程序,所述计算机程序存储在可读存储介质中,计算机的至少一个处理器可以从所述可读存储介质读取所述计算机程序,所述至少一个处理器执行所述计算机程序使得计算机实施第一方面或第二方面任一项所述的消息推送方法。本申请实施例提供的消息推送方法、电子设备及存储介质,第一设备将第一消息推送至第二设备的第一消息队列中,接着,第一设备执行第一事务,并根据第一事务的执行结果生成第二消息,该第二消息用于指示是否将第一消息推送给第二用户。第一设备将生成的第二消息发送至第一消息队列中。第二设备从该第一消息队列中查询第一消息,并在预设时间内在该第一消息队列中查询第二消息,并根据第二消息确定是否向第二用户推送第一消息。即本申请实施例,第一设备预先向第一消息队列发送第一消息,并根据第一事务的执行结果,向第一消息队列发送第二消息,这样,第二设备可以根据第一事务的执行结果来确定是否发送第一消息,防止第一事务执行成功但第一消息发送失败,或者第一事务执行失败但第一消息发送成功的问题产生,进而保证第一事务的执行情况与第一消息的推送情况一致。附图说明此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。图1为已有的消息系统执行流程示意图;图2为本申请实施例涉及的消息系统架构示意图;图3为本申请实施例提供的消息推送方法流程示意图;图4为本申请实施例涉的一种应用场景示意图;图5为本申请实施例提供的消息推送方法流程示意图;图6为本申请实施例涉的另一种应用场景示意图;图7为本申请实施例涉的另一种应用场景示意图;图8为本申请实施例涉的另一种应用场景示意图;图9为本申请实施例涉的另一种应用场景示意图;图10为本申请实施例提供的一种消息推送装置的一种结构示意图;图11为本申请实施例提供的一种消息推送装置的一种结构示意图;图12为本申请实施例涉及的电子设备的结构示意图。具体实施方式下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。应理解,在本发明实施例中,“与a对应的b”表示b与a相关联。在一种实现方式中,可以根据a确定b。但还应理解,根据a确定b并不意味着仅仅根据a确定b,还可以根据a和/或其它信息确定b。在本申请的描述中,除非另有说明,“多个”是指两个或多于两个。另外,为了便于清楚描述本申请实施例的技术方案,在本申请的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。为了便于理解本申请的实施例,首先对本申请实施例涉及到的相关概念进行如下简单介绍:消息可以理解为数据,是通信的基本单位,由一个固定长度的消息头和一个可变长度的消息体组成,通常将消息的发送者称为生产者,将消息的接收者称为消费者。消息系统是指生产者将待发送的信息放入一个容器中(通常称之为message),再将该容器保存至一个系统公用空间的消息队列(messagequeue)中,消费者从该消息队列中取出发该消息并进行处理。消息系统一般分为两类:点对点(peer-to-peer)消息系统和发布订阅(subscribe/publish)消息系统。其中,点对点(peer-to-peer)消息系统的特点是支持单播,一般是基于轮询(polling)或拉取(pull)接受消息;发送到消息队列的消息被一个而且只有一个消费者接受,即使有多个接收者在同一队列中监听同一消息;支持“即发即弃”的异步消息传送模式,同时支持“请求应答”的同步消息传送模式。发布订阅(sub/pub)消息系统的特点支持多播和单播,例如kafka作为一种典型的发布订阅(sub/pub)消息系统,其支持不同消费者组的多播,同时支持在同一消费者组里的单播。另外,发布到一个主题的消息可以被多个消费者所接受;支持push、pull、polling三种方式接受消息,且解耦能力比点对点高。主题(topic)为消息的分类,生产者将消息发送到特定主题,消费者订阅该主题或者主题的分区来进行消费。消息队列(messagequeue,简称mq)是在消息的传输过程中保存消息的容器。消息队列是分布式系统中重要的组件,主要解决应用耦合、异步消息、流量削锋等问题。实现高性能、高可用、可伸缩和最终一致性架构,是大型分布式系统不可缺少的中间件。图1为已有的消息系统执行流程示意图,如图1所示,假设生产者a需要执行一个本地的事务,并在事务执行成功后发送一个消息告诉消费者b去执行相关操作,具体包括如下步骤:步骤1,生产者a执行本地事务,完成本地事务的操作;步骤2,本地事务执行成功后,生产者a发送消息给消息系统,由消息系统来传递消息给各个消费者;步骤3,消费者b从消息系统中消费生产者a产生的消息。但是,步骤2中若生产者a发送消息失败,会导致将导致本地事务执行成功,但是消费者b接收不到该消息,造成本地事务的执行和消息的发送不一致的问题。为了解决上述技术问题,本申请实施例提供一种消息推送方法,首先生产者(即第一用户)对应的第一设备将待发送的第一消息预存放在第二设备的第一消息队列中,接着,第一设备执行第一事务,并根据第一事务的执行结果,生成第二消息,且将生成的第二消息也存放在第一消息队列中。由于该第二消息是根据第一事务的执行结果生成的,其可以反映出第一事务的执行情况,这样,第二设备从第一消息队列中拉取第二消息,并可以根据第二消息的指示确定是否将第一消息推送至消费者(即第二用户),进而保证了第一消息的推送情况与第一任务的执行结果保持一致。图2为本申请实施例涉及的消息系统架构示意图,包括:第一设备101、第二设备102、第三设备103和数据库104。其中,第一设备101与第一用户对应,可以为第一用户使用的终端设备,例如手机、笔记本、台式电脑、智能电视、车载设备、可穿戴设备、工业设备等。可选的,第一设备101还可以是第一用户侧的服务器,第一用户通过客户端与该服务器通信连接。该第一设备101与第二设备102通信连接,可以向第二设备102发送第一消息和第二消息。第二设备102可以为一个或多个服务器,或者为服务器集群,第二设备102与第一设备101通信连接。可选的,该第二设备102包括消息系统,该消息系统用于推送第一消息。该第二设备102还包括第一消息队列,第一设备101将生成的第一消息和第二消息均发送至该第一消息队列中,第二设备102从该第一消息队列中拉取第一消息和第二消息。第三设备103与第二用户对应,可以为第二用户使用的终端设备,例如手机、笔记本、台式电脑、智能电视、车载设备、可穿戴设备、工业设备等。可选的,第三设备103还可以是第二用户侧的服务器,第二用户通过客户端与该服务器通信连接。该第三设备103与第二设备102通信连接,可以从第二设备102处消费第一消息,或者,接收第二设备102发送的第一消息。第一设备101、第二设备102和第三设备103可以对数据库104进行读写操作,例如,第一设备101可以将第一事务提交至数据库,和/或将第一消息存放至数据库。第二设备102和第三设备103可以从数据库104中读取第一消息。值得注意的,附图2仅是本申请实施例提供的一种消息系统架构的示意图,图中所示设备之间的位置关系不构成任何限制。在一些实施例中,上述数据库104可以分布在一个服务器上也可以分布在多个服务器上。下面通过一些实施例对本申请实施例的技术方案进行详细说明。下面这几个实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。图3为本申请实施例提供的消息推送方法流程示意图,如图3所示,本申请实施例的方法包括:s301、第一设备将第一消息发送至第二设备的第一消息队列中。图4为本申请实施例的一种应用场景示意图,如图4所示,第一用户可以理解为第一消息的发送者,即生产者,第一用户通过第一设备与第二设备通信,第二设备包括第一消息队列,第一用户通过第一设备将第一消息发送至第二设备的第一消息队列中。第二用户可以是一个也可以是多个,本申请实施例对此不做限制。具体的,第一设备响应于第一用户的操作,生成第一消息,并将第一消息发送至第二设备的第一消息队列中。需要说明的是,上述第一消息与第一事务相关,该第一消息用于指示第二用户执行预设操作。示例性的,以第一事务为缴纳电费为例,第一用户为电费缴纳者,第二用户为电力公司的充电人员,则第一消息用于指示电力公司的充电人员为第一用户的账户中充电。示例性的,以第一事务为视频订阅为例,第一用户可以为视频发布者,第二用户可以为视频订阅者,则第一消息用于指示第二用户观看第一用户上传的视频。需要说明的是,不同的应用场景对应的预设操作不同。本申请实施例,在第一设备执行第一事务之前,先将第一消息预存至第二设备的第一消息队列中,接着执行第一事务,并根据第一事务的执行结果确定是否将第一消息发送给第二用户。相比于已有技术在第一事务执行完之后,直接通过第二设备将第一消息发送给第二用户,本申请实施例可以保证第一事务的执行情况与第一消息的推送情况一致,防止第一事务执行成功但第一消息发送失败,或者第一事务执行失败但第一消息发送成功的问题产生。s302、第一设备执行第一事务,并根据第一事务的执行结果,生成第二消息。具体的,第一设备将第一消息发送至第二设备的第一消息队列后,执行第一事务,并根据第一事务的执行结果,生成第二消息,该第二消息用于指示是否将第一消息推送至第二用户。在一些实施例中,上述s302包括如下情况:情况1,在第一事务的执行结果为成功时,将第一推送指令携带在第二消息中,该第一推送指令用于指示向第二用户推送第一消息。情况2,在第一事务的执行结果为失败时,将第二推送指令携带在第二消息中,该第二推送指令用于指示不向第二用户推送第一消息。在一些示例中,第二消息携带的推送指令与第一消息的推送情况的对应关系如表1所示:表1推送指令第一消息的推送情况1推送0不推送如表1所示,第一推送指令为1,第二推送指令为0,当第二消息携带1时,该第二消息指示第二设备可以将第一消息推送给第二用户,当该第二消息携带0时,该第二消息指示第二设备不将第一消息推送给第二用户。需要说明的是,上述表1只是一种示例,上述第一推送指令和第二推送指令还可以是其他的形式,例如,第一推送指令为0,第二推送指令为1,或者,第一推送指令为01,第二推送指令为11等,本申请实施例对第一推送指令和第二推送指令的具体形式不做限制。即本申请实施例,第一设备执行完第一事务,并根据第一事务的执行结果来生成第二消息。举例说明,继续参照上述示例,以第一事务为缴纳电费为例,第一设备缴纳电费成功时,第一设备将第一推送指令携带在第二消息中,当第一设备缴纳电费失败时,第一设备将第二推送指令携带在第二消息中,进而实现根据电费缴纳成功与否来生成第二消息。示例性的,以第一事务为视频订阅为例,第一设备制作并上传视频,在视频上传成功时,第一设备将第一推送指令携带在第二消息中,在视频上传失败时,第一设备将第二推送指令携带在第二消息中,进而实现根据视频上传成功与否,生成第二消息。s303、第一设备将第二消息发送至第一消息队列中。具体的,第一设备生成第二消息后,将该第二消息发送至第一消息队列中。其中,该第二消息与上述第一消息一一对应的,可选的,为了便于后续第二消息与第一消息进行匹配,则第二消息可以存放在第一消息之后或之前,且与第一消息相邻。可选的,第二消息的消息头中携带第一消息的标识,这样通过第二消息所携带的第一消息的标识,确定出该第二消息所对应的第一消息。s304、第二设备从第二设备中的第一消息队列中查询第一消息。具体的,第一设备根据上述s301至s303的步骤,将第一消息和第二消息均存放至第二设备的第一消息队列中。这样,第二设备可以从第一消息队列中查询到第一消息。s305、第二设备在预设时间内,从第一消息队列中查询第二消息。由上述可知第二消息是第一设备在第一消息之后发送至第一消息队列中的,因此,第二设备在从第一消息队列中查询到第一消息后,可能不能立即在第一消息队列中查询到第二消息,因此,第二设备会在预设时间内从第一消息队列中查询第二消息。上述预设时间具体根据实际需要进行设定,本申请实施例对此不做限制。s306、第二设备根据第二消息,确定是否向第二用户推送第一消息。第二设备在第一消息队列中查询到第一消息和第二消息后,根据该第二消息确定是否将第一消息推送给第二用户。由上述s302可知,若第二消息中携带第一推送指令或第二推送指令,则第二设备解析该第二消息,根据第二消息携带的第一推送指令或第二推送指令来确定是否向第二用户推送第一消息。具体是,在第二消息携带第一推送指令时,则第二设备确定向第二用户推送第一消息,则将第一消息推送给第二用户,具体是推送给第二用户对应的第三设备。在第二消息携带第二推送指令时,第二设备确定不向第二用户推送第一消息,在这种情况下,第二设备可以将获得的第一消息丢弃。可选的,第二设备将第一消息推送给第二用户后,在第一消息队列中对该第一消息进行标记,防止重复消费。本实施例提供的消息推送方法,第一设备将第一消息推送至第二设备的第一消息队列中,接着,第一设备执行第一事务,并根据第一事务的执行结果生成第二消息,该第二消息用于指示是否将第一消息推送给第二用户。第一设备将生成的第二消息发送至第一消息队列中。第二设备从该第一消息队列中查询第一消息,并在预设时间内在该第一消息队列中查询第二消息,并根据第二消息确定是否向第二用户推送第一消息。即本申请实施例,第一设备预先向第一消息队列发送第一消息,并根据第一事务的执行结果,向第一消息队列发送第二消息,这样,第二设备可以根据第一事务的执行结果来确定是否发送第一消息,防止第一事务执行成功但第一消息发送失败,或者第一事务执行失败但第一消息发送成功的问题产生,进而保证第一事务的执行情况与第一消息的推送情况一致。在一些实施例中,第一设备在第一事务执行成功时,还可以将生成的第一消息发送至数据库,例如,第一设备在第一事务执行成功时,将第一事务和第一消息一起保存至数据库中,或者,第一设备在第一事务执行成功时,只将第一消息保存至数据库中,而第一事务不保存在数据库中。此时,在上述实施例的基础上,本申请实施例还包括如图5所示的消息推送方法。图5为本申请实施例提供的消息推送方法流程示意图,如图5所示,本申请实施例的方法包括:s501、第二设备从第一消息队列中查询第一消息。图6为本申请实施例的一种应用场景示意图,第一设备在第一事务执行成功时,将第一消息发送至第二设备之外,还向数据库中保存了一份第一消息。同时,第二设备和第三设备均可以从数据库中读取该第一消息。但是,如图7所示,虽然第一设备向第一消息队列发送第一消息,但是因为网络等原因造成第一消息发送失败,此时,第二设备在第一消息队列中查询第一消息会存在无法查询到第一消息的情况。在这种情况下,即第二设备在第一消息队列中未查询到第一消息,则执行如下步骤s502和s503。s502、第二设备在第一消息队列中未查询到第一消息时,从数据库中查询到第一消息。s503、第二设备将查询到的第一消息推送给第二用户。具体的,第二设备在第一消息队列中未查询到第一消息时,第二设备从数据库中查询第一消息,由于该第一消息是第一设备在执行成功第一事务时发送至数据库的,这样当第二设备在数据库中查询到第一消息,则表示第一设备执行第一事务成功,则第二设备将查询到的第一消息推送给第二用户,进而实现在第一事务执行成功时,向第二用户发送第一消息,保证第一事务的执行结果与第一消息的发送情况保持一致。若第二设备在第一消息队列中查询到第一消息,则执行如下s504和s505的步骤,或者执行如下s504和s506的步骤,或者,执行如下s505和s507的步骤。s504、第二设备在预设时间内,从第一消息队列中查询第二消息。若第二设备在第一消息队列中查询到第二消息则执行s505。s505、在第一消息队列中查询到第二消息,则根据第二消息,确定是否向第二用户推送第一消息。具体的,若第二设备在预设时间内,从第一消息队列中查询到第二消息,则可以根据该第二消息确定是否向第二用户推送第一消息,其具体过程与上述s306一致,参照上述s306的描述即可,在此不再赘述。在一些实施例中,如图8所示,虽然第一设备向第一消息队列发送第二消息,但是由于网络等原因可能导致第二消息发送失败。此时,会存在第二设备在预设时间内从第一消息队列中无法查询到该第二消息。若第二设备在第一消息队列中未查询到第二消息则执行s506或507的步骤。需要说明的是,s506与s507为两种并列的技术方案。方式一如s506:s506、第二设备在预设时间内,从第一消息队列中未查询到第二消息时,从第一设备处查询第一事务的执行结果,并在第一事务的执行结果为成功时,向第二用户推送第一消息,在第一事务的执行结果为失败时,不向第二用户推送第一消息。具体的,第一设备向第二设备提供反查接口,第二设备在预设时间内,从第一消息队列中未查询到第二消息时,通过反查接口查询第一设备所保存的第一事务的执行结果。在查询到第一设备执行第一事务的执行结果为成功时,向第二用户推送该第一消息,在查询到第一设备执行第一事务的执行结果为失败时,不向第二用户推送第一消息。这样,可以实现当第二消息发送失败时,第二设备依然可以根据第一事务的执行结果来确定是否推送第一消息,进而保证了第一消息的推送与第一事务的执行情况保持一致。方式二如s507:s507、第二设备在预设时间内,从第一消息队列中未查询到第二消息时,从数据库中查询第一消息,并在数据库中查询到第一消息时,向第二用户推送第一消息,在数据库中未查询到第一消息时,不向第二用户推送第一消息。具体的,由于第一设备在第一事务执行成功时,向数据库保存有一份第一消息,这样,当第二设备在预设时间内,从第一消息队列中未查询到第二消息时,可以从数据库中查询是否存在第一消息,若在数据库中查询到该第一消息,则表示第一设备执行第一事务成功,则第二设备将该第一消息推送给第二用户。若在数据库中未查询到第一消息,则说明第一设备执行第一事务失败,则第二设备不会向第二用户推送第一消息,进而保证第一消息的推送情况与第一事务的执行情况保持一致。本申请实施例,当第一设备向第一消息队列发送第一消息失败时,第二设备可以从数据库中查询到第一消息,并将查询到的第一消息推送给第二用户,进而提高消息系统的容错性。另外,当第二设备在第一消息队列中查询到第一消息但是未查询到第二消息时,则第二设备可以从第一设备处获得第一事务的执行结果,并根据第一事务的执行结果确定是否推送第一消息,或者,第二设备从数据库中查询第一消息,并根据第一消息的查询结果,确定是否推送第一消息,进而保证第一消息的推送与第一事务的执行情况保持一致。在一些实施例中,如图9所示,第二设备除了包括第一消息队列外,还包括第二消息队列,此时,上述第二设备向第二用户推送第一消息,可以包括:步骤a1,第二设备将第一消息发送至第二消息队列。步骤a2,第二设备在预设条件满足时,将第二消息队列中的第一消息推送至第二用户。具体的,第二设备从第一消息队列中获得第一消息后,根据上述实施例的步骤,确定可以将第一消息推送给第二用户,此时,第二设备不是立即将该第一消息发送给第二用户,而是将该第一消息存放在第二消息队列中。第二设备在预设条件满足时,将第二消息队列中的第一消息推送至第二用户。可选的,上述预设条件可以是预设时刻,例如,预设时刻达到时,第二设备将第二消息队列中的第一消息推送至第二用户。可选的,上述预设条件为第一消息在第二消息队列中的排列顺序,例如,第二设备在第二消息队列中顺序读取到第一消息(其中第二消息队列中还包括其他的消息)时,将该第一消息推送给第二用户。在一些实施例中,采用如下两种方式来提高消息的可靠性保障:方式一,本申请实施例的第一消息队列和/或第二消息队列包括第一存储区和第二存储区,第一存储区和第二存储区中分别存储有第一消息,可选的,第一消息队列的第一存储区和第二存储区还可以同时存储有第二消息。这样,当第一存储区中的第一消息(或第二消息)丢失时,可以从第二存储区中获得第一消息(或第二消息),进而防止第一消息从第一消息队列和/或第二消息队列中丢失,以及防止第二消息从第一消息队列中丢失。方式二,第二设备在将第一消息提交至第二消息队列时,向第一消息队列中写入第一消息在第一消息队列中的位置偏移量。这样当第二设备的一个线程将第一消息从第一消息队列发送至第二消息队列失败时,第二设备的另一个线程可以根据第一消息队列中标记的第一消息在第一消息队列中的位置偏移量,重新将该第一消息从第一消息队列发送至第二消息队列,进而保证第一消息的发送可靠性。和/或,第二设备在将第一消息发送至第二用户时,向第二消息队列中写入第一消息在第二消息队列中的位置偏移量。这样当第二设备的一个线程将第一消息从第二消息队列发送至第二用户失败时,第二设备的另一个线程可以根据第二消息队列中标记的第一消息在第二消息队列中的位置偏移量,重新将该第一消息从第二消息队列发送至第二用户,进而保证第一消息的发送可靠性。在一些实施例中,第一消息队列和第二消息队列均包括多个分片,同一个分片上的消息按照顺序排列,且同一个分片上的消息的处理顺序与排列顺序一致。基于此,为了保证消息的顺序性,上述s301中第一设备将第一消息发送至第二设备的第一消息队列中,包括:步骤b1,第一设备根据第一消息与其他消息之间的发送顺序关系,获得其他消息所在的目标片区的标识信息。其中,目标片区为第一消息队列的一个片区,目标片区内的消息的处理顺序与排列顺序一致。第一设备与第二设备通信连接,第一设备可以对第二设备上的第一消息队列进行访问,获得该第一消息队列的各片区,以及各片区的标识信息等。步骤b2,第一设备根据目标片区的标识信息,将第一消息存放在目标片区上。具体的,第一设备期望第一消息与其他消息之间的发送过程保证顺序,例如,期望第一消息在其他消息之前或之后发送,这样,第一设备根据第一消息与其他消息之间的发送顺序关系,从第二设备中获得该其他消息在第一消息队列中所在的片区,将该片区作为目标片区,进而获得该目标片区的标识信息。第一设备在存放第一消息时,可以根据目标片区的标识信息,将第一消息存放在第一消息队列的目标片区上,进而实现第一消息与其他消息位于同一个片区上,发送时安装第一消息与其他消息在该目标片区上的排列顺序进行发送,进而实现消息的顺序处理。可选的,上述其他消息可以为其他设备发送给第二设备的第一消息。在该实施例的基础上,上述步骤a1中第二设备将第一消息发送至第二消息队列,可以包括:第二设备根据目标片区的标识,将第一消息发送至第二消息队列中目标片区的标识对应的片区上,进而保证了第二设备按照目标片区内第一消息的排列顺序,将第一消息推送给第二用户,进而保证第一消息的顺序发送。图10为本申请实施例提供的一种消息推送装置的一种结构示意图。该消息推送装置300用于执行上述方法实施例中第一设备对应的技术方案。该消息推送装置300可以理解为上述第一设备,或者为第一设备的一部分(例如芯片)。如图10所示,该消息推送装置300可以包括:发送单元310和处理单元320。发送单元310,用于将第一消息发送至第二设备的第一消息队列中,所述第一设备与第一用户对应,所述第一消息用于指示第二用户执行预设操作;处理单元320,用于执行第一事务,并根据所述第一事务的执行结果,生成第二消息,所述第二消息用于指示是否将所述第一消息推送至所述第二用户;发送单元310,还用于将所述第二消息发送至所述第一消息队列中。在一些实施例中,上述处理单元320,具体用于在所述第一事务的执行结果为成功时,将第一推送指令携带在所述第二消息中,所述第一推送指令用于指示向所述第二用户推送所述第一消息;在所述第一事务的执行结果为失败时,将第二推送指令携带在所述第二消息中,所述第二推送指令用于指示不向所述第二用户推送所述第一消息。在一些实施例中,上述发送单元310,还用于在所述第一事务的执行结果为成功时,将所述第一消息发送至数据库。在一些实施例中,上述发送单元310,具体用于根据所述第一消息与其他消息之间的发送顺序关系,获得所述其他消息所在的目标片区的标识信息,所述目标片区为所述第一消息队列的一个片区,所述目标片区内的消息的处理顺序与排列顺序一致;根据所述目标片区的标识信息,将所述第一消息存放在所述目标片区上。本申请实施例的消息推送装置,可以用于执行上述方法实施例中第一设备对应的技术方案,其实现原理和技术效果类似,此处不再赘述。图11为本申请实施例提供的一种消息推送装置的一种结构示意图。该消息推送装置200用于执行上述方法实施例中第二设备对应的技术方案。该消息推送装置200可以理解为上述第二设备,或者为第二设备的一部分(例如芯片)。如图11所示,该消息推送装置200可以包括:处理单元210。处理单元210,用于从第二设备中的第一消息队列中查询第一消息,所述第一消息用于指示第二用户执行预设操作;并在预设时间内,从所述第一消息队列中查询第二消息,所述第二消息用于指示是否将所述第一消息推送至所述第二用户;处理单元210,还用于根据所述第二消息,确定是否向所述第二用户推送所述第一消息。在一些实施例中,处理单元210,具体用于在所述第二消息携带第一推送指令时,确定向所述第二用户推送所述第一消息,所述第一推送指令用于指示向所述第二用户推送所述第一消息;在所述第二消息携带第二推送指令时,确定不向所述第二用户推送所述第一消息,所述第二推送指令用于指示不向所述第二用户推送所述第一消息。在一些实施例中,上述装置还包括发送单元220;处理单元210,还用于在所述预设时间内,从所述第一消息队列中未查询到所述第二消息时,从所述第一设备处查询第一事务的执行结果;发送单元220,用于在所述第一事务的执行结果为成功时,向所述第二用户推送所述第一消息;在所述第一事务的执行结果为失败时,不向所述第二用户推送所述第一消息。在一些实施例中,处理单元210,还用于在所述预设时间内,从所述第一消息队列中未查询到所述第二消息时,从数据库中查询所述第一消息;发送单元220,还用于在所述数据库中查询到所述第一消息时,向所述第二用户推送所述第一消息;在所述数据库中未查询到所述第一消息时,不向所述第二用户推送所述第一消息。在一些实施例中,处理单元210,还用于在所述第一消息队列中未查询到所述第一消息时,从所述数据库中查询到所述第一消息;发送单元220,还用于将查询到的所述第一消息推送给所述第二用户。在一些实施例中,发送单元220,具体用于将所述第一消息发送至所述第二消息队列;在预设条件满足时,将所述第二消息队列中的所述第一消息推送至所述第二用户。在一些实施例中,所述第一消息队列和/或所述第二消息队列包括第一存储区和第二存储区,所述第一存储区和所述第二存储区中分别存储有所述第一消息。在一些实施例中,上述发送单元220,还用于在将所述第一消息提交至所述第二消息队列时,向所述第一消息队列中写入所述第一消息在所述第一消息队列中的位置偏移量;和/或在将所述第一消息发送至所述第二用户时,向所述第二消息队列中写入所述第一消息在所述第二消息队列中的位置偏移量。在一些实施例中,所述第一消息存放在所述第一消息队列的目标片区上,所述目标片区为所述第一消息队列的一个片区,所述目标片区内的消息的处理顺序与排列顺序一致。在一些实施例中,上述发送单元220,具体用于根据所述目标片区的标识,将所述第一消息发送至所述第二消息队列中所述目标片区的标识对应的片区上。本申请实施例的消息推送装置,可以用于执行上述方法实施例中第二设备的技术方案,其实现原理和技术效果类似,此处不再赘述。图12为本申请实施例涉及的电子设备的结构示意图。该电子设备用于执行上述实施例所述的消息推送方法,具体参见上述方法实施例中的说明。图12所示的电子设备400包括存储器401、处理器402、通信接口403。存储器401、处理器402、通信接口403之间彼此通信连接。例如,存储器401、处理器402、通信接口403之间可以采用网络连接的方式,实现通信连接。或者,上述电子设备400还可以包括总线404。存储器401、处理器402、通信接口403通过总线404实现彼此之间的通信连接。图12是以存储器401、处理器402、通信接口403通过总线404实现彼此之间的通信连接的电子设备400。存储器401可以是只读存储器(readonlymemory,rom),静态存储设备,动态存储设备或者随机存取存储器(randomaccessmemory,ram)。存储器401可以存储程序,当存储器401中存储的程序被处理器402执行时,处理器402和通信接口403用于执行上述方法。处理器402可以采用通用的中央处理器(centralprocessingunit,cpu),微处理器,应用专用集成电路(applicationspecificintegratedcircuit,asic),图形处理器(graphicsprocessingunit,gpu)或者一个或多个集成电路。处理器402还可以是一种集成电路芯片,具有信号的处理能力。在实现过程中,本申请的方法可以通过处理器402中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器402还可以是通用处理器、数字信号处理器(digitalsignalprocessing,dsp)、专用集成电路(asic)、现成可编程门阵列(fieldprogrammablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器401,处理器402读取存储器401中的信息,结合其硬件完成本申请实施例的方法。通信接口403使用例如但不限于收发器一类的收发模块,来实现电子设备400与其他设备或通信网络之间的通信。当上述电子设备400包括总线404时,总线404可包括在电子设备400各个部件(例如,存储器401、处理器402、通信接口403)之间传送信息的通路。在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solidstatedisk(ssd))等。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。另外,各个方法实施例之间、各个装置实施例之间也可以互相参考,在不同实施例中的相同或对应内容可以互相引用,不做赘述。当前第1页1 2 3 
    技术特征:

    1.一种消息推送方法,其特征在于,应用于第一设备,所述方法包括:

    将第一消息发送至第二设备的第一消息队列中,所述第一设备与第一用户对应,所述第一消息用于指示第二用户执行预设操作;

    执行第一事务,并根据所述第一事务的执行结果,生成第二消息,所述第二消息用于指示是否将所述第一消息推送至所述第二用户;

    将所述第二消息发送至所述第一消息队列中。

    2.根据权利要求1所述的方法,其特征在于,所述根据所述第一事务的执行结果,生成第二消息,包括:

    在所述第一事务的执行结果为成功时,将第一推送指令携带在所述第二消息中,所述第一推送指令用于指示向所述第二用户推送所述第一消息;

    在所述第一事务的执行结果为失败时,将第二推送指令携带在所述第二消息中,所述第二推送指令用于指示不向所述第二用户推送所述第一消息。

    3.根据权利要求1所述的方法,其特征在于,所述方法还包括:

    在所述第一事务的执行结果为成功时,将所述第一消息发送至数据库。

    4.根据权利要求1所述的方法,其特征在于,所述将第一消息发送至第二设备的第一消息队列中,包括:

    根据所述第一消息与其他消息之间的发送顺序关系,获得所述其他消息所在的目标片区的标识信息,所述目标片区为所述第一消息队列的一个片区,所述目标片区内的消息的处理顺序与排列顺序一致;

    根据所述目标片区的标识信息,将所述第一消息存放在所述目标片区上。

    5.一种消息推送方法,其特征在于,应用于第二设备,所述方法包括:

    从第二设备中的第一消息队列中查询第一消息,所述第一消息用于指示第二用户执行预设操作;

    在预设时间内,从所述第一消息队列中查询第二消息,所述第二消息用于指示是否将所述第一消息推送至所述第二用户;

    根据所述第二消息,确定是否向所述第二用户推送所述第一消息。

    6.根据权利要求5所述的方法,其特征在于,所述根据所述第二消息,确定是否向所述第二用户推送所述第一消息,包括:

    在所述第二消息携带第一推送指令时,确定向所述第二用户推送所述第一消息,所述第一推送指令用于指示向所述第二用户推送所述第一消息;

    在所述第二消息携带第二推送指令时,确定不向所述第二用户推送所述第一消息,所述第二推送指令用于指示不向所述第二用户推送所述第一消息。

    7.根据权利要求5所述的方法,其特征在于,所述方法还包括:

    在所述预设时间内,从所述第一消息队列中未查询到所述第二消息时,从所述第一设备处查询第一事务的执行结果;

    在所述第一事务的执行结果为成功时,向所述第二用户推送所述第一消息;

    在所述第一事务的执行结果为失败时,不向所述第二用户推送所述第一消息。

    8.根据权利要求5所述的方法,其特征在于,所述方法还包括:

    在所述预设时间内,从所述第一消息队列中未查询到所述第二消息时,从数据库中查询所述第一消息;

    在所述数据库中查询到所述第一消息时,向所述第二用户推送所述第一消息;

    在所述数据库中未查询到所述第一消息时,不向所述第二用户推送所述第一消息。

    9.根据权利要求8所述的方法,其特征在于,所述方法还包括:

    在所述第一消息队列中未查询到所述第一消息时,从所述数据库中查询到所述第一消息;

    将查询到的所述第一消息推送给所述第二用户。

    10.根据权利要求6-9任一项所述的方法,其特征在于,所述第二设备还包括第二消息队列,所述向所述第二用户推送所述第一消息,包括:

    将所述第一消息发送至所述第二消息队列;

    在预设条件满足时,将所述第二消息队列中的所述第一消息推送至所述第二用户。

    11.根据权利要求10所述的方法,其特征在于,所述第一消息队列和/或所述第二消息队列包括第一存储区和第二存储区,所述第一存储区和所述第二存储区中分别存储有所述第一消息。

    12.根据权利要求10所述的方法,其特征在于,所述方法还包括:

    在将所述第一消息提交至所述第二消息队列时,向所述第一消息队列中写入所述第一消息在所述第一消息队列中的位置偏移量;和/或

    在将所述第一消息发送至所述第二用户时,向所述第二消息队列中写入所述第一消息在所述第二消息队列中的位置偏移量。

    13.根据权利要求10所述的方法,其特征在于,所述第一消息存放在所述第一消息队列的目标片区上,所述目标片区为所述第一消息队列的一个片区,所述目标片区内的消息的处理顺序与排列顺序一致。

    14.一种电子设备,其特征在于,包括:存储器和处理器;

    所述存储器用于存储计算机程序;

    所述处理器用于执行所述计算机程序,以实现如权利要求1至4任一项所述的消息推送方法,或者以实现如权利要求5至13任一项所述的消息推送方法。

    15.一种计算机可读存储介质,其特征在于,所述存储介质包括计算机指令,当所述指令被计算机执行时,使得所述计算机实现如权利要求1至13任一项所述的消息推送方法。

    技术总结
    本申请实施例提供一种消息推送方法、电子设备及存储介质,该方法包括:第一设备将第一消息推送至第二设备的第一消息队列中,执行第一事务,并根据第一事务的执行结果生成第二消息,将生成的第二消息发送至第一消息队列中,该第二消息用于指示是否将第一消息推送给第二用户。第二设备在预设时间内在该第一消息队列中查询第二消息,并根据第二消息确定是否向第二用户推送第一消息。即本申请实施例,第一设备预先向第一消息队列发送第一消息,并根据第一事务的执行结果,向第一消息队列发送第二消息,这样,第二设备可以根据第一事务的执行结果来确定是否发送第一消息,保证第一事务的执行情况与第一消息的推送情况一致。

    技术研发人员:李超;李兵
    受保护的技术使用者:上海优扬新媒信息技术有限公司
    技术研发日:2020.11.24
    技术公布日:2021.03.12

    转载请注明原文地址:https://wp.8miu.com/read-7419.html

    最新回复(0)