本发明涉及消息发送技术领域,特别涉及一种消息发送方法、终端及计算机存储介质。
背景技术:
物联网应用前景未来日常活动中引人遐想无限。因此,对物联网协议的需求提出了更高的要求。
mqtt是一个客户端服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、简单、规范,易于实现。这些特点使得它对很多场景来说都是很好的选择,特别是对于受限的环境如机器与机器的通信(m2m)以及物联网环境(iot)。;
现有的mqttbroker功能不是很完善,在无订阅消息的情况下无法实现批量发送消息,并且一旦执行,无法有效得进行终止。
由此,目前需要有一种更好的方法来解决现有技术中的问题。
技术实现要素:
鉴于此,本发明提出了一种消息发送方法、终端及计算机存储介质。
具体的,本发明提出了以下具体的实施例:
本发明实施例提出了一种消息发送方法,应用于包括网关、处理端、mqtt模块的系统中;其中,所述处理端分别连接所述网关与所述mqtt模块;该方法包括:
通过所述处理端通过所述网关获取请求发送的消息;
通过所述处理端上线用于发送消息的任务,并将所述任务的标识存储在任务列表中;
通过所述处理端将所述消息分为多个批次;
针对每个所述批次,判断所述标识是否存在预设的任务取消列表中;
若判断结果为否,则将所述消息发送给所述mqtt模块;
通过所述mqtt模块判断缓存中是否存在该消息;
若判断结果为是,则将所述消息发送给客户端;
通过所述mqtt模块获取所述客户端反馈的回馈消息,并将所述回馈消息就进行消息持久化。
在一个具体的实施例中,该方法还包括:
若所述标识存在预设的任务取消列表中,则将执行取消操作。
在一个具体的实施例中,所述取消操作包括:取消所述任务,并清除所有缓存,以及在任务取消列表中删除所述标识。
在一个具体的实施例中,所述取消操作还包括:生成返回结果,所述返回结果用于提示所述任务已取消。
在一个具体的实施例中,该方法还包括:
当所述mqtt模块获取到用于取消任务的请求时,判断所述请求对应的任务的标识是否在所述任务列表中;
若判断结果为是,则判断所述请求对应的任务的标识是否在所述任务取消列表中;
若判断结果为是,则中止所述请求对应的任务。
在一个具体的实施例中,在中止所述请求对应的任务之后,还包括:
生成任务正在取消的指示。
在一个具体的实施例中,若所述请求对应的任务的标识不在所述任务列表中,则返回不存在该任务的提示。
在一个具体的实施例中,若所述请求对应的任务的标识不在所述任务取消列表中,则在所述任务列表中删除所述请求对应的任务的标识,并在所述任务取消列表中添加所述请求对应的任务的标识。
本发明实施例还提出了一种终端,包括:处理器,所述处理器用于执行上述的方法。
本发明实施例还提出了计算机存储介质,所述计算机存储介质中存储有用于执行上述的方法的程序。
以此,本发明实施例提出了一种消息发送方法、终端及计算机存储介质,应用于包括网关、处理端、mqtt模块的系统中;其中,所述处理端分别连接所述网关与所述mqtt模块;该方法包括:通过所述处理端通过所述网关获取请求发送的消息;通过所述处理端上线用于发送消息的任务,并将所述任务的标识存储在任务列表中;通过所述处理端将所述消息分为多个批次;针对每个所述批次,判断所述标识是否存在预设的任务取消列表中;若判断结果为否,则将所述消息发送给所述mqtt模块;通过所述mqtt模块判断缓存中是否存在该消息;若判断结果为是,则将所述消息发送给客户端;通过所述mqtt模块获取所述客户端反馈的回馈消息,并将所述回馈消息就进行消息持久化。实现了在无订阅消息的情况下批量发送消息的效果。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本发明实施例提出的一种消息发送方法的流程示意图;
图2为本发明实施例提出的一种消息发送方法的系统结构示意图;
图3为本发明实施例提出的一种消息发送方法的部分流程示意图。
具体实施方式
在下文中,将更全面地描述本公开的各种实施例。本公开可具有各种实施例,并且可在其中做出调整和改变。然而,应理解:不存在将本公开的各种实施例限于在此公开的特定实施例的意图,而是应将本公开理解为涵盖落入本公开的各种实施例的精神和范围内的所有调整、等同物和/或可选方案。
在本公开的各种实施例中使用的术语仅用于描述特定实施例的目的并且并非意在限制本公开的各种实施例。如在此所使用,单数形式意在也包括复数形式,除非上下文清楚地另有指示。除非另有限定,否则在这里使用的所有术语(包括技术术语和科学术语)具有与本公开的各种实施例所属领域普通技术人员通常理解的含义相同的含义。所述术语(诸如在一般使用的词典中限定的术语)将被解释为具有与在相关技术领域中的语境含义相同的含义并且将不被解释为具有理想化的含义或过于正式的含义,除非在本公开的各种实施例中被清楚地限定。
实施例1
本发明实施例1公开了一种消息发送方法,如图1所示,该方法包括以下步骤:
步骤101、通过所述处理端通过所述网关获取请求发送的消息;
具体的,如图2所示,本方案应用于包括网关、处理端、mqtt模块的系统中;其中,所述处理端分别连接所述网关与所述mqtt模块;网关,也即gateway模块主要是实现http请求的地址路由以及熔断功能;处理端,也即device模块主要实现接收命令,生成mqtt消息并缓存准发的功能,mqtt模块是实现对mqtt客户端认证、连接、发送消息、接收消息订阅、拒绝连接等功能。
如图3所示,在集群环境下,device模块接收到http请求要发送消息。
步骤102、通过所述处理端上线用于发送消息的任务,并将所述任务的标识存储在任务列表中;
具体的,为避免与其他节点发生冲突首先通过vertxshareddata去获取token,拿到令牌后才能开始执行任务;再将任务上线,将任务id(taskid)放到公共的资源中以tasklist名字存储。
步骤103、通过所述处理端将所述消息分为多个批次;具体的,将批量消息分成若干批次,批次可以自定义。
步骤104、针对每个所述批次,判断所述标识是否存在预设的任务取消列表中;关于分批发送:在接收到push请求后,分批立即发送;分批策略为1000台/次,每台间隔为200ms,每批间隔为1s;
步骤105、若判断结果为否,则将所述消息发送给所述mqtt模块;
具体的,该方法还包括:若所述标识存在预设的任务取消列表中,则将执行取消操作。在一个具体的实施例中,所述取消操作包括:取消所述任务,并清除所有缓存,以及在任务取消列表中删除所述标识。在一个具体的实施例中,所述取消操作还包括:生成返回结果,所述返回结果用于提示所述任务已取消。
在一个具体的应用场景中,在每个批次执行中,首先在取消任务列表里面进行第一次验证,如果taskid存在其中,那么进行取消操作,否则继续发送程序;
其中,取消操作包括:a.任务终止;b.消除之前所有缓存;c.在任务取消列表中删除taskid,并返回结果“任务已取消”。
发送程序包括:a.消息存入缓存;b.异步发送消息给mqtt模块。
步骤106、通过所述mqtt模块判断缓存中是否存在该消息;
步骤107、若判断结果为是,则将所述消息发送给客户端;
进一步的,当所述mqtt模块获取到用于取消任务的请求时,判断所述请求对应的任务的标识是否在所述任务列表中;若判断结果为是,则判断所述请求对应的任务的标识是否在所述任务取消列表中;若判断结果为是,则中止所述请求对应的任务。
进一步的,在中止所述请求对应的任务之后,还包括:生成任务正在取消的指示。
若所述请求对应的任务的标识不在所述任务列表中,则返回不存在该任务的提示。
若所述请求对应的任务的标识不在所述任务取消列表中,则在所述任务列表中删除所述请求对应的任务的标识,并在所述任务取消列表中添加所述请求对应的任务的标识。
步骤108、通过所述mqtt模块获取所述客户端反馈的回馈消息,并将所述回馈消息就进行消息持久化。
具体的,mqttbroker接收到具体消息;首先将消息和缓存中的消息比对,如果不存在,则不发送给客户端;如果存在,则发送给客户端,客户端会回馈消息给mqtt,mqtt进行结果持久化,根据结果可以实时查询任务进程和结果;
取消当前正在执行的任务包括:
1.得到取消任务请求,taskid;
2.检测任务上线taklist是否存在taskid,如果不存在则终止并返回结果“不存在该任务”,存在则继续执行步骤3;
3.检测取消任务列表是否存在taskid,如果存在,则终止并返回结果“任务正在取消”,不存在则执行步骤4;
4.在任务上线taklist上删除taskid,在任务取消列表中添加taskid。
此外,关于协议转换与协议识别:将http消息转换为mqtt消息。webserver发送uri请求到mqttbroker,mqttbroker识别http请求并转换mqtt消息并发送至device,device收到mqtt消息,将设备信息通过发送http请求的方式至webserver通过hazelcast实现集群:hazelcast不需要特别指定一个中心节点,因此可以解决数据中心化问题,将数据分散在每个节点中,可以抗单点故障,所有的hazelcast功能只需引用一个jar包,提供一系列分布式功能,而不需要绑定任何框架来使用,因此适用于任何场景
实施例2
本发明实施例2还公开了一种终端,包括:处理器,所述处理器用于执行实施例1中所述的方法。
具体的,本发明实施例2还公开有其他相关的特征,具体的相关特征请参见实施例1中的记载。
实施例3
本发明实施例3还公开了计算机存储介质,所述计算机存储介质中存储有用于执行实施例1中所述的方法的程序。
具体的,本发明实施例3还公开有其他相关的特征,具体的相关特征请参见实施例1中的记载。
以此,本发明实施例提出了一种消息发送方法、终端及计算机存储介质,应用于包括网关、处理端、mqtt模块的系统中;其中,所述处理端分别连接所述网关与所述mqtt模块;该方法包括:通过所述处理端通过所述网关获取请求发送的消息;通过所述处理端上线用于发送消息的任务,并将所述任务的标识存储在任务列表中;通过所述处理端将所述消息分为多个批次;针对每个所述批次,判断所述标识是否存在预设的任务取消列表中;若判断结果为否,则将所述消息发送给所述mqtt模块;通过所述mqtt模块判断缓存中是否存在该消息;若判断结果为是,则将所述消息发送给客户端;通过所述mqtt模块获取所述客户端反馈的回馈消息,并将所述回馈消息就进行消息持久化。实现了在无订阅消息的情况下批量发送消息的效果。
本领域技术人员可以理解附图只是一个优选实施场景的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施场景中的装置中的模块可以按照实施场景描述进行分布于实施场景的装置中,也可以进行相应变化位于不同于本实施场景的一个或多个装置中。上述实施场景的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本发明序号仅仅为了描述,不代表实施场景的优劣。
以上公开的仅为本发明的几个具体实施场景,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。
1.一种消息发送方法,其特征在于,应用于包括网关、处理端、mqtt模块的系统中;其中,所述处理端分别连接所述网关与所述mqtt模块;该方法包括:
通过所述处理端通过所述网关获取请求发送的消息;
通过所述处理端上线用于发送消息的任务,并将所述任务的标识存储在任务列表中;
通过所述处理端将所述消息分为多个批次;
针对每个所述批次,判断所述标识是否存在预设的任务取消列表中;
若判断结果为否,则将所述消息发送给所述mqtt模块;
通过所述mqtt模块判断缓存中是否存在该消息;
若判断结果为是,则将所述消息发送给客户端;
通过所述mqtt模块获取所述客户端反馈的回馈消息,并将所述回馈消息就进行消息持久化。
2.如权利要求1所述的方法,其特征在于,还包括:
若所述标识存在预设的任务取消列表中,则将执行取消操作。
3.如权利要求2所述的方法,其特征在于,所述取消操作包括:取消所述任务,并清除所有缓存,以及在任务取消列表中删除所述标识。
4.如权利要求3所述的方法,其特征在于,所述取消操作还包括:生成返回结果,所述返回结果用于提示所述任务已取消。
5.如权利要求1所述的方法,其特征在于,还包括:
当所述mqtt模块获取到用于取消任务的请求时,判断所述请求对应的任务的标识是否在所述任务列表中;
若判断结果为是,则判断所述请求对应的任务的标识是否在所述任务取消列表中;
若判断结果为是,则中止所述请求对应的任务。
6.如权利要求5所述的方法,其特征在于,在中止所述请求对应的任务之后,还包括:
生成任务正在取消的指示。
7.如权利要求5所述的方法,其特征在于,若所述请求对应的任务的标识不在所述任务列表中,则返回不存在该任务的提示。
8.如权利要求5所述的方法,其特征在于,若所述请求对应的任务的标识不在所述任务取消列表中,则在所述任务列表中删除所述请求对应的任务的标识,并在所述任务取消列表中添加所述请求对应的任务的标识。
9.一种终端,其特征在于,包括:处理器,所述处理器用于执行权利要求1-8中任意一项所述的方法。
10.计算机存储介质,其特征在于,所述计算机存储介质中存储有用于执行权利要求1-8中任意一项所述的方法的程序。
技术总结