CN110647409B - 消息写入方法、电子设备、系统及介质 - Google Patents
消息写入方法、电子设备、系统及介质 Download PDFInfo
- Publication number
- CN110647409B CN110647409B CN201910900783.1A CN201910900783A CN110647409B CN 110647409 B CN110647409 B CN 110647409B CN 201910900783 A CN201910900783 A CN 201910900783A CN 110647409 B CN110647409 B CN 110647409B
- Authority
- CN
- China
- Prior art keywords
- message
- access server
- messages
- latest
- writing
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Telephonic Communication Services (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明提供了一种消息写入方法、电子设备、系统及介质,所述方法包括:当检测到有接入服务器接收到消息时,确定所述接入服务器的属性信息;根据所述属性信息,生成所述接入服务器的标识码;获取所述接入服务器上记录的当前时间;根据所述当前时间添加时间戳及所述标识码至所述消息;将所述消息写入消息队列。本发明解决了由于消息队列中的消息写入无规则导致消息消费顺序混乱的问题,进而避免产生不恰当消费,提高服务的稳定性。
Description
技术领域
本发明涉及互联网技术领域,尤其涉及消息写入方法、电子设备、系统及介质。
背景技术
现有的分布式系统通常都会采用消息队列(Message Queue,MQ)进行服务解耦,以提升系统可扩展、可伸缩能力。但是,很多消息是有严格先后顺序的。
例如:当一个设备先上线后下线时,则该设备当前处于下线状态;当该设备先下线后上线时,则该设备当前处于上线状态。也就是说,同样的消息由于消费顺序不一致就会导致不一样的结果。而引起这个结果的原因就在于,上线消息与下线消息的顺序不确定。
因此,当消息的消费顺序混乱时,就会形成不恰当的消费,进而造成服务不稳定,甚至无法服务。
发明内容
本发明的主要目的在于提供消息写入方法、电子设备、系统及介质,旨在解决由于消息队列中的消息写入无规则导致消息消费顺序混乱的问题,进而避免产生不恰当消费,提高服务的稳定性。
为实现上述目的,本发明提供一种消息写入方法,所述方法包括:
当检测到有接入服务器接收到消息时,确定所述接入服务器的属性信息;
根据所述属性信息,生成所述接入服务器的标识码;
获取所述接入服务器上记录的当前时间;
根据所述当前时间添加时间戳及所述标识码至所述消息;
将所述消息写入消息队列。
优选地,所述根据所述属性信息,生成所述接入服务器的标识码包括:
根据所述属性信息计算哈希值;
将所述哈希值确定为所述标识码。
优选地,在将所述消息写入消息队列后,所述方法还包括:
根据所述消息,确定与所述接入服务器建立长连接的设备;
从所述消息队列中获取与所述设备相关联的所有消息;
按照所述所有消息的时间戳消费所述所有消息。
优选地,所述按照所述所有消息的时间戳消费所述所有消息包括:
确定所述所有消息的类型;
对于同一类型的消息,将最新时间戳对应的消息确定为新消息,将其余消息确定为旧消息;
将所述新消息写入数据库;
丢弃所述旧消息。
优选地,所述方法还包括:
获取所述设备的最新上线消息及最新下线消息;
当所述最新上线消息在所述最新下线消息之前,且所述最新上线消息对应的接入服务器与所述最新下线消息对应的接入服务器不一致时,舍弃所述最新下线消息。
优选地,所述方法还包括:
根据所述消息确定所述设备的状态;
当所述设备处于下线状态时,停止向所述设备发送控制指令。
为实现上述目的,本发明进一步提供一种电子设备,所述电子设备包括:
存储器,存储至少一个指令;及
处理器,执行所述存储器中存储的指令以实现所述消息写入方法。
优选地,所述电子设备为组成内容分发网络或者区块链网络的节点。
为实现上述目的,本发明进一步提供一种消息写入系统,所述系统包括:
确定单元,用于当检测到有接入服务器接收到消息时,确定所述接入服务器的属性信息;
生成单元,用于根据所述属性信息,生成所述接入服务器的标识码;
获取单元,用于获取所述接入服务器上记录的当前时间;
添加单元,用于根据所述当前时间添加时间戳及所述标识码至所述消息;
写入单元,用于将所述消息写入消息队列。
优选地,所述生成单元具体用于:
根据所述属性信息计算哈希值;
将所述哈希值确定为所述标识码。
优选地,所述确当单元,还用于在将所述消息写入消息队列后,根据所述消息,确定与所述接入服务器建立长连接的设备;
所述获取单元,还用于从所述消息队列中获取与所述设备相关联的所有消息;
所述系统还包括:
消费单元,用于按照所述所有消息的时间戳消费所述所有消息。
优选地,所述消费单元具体用于:
确定所述所有消息的类型;
对于同一类型的消息,将最新时间戳对应的消息确定为新消息,将其余消息确定为旧消息;
将所述新消息写入数据库;
丢弃所述旧消息。
优选地,所述获取单元,还用于获取所述设备的最新上线消息及最新下线消息;
所述系统还包括:
舍弃单元,用于当所述最新上线消息在所述最新下线消息之前,且所述最新上线消息对应的接入服务器与所述最新下线消息对应的接入服务器不一致时,舍弃所述最新下线消息。
优选地,所述确定单元,还用于根据所述消息确定所述设备的状态;
所述系统还包括:
停止单元,用于当所述设备处于下线状态时,停止向所述设备发送控制指令。
综上所述,本发明能够当检测到有接入服务器接收到消息时,确定所述接入服务器的属性信息,进一步根据所述属性信息,生成所述接入服务器的标识码,获取所述接入服务器上记录的当前时间,根据所述当前时间添加时间戳及所述标识码至所述消息,由于所述接入服务器上记录的时间更为精确,因此消息的顺序更加明确,同时,由于加入了接入服务器的标识码,也进一步明确了消息的来源,再将所述消息写入消息队列,能够有效避免出现消息乱序存储的现象,解决了由于消息队列中的消息写入无规则导致消息消费顺序混乱的问题,进而避免产生不恰当消费,提高服务的稳定性。
附图说明
图1为本发明一实施例的流程示意图;
图2为本发明一实施例揭露的电子设备的内部结构示意图;
图3为本发明消息写入系统的功能模块示意图;
主要元件符号说明
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
需要说明的是,在本发明中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
本发明提供一种消息写入方法。
参照图1,为本发明一实施例的流程示意图。根据不同的需求,该流程示意图中步骤的顺序可以改变,某些步骤可以省略。
所述消息写入方法应用于一个或者多个电子设备中,所述电子设备是一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的设备,所述电子设备的硬件设备包括但不限于微处理器、专用集成电路(Application Specific IntegratedCircuit,ASIC)、可编程门阵列(Field-Programmable Gate Array,FPGA)、数字处理器(Digital Signal Processor,DSP)、嵌入式设备等。
所述电子设备可以是任何一种可与用户进行人机交互的电子产品,例如,个人计算机、平板电脑、智能手机、个人数字助理(Personal Digital Assistant,PDA)、游戏机、交互式网络电视(Internet Protocol Television,IPTV)、智能式穿戴式设备等。
所述电子设备还可以包括网络设备和/或用户设备。其中,所述网络设备包括,但不限于单个网络服务器、多个网络服务器组成的服务器组或基于云计算(CloudComputing)的由大量主机或网络服务器构成的云。
所述电子设备所处的网络包括但不限于互联网、广域网、城域网、局域网、虚拟专用网络(Virtual Private Network,VPN)等。
在一实施例中,该方法包括:
S10,当检测到有接入服务器接收到消息时,确定所述接入服务器的属性信息。
在本发明的至少一个实施例中,所述接入服务器是指与设备直接建立长连接的服务器,所述接入服务器可以上传所述消息至消息队列(Message Queue,MQ)中。
在本发明的至少一个实施例中,所述消息包括所有在所述设备与所述接入服务器之间产生的消息。
其中,所述接入服务器的数量可以是多个,所述设备的数量也可以是多个,本发明不限制。
需要说明的是,在同一时间,一台设备只能与一台接入服务器保持长连接状态。
在本发明的至少一个实施例中,所述属性信息可以包括,但不限于以下一种或者多种的组合:
主机名(host name)、通用唯一识别码(Universally Unique Identifier,UUID)等。
S11,根据所述属性信息,生成所述接入服务器的标识码。
在本发明的至少一个实施例中,所述电子设备根据所述属性信息,生成所述接入服务器的标识码包括:
所述电子设备根据所述属性信息计算哈希值,并将所述哈希值确定为所述标识码。
具体地,所述电子设备可以从所述主机名及所述通用唯一识别码中随机获取预设数量的字符,并计算获取的字符的哈希值,进一步将计算的哈希值确定为所述标识码。
其中,所述预设数量可以进行自定义配置,如:8位字符等。
当然,在其他实施例中,所述电子设备还可以采取其他方式生成所述标识码,只要能够唯一标识一台接入服务器,本发明对所述标识码的生成方式不做限制。
通过上述实施方式,由于哈希值本身具有唯一性,再结合本案中配置的生成哈希值方式,使得到的所述标识码能够唯一标识一台接入服务器,进而避免消息记录混乱,这样,即便是在同一时间点产生了相同类型的消息,由于记录的标识码不同,也能够对消息进行有效区分,进一步避免了消息记录混乱的现象发生。
S12,获取所述接入服务器上记录的当前时间。
在本发明的至少一个实施例中,所述电子设备将所述接入服务器上记录的时间确定为所述当前时间,精确度更高。
需要说明的是,多台接入服务器之间会定期校准时间。
具体地,可以配置每隔预设时间间隔对所述多台接入服务器上记录的时间进行一次校准,以保证时间的准确性。
其中,所述预设时间间隔可以进行自定义配置,例如:所述预设时间间隔可以包括10分钟、1小时等。
通过上述实施方式,能够使所述多台接入服务器上记录的时间的误差限制在毫秒级,而由于一台设备与一台接入服务器每次建立长连接需要间隔2秒以上,以避免频繁建立长连接造成服务器资源的浪费,因此,以所述接入服务器上记录的时间作为所述当前时间,使时间同步在秒级,能够有效区分长连接建立的先后顺序。
S13,根据所述当前时间添加时间戳及所述标识码至所述消息。
通常情况下,一条消息中仅仅包括能够标识一台设备的设备标识等基本信息,而不会记录时间戳及接入服务器的标识码。
本案根据所述当前时间添加时间戳及所述标识码至所述消息,由于所述接入服务器上记录的时间更为精确,因此消息的顺序更加明确,同时,由于加入了所述接入服务器的标识码,也进一步明确了消息的来源,此时,所述电子设备再将所述消息写入消息队列中,则能够有效避免出现消息乱序存储的现象。
S14,将所述消息写入消息队列。
在本发明的至少一个实施例中,所述电子设备将所述消息写入所述消息队列,以实现对所述消息的暂存。
进一步地,在将所述消息写入所述消息队列中后,写入服务器将从所述消息队列中获取所述消息,并对所述消息进行校对,当所述消息执行完校对并确认通过时,所述写入服务器将所述消息写入数据库,当业务需要从所述数据库中调取数据时,则可以直接读取。
在本发明的至少一个实施例中,在将所述消息写入所述消息队列后,所述方法还包括:
所述电子设备根据所述消息,确定与所述接入服务器建立长连接的设备,并从所述消息队列中获取与所述设备相关联的所有消息,进一步地,所述电子设备按照所述所有消息的时间戳消费所述所有消息。
由于在同一时间,一台设备只能与一台接入服务器保持长连接状态,因此,对于一台设备,在同一时间,所述电子设备只能向所述消息队列中写入一条消息,也就是说,在同一时间,对于一台设备,所述电子设备也只能消费一条消息。
因此,对于一台设备对应的所有消息,所述电子设备仅需要按照所述所有消息的时间戳消费所述所有消息,就不会产生消费混乱的现象,所述所有消息将按照时间的先后被有序消费。
当然,对于多台设备,在同一时间,是可以同时消费多条消息的,本发明在此不赘述。
在本发明的至少一个实施例中,所述电子设备按照所述所有消息的时间戳消费所述所有消息包括:
所述电子设备确定所述所有消息的类型,对于同一类型的消息,所述电子设备将最新时间戳对应的消息确定为新消息,将其余消息确定为旧消息,并将所述新消息写入数据库,同时丢弃所述旧消息。
具体地,所述消息的类型可以包括,但不限于以下一种或者多种类型的组合:
上线消息、下线消息等。
例如:对于都属于上线消息的消息A及消息B,当所述消息B为最新时间戳对应的消息时,所述电子设备将所述消息B确定为新消息,并将所述消息A确定为旧消息,进一步地,所述电子设备将所述消息B写入数据库,同时丢弃所述消息A。
通过上述实施方式,所述电子设备能够及时处理掉旧消息,同时记录新消息,避免所述消息队列中有冗余的消息产生,进而有效节约了消息队列的存储空间。
在本发明的至少一个实施例中,所述方法还包括:
所述电子设备获取所述设备的最新上线消息及最新下线消息,当所述最新上线消息在所述最新下线消息之前,且所述最新上线消息对应的接入服务器与所述最新下线消息对应的接入服务器不一致时,所述电子设备舍弃所述最新下线消息。
例如:正常情况下,设备M在8:00上线,然后再下线,而且在此过程中,与所述设备M建立长连接的接入服务器X将准确接收到所述设备M的上线消息及下线消息,不会产生错误记录消息的情况。而当所述设备M在8:01被拔掉网线或者被突然断电时,所述设备M将被迫非正常下线,此时,所述接入服务器X将无法接收到所述设备M的任何消息。在约定的时间内,执行超时检测,即如果所述接入服务器X在所述约定的时间内一直没有收到所述设备M的消息,则所述接入服务器X将在8:05记录所述设备M处于下线状态,在这个过程中,如果所述设备M在8:03重新上线,并与接入服务器Y建立了长连接,则所述接入服务器Y将记录所述设备M处于上线状态,显然,这与所述接入服务器X记录的状态消息是矛盾的,一台设备不可能在两台接入服务器上执行一轮上下线过程,因此,鉴于所述设备M目前的实际状态是与所述接入服务器Y连接,且处于上线状态,因此,所述电子设备舍弃所述接入服务器X记录的状态消息。
通过上述实施方式,能够当所述设备发生异常,导致非正常下线时,避免出现消息记录错误的情况,进而避免了服务发生异常,同时使所述设备状态的确定更加准确。
在本发明的至少一个实施例中,所述方法还包括:
所述电子设备根据所述消息确定所述设备的状态,当所述设备处于下线状态时,所述电子设备停止向所述设备发送控制指令。
可以理解的是,只有所述设备处于上线状态时,所述电子设备才能控制所述设备,并向所述设备发送控制指令,以控制所述设备运行。而当所述设备处于下线状态时,所述设备不可用,因此,所述电子设备停止向所述设备发送控制指令,以避免发生错误。
综上所述,本发明能够当检测到有接入服务器接收到消息时,确定所述接入服务器的属性信息,进一步根据所述属性信息,生成所述接入服务器的标识码,获取所述接入服务器上记录的当前时间,根据所述当前时间添加时间戳及所述标识码至所述消息,由于所述接入服务器上记录的时间更为精确,因此消息的顺序更加明确,同时,由于加入了接入服务器的标识码,也进一步明确了消息的来源,再将所述消息写入消息队列,能够有效避免出现消息乱序存储的现象,解决了由于消息队列中的消息写入无规则导致消息消费顺序混乱的问题,进而避免产生不恰当消费,提高服务的稳定性。
参见图2,在本实施例中,所述电子设备1可以是组成内容分发网络或者区块链网络的节点。
所述电子设备1可以包括存储器12、处理器13和总线,还可以包括存储在所述存储器12中并可在所述处理器13上运行的计算机程序,例如消息写入程序。
本领域技术人员可以理解,所述示意图仅仅是电子设备1的示例,并不构成对电子设备1的限定,所述电子设备1既可以是总线型结构,也可以是星形结构,所述电子设备1还可以包括比图示更多或更少的其他硬件或者软件,或者不同的部件布置,例如所述电子设备1还可以包括输入输出设备、网络接入设备等。
需要说明的是,所述电子设备1仅为举例,其他现有的或今后可能出现的电子产品如可适应于本发明,也应包含在本发明的保护范围以内,并以引用方式包含于此。
其中,存储器12至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、移动硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、磁性存储器、磁盘、光盘等。存储器12在一些实施例中可以是电子设备1的内部存储单元,例如该电子设备1的移动硬盘。存储器12在另一些实施例中也可以是电子设备1的外部存储设备,例如电子设备1上配备的插接式移动硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,存储器12还可以既包括电子设备1的内部存储单元也包括外部存储设备。存储器12不仅可以用于存储安装于电子设备1的应用软件及各类数据,例如消息写入程序的代码等,还可以用于暂时地存储已经输出或者将要输出的数据。
处理器13在一些实施例中可以由集成电路组成,例如可以由单个封装的集成电路所组成,也可以是由多个相同功能或不同功能封装的集成电路所组成,包括一个或者多个中央处理器(Central Processing unit,CPU)、微处理器、数字处理芯片、图形处理器及各种控制芯片的组合等。处理器13是所述电子设备1的控制核心(Control Unit),利用各种接口和线路连接整个电子设备1的各个部件,通过运行或执行存储在所述存储器12内的程序或者模块(例如执行消息写入程序等),以及调用存储在所述存储器12内的数据,以执行电子设备1的各种功能和处理数据。
所述处理器13执行所述电子设备1的操作系统以及安装的各类应用程序。所述处理器13执行所述应用程序以实现上述各个消息写入方法实施例中的步骤,例如图1所示的步骤S10、S11、S12、S13、S14。
或者,所述处理器13执行所述计算机程序时实现上述各装置实施例中各模块/单元的功能,例如:当检测到有接入服务器接收到消息时,确定所述接入服务器的属性信息;根据所述属性信息,生成所述接入服务器的标识码;获取所述接入服务器上记录的当前时间;根据所述当前时间添加时间戳及所述标识码至所述消息;将所述消息写入消息队列。
示例性的,所述计算机程序可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器12中,并由所述处理器13执行,以完成本发明。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序在所述电子设备1中的执行过程。例如,所述计算机程序可以被分割成确定单元110、生成单元111、获取单元112、添加单元113、写入单元114、消费单元115、舍弃单元116以及停止单元117。
总线可以是外设部件互连标准(peripheral component interconnect,简称PCI)总线或扩展工业标准结构(extended industry standard architecture,简称EISA)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图2中仅用一根箭头表示,但并不表示仅有一根总线或一种类型的总线。所述总线被设置为实现所述存储器12以及所述至少一个处理器13等之间的连接通信。
尽管未示出,所述电子设备1还可以包括给各个部件供电的电源(比如电池),优选的,电源可以通过电源管理装置与至少一个处理器13逻辑相连,从而通过电源管理装置实现管理充电、放电、以及功耗管理等功能。电源还可以包括一个或一个以上的直流或交流电源、再充电装置、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。所述电子设备1还可以包括多种传感器、蓝牙模块、Wi-Fi模块等,在此不再赘述。
进一步地,所述电子设备1还可以包括网络接口,可选地,所述网络接口可以包括有线接口和/或无线接口(如WI-FI接口、蓝牙接口等),通常用于在该电子设备1与其他电子设备之间建立通信连接。
可选地,该电子设备1还可以包括用户接口,用户接口可以包括显示器(Display)、输入单元比如键盘(Keyboard),可选的用户接口还可以包括标准的有线接口、无线接口。可选地,在一些实施例中,显示器可以是LED显示器、液晶显示器、触控式液晶显示器以及OLED(Organic Light-Emitting Diode,有机发光二极管)触摸器等。其中,显示器也可以适当的称为显示屏或显示单元,用于显示在电子设备1中处理的信息以及用于显示可视化的用户界面。
应该了解,所述实施例仅为说明之用,在专利申请范围上并不受此结构的限制。
上述以软件功能模块的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,计算机设备,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的部分。
所述电子设备1集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指示相关的硬件设备来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。
其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)。
图2仅示出了具有组件12-13,以及消息写入程序的电子设备1,本领域技术人员可以理解的是,图2示出的结构并不构成对所述电子设备1的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。
结合图1,所述电子设备1中的所述存储器12存储多个指令以实现一种消息写入方法,所述处理器13可执行所述多个指令从而实现:当检测到有接入服务器接收到消息时,确定所述接入服务器的属性信息;根据所述属性信息,生成所述接入服务器的标识码;获取所述接入服务器上记录的当前时间;根据所述当前时间添加时间戳及所述标识码至所述消息;将所述消息写入消息队列。
根据本发明优选实施例,所述处理器13还执行多个指令包括:
根据所述属性信息计算哈希值;
将所述哈希值确定为所述标识码。
根据本发明优选实施例,所述处理器13还执行多个指令包括:
根据所述消息,确定与所述接入服务器建立长连接的设备;
从所述消息队列中获取与所述设备相关联的所有消息;
按照所述所有消息的时间戳消费所述所有消息。
根据本发明优选实施例,所述处理器13还执行多个指令包括:
确定所述所有消息的类型;
对于同一类型的消息,将最新时间戳对应的消息确定为新消息,将其余消息确定为旧消息;
将所述新消息写入数据库;
丢弃所述旧消息。
根据本发明优选实施例,所述处理器13还执行多个指令包括:
获取所述设备的最新上线消息及最新下线消息;
当所述最新上线消息在所述最新下线消息之前,且所述最新上线消息对应的接入服务器与所述最新下线消息对应的接入服务器不一致时,舍弃所述最新下线消息。
根据本发明优选实施例,所述处理器13还执行多个指令包括:
根据所述消息确定所述设备的状态;
当所述设备处于下线状态时,停止向所述设备发送控制指令。
参照图3,为本发明消息写入系统的功能模块示意图。所述消息写入系统11包括确定单元110、生成单元111、获取单元112、添加单元113、写入单元114、消费单元115、舍弃单元116以及停止单元117。本发明所称的模块/单元是指一种能够被处理器13所执行,并且能够完成固定功能的一系列计算机程序段,其存储在存储器12中。在本实施例中,关于各模块/单元的功能将在后续的实施例中详述。
当检测到有接入服务器接收到消息时,确定单元110确定所述接入服务器的属性信息。
在本发明的至少一个实施例中,所述接入服务器是指与设备直接建立长连接的服务器,所述接入服务器可以上传所述消息至消息队列(Message Queue,MQ)中。
在本发明的至少一个实施例中,所述消息包括所有在所述设备与所述接入服务器之间产生的消息。
其中,所述接入服务器的数量可以是多个,所述设备的数量也可以是多个,本发明不限制。
需要说明的是,在同一时间,一台设备只能与一台接入服务器保持长连接状态。
在本发明的至少一个实施例中,所述属性信息可以包括,但不限于以下一种或者多种的组合:
主机名(host name)、通用唯一识别码(Universally Unique Identifier,UUID)等。
生成单元111根据所述属性信息,生成所述接入服务器的标识码。
在本发明的至少一个实施例中,所述生成单元111根据所述属性信息,生成所述接入服务器的标识码包括:
所述生成单元111根据所述属性信息计算哈希值,并将所述哈希值确定为所述标识码。
具体地,所述生成单元111可以从所述主机名及所述通用唯一识别码中随机获取预设数量的字符,并计算获取的字符的哈希值,进一步将计算的哈希值确定为所述标识码。
其中,所述预设数量可以进行自定义配置,如:8位字符等。
当然,在其他实施例中,所述生成单元111还可以采取其他方式生成所述标识码,只要能够唯一标识一台接入服务器,本发明对所述标识码的生成方式不做限制。
通过上述实施方式,由于哈希值本身具有唯一性,再结合本案中配置的生成哈希值方式,使得到的所述标识码能够唯一标识一台接入服务器,进而避免消息记录混乱,这样,即便是在同一时间点产生了相同类型的消息,由于记录的标识码不同,也能够对消息进行有效区分,进一步避免了消息记录混乱的现象发生。
获取单元112获取所述接入服务器上记录的当前时间。
在本发明的至少一个实施例中,所述获取单元112将所述接入服务器上记录的时间确定为所述当前时间,精确度更高。
需要说明的是,多台接入服务器之间会定期校准时间。
具体地,可以配置每隔预设时间间隔对所述多台接入服务器上记录的时间进行一次校准,以保证时间的准确性。
其中,所述预设时间间隔可以进行自定义配置,例如:所述预设时间间隔可以包括10分钟、1小时等。
通过上述实施方式,能够使所述多台接入服务器上记录的时间的误差限制在毫秒级,而由于一台设备与一台接入服务器每次建立长连接需要间隔2秒以上,以避免频繁建立长连接造成服务器资源的浪费,因此,以所述接入服务器上记录的时间作为所述当前时间,使时间同步在秒级,能够有效区分长连接建立的先后顺序。
添加单元113根据所述当前时间添加时间戳及所述标识码至所述消息。
通常情况下,一条消息中仅仅包括能够标识一台设备的设备标识等基本信息,而不会记录时间戳及接入服务器的标识码。
本案根据所述当前时间添加时间戳及所述标识码至所述消息,由于所述接入服务器上记录的时间更为精确,因此,消息的顺序更加明确,同时,由于加入了所述接入服务器的标识码,也进一步明确了消息的来源,此时,写入单元114再将所述消息写入消息队列中,则能够有效避免出现消息乱序存储的现象。
所述写入单元114将所述消息写入消息队列。
在本发明的至少一个实施例中,所述写入单元114将所述消息写入所述消息队列,以实现对所述消息的暂存。
进一步地,在将所述消息写入所述消息队列中后,写入服务器将从所述消息队列中获取所述消息,并对所述消息进行校对,当所述消息执行完校对并确认通过时,所述写入服务器将所述消息写入数据库,当业务需要从所述数据库中调取数据时,则可以直接读取。
在本发明的至少一个实施例中,在将所述消息写入所述消息队列后,所述方法还包括:
所述确定单元110根据所述消息,确定与所述接入服务器建立长连接的设备,所述获取单元112从所述消息队列中获取与所述设备相关联的所有消息,进一步地,消费单元115按照所述所有消息的时间戳消费所述所有消息。
由于在同一时间,一台设备只能与一台接入服务器保持长连接状态,因此,对于一台设备,在同一时间,所述写入单元114只能向所述消息队列中写入一条消息,也就是说,在同一时间,对于一台设备,所述消费单元115也只能消费一条消息。
因此,对于一台设备对应的所有消息,所述消费单元115仅需要按照所述所有消息的时间戳消费所述所有消息,就不会产生消费混乱的现象,所述所有消息将按照时间的先后被有序消费。
当然,对于多台设备,在同一时间,是可以同时消费多条消息的,本发明在此不赘述。
在本发明的至少一个实施例中,所述消费单元115按照所述所有消息的时间戳消费所述所有消息包括:
所述消费单元115确定所述所有消息的类型,对于同一类型的消息,所述消费单元115将最新时间戳对应的消息确定为新消息,将其余消息确定为旧消息,并将所述新消息写入数据库,同时丢弃所述旧消息。
具体地,所述消息的类型可以包括,但不限于以下一种或者多种类型的组合:
上线消息、下线消息等。
例如:对于都属于上线消息的消息A及消息B,当所述消息B为最新时间戳对应的消息时,所述消费单元115将所述消息B确定为新消息,并将所述消息A确定为旧消息,进一步地,所述消费单元115将所述消息B写入数据库,同时丢弃所述消息A。
通过上述实施方式,所述消费单元115能够及时处理掉旧消息,同时记录新消息,避免所述消息队列中有冗余的消息产生,进而有效节约了消息队列的存储空间。
在本发明的至少一个实施例中,所述方法还包括:
所述获取单元112获取所述设备的最新上线消息及最新下线消息,当所述最新上线消息在所述最新下线消息之前,且所述最新上线消息对应的接入服务器与所述最新下线消息对应的接入服务器不一致时,舍弃单元116舍弃所述最新下线消息。
例如:正常情况下,设备M在8:00上线,然后再下线,而且在此过程中,与所述设备M建立长连接的接入服务器X将准确接收到所述设备M的上线消息及下线消息,不会产生错误记录消息的情况。而当所述设备M在8:01被拔掉网线或者被突然断电时,所述设备M将被迫非正常下线,此时,所述接入服务器X将无法接收到所述设备M的任何消息。在约定的时间内,执行超时检测,即如果所述接入服务器X在所述约定的时间内一直没有收到所述设备M的消息,则所述接入服务器X将在8:05记录所述设备M处于下线状态,在这个过程中,如果所述设备M在8:03重新上线,并与接入服务器Y建立了长连接,则所述接入服务器Y将记录所述设备M处于上线状态,显然,这与所述接入服务器X记录的状态消息是矛盾的,一台设备不可能在两台接入服务器上执行一轮上下线过程,因此,鉴于所述设备M目前的实际状态是与所述接入服务器Y连接,且处于上线状态,因此,所述舍弃单元116舍弃所述接入服务器X记录的状态消息。
通过上述实施方式,能够当所述设备发生异常,导致非正常下线时,避免出现消息记录错误的情况,进而避免了服务发生异常,同时使所述设备状态的确定更加准确。
在本发明的至少一个实施例中,所述方法还包括:
所述确定单元110根据所述消息确定所述设备的状态,当所述设备处于下线状态时,停止单元117停止向所述设备发送控制指令。
可以理解的是,只有所述设备处于上线状态时,才能控制所述设备,并向所述设备发送控制指令,以控制所述设备运行。而当所述设备处于下线状态时,所述设备不可用,因此,所述停止单元117停止向所述设备发送控制指令,以避免发生错误。
综上所述,本发明能够当检测到有接入服务器接收到消息时,确定所述接入服务器的属性信息,进一步根据所述属性信息,生成所述接入服务器的标识码,获取所述接入服务器上记录的当前时间,根据所述当前时间添加时间戳及所述标识码至所述消息,由于所述接入服务器上记录的时间更为精确,因此消息的顺序更加明确,同时,由于加入了接入服务器的标识码,也进一步明确了消息的来源,再将所述消息写入消息队列,能够有效避免出现消息乱序存储的现象,解决了由于消息队列中的消息写入无规则导致消息消费顺序混乱的问题,进而避免产生不恰当消费,提高服务的稳定性。
在上述实施例中,可以全部或部分地通过软件、硬件设备、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。
所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、移动硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态移动硬盘Solid State Disk(SSD))等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件设备的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动移动硬盘、只读存储器(ROM,Read-OnlyMemory)、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是,上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。并且本文中的术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (9)
1.一种消息写入方法,其特征在于,所述方法包括:
当检测到有接入服务器接收到消息时,确定所述接入服务器的属性信息;
根据所述属性信息,生成所述接入服务器的标识码;
获取所述接入服务器上记录的当前时间;
根据所述当前时间添加时间戳及所述标识码至所述消息;
将所述消息写入消息队列;
根据所述消息,确定与所述接入服务器建立长连接的设备;
获取所述设备的最新上线消息及最新下线消息;
当所述最新上线消息在所述最新下线消息之前,且所述最新上线消息对应的接入服务器与所述最新下线消息对应的接入服务器不一致时,舍弃所述最新下线消息。
2.如权利要求1所述的消息写入方法,其特征在于,所述根据所述属性信息,生成所述接入服务器的标识码包括:
根据所述属性信息计算哈希值;
将所述哈希值确定为所述标识码。
3.如权利要求1所述的消息写入方法,其特征在于,在根据所述消息,确定与所述接入服务器建立长连接的设备后,所述方法还包括:
从所述消息队列中获取与所述设备相关联的所有消息;
按照所述所有消息的时间戳消费所述所有消息。
4.如权利要求3所述的消息写入方法,其特征在于,所述按照所述所有消息的时间戳消费所述所有消息包括:
确定所述所有消息的类型;
对于同一类型的消息,将最新时间戳对应的消息确定为新消息,将其余消息确定为旧消息;
将所述新消息写入数据库;
丢弃所述旧消息。
5.如权利要求3所述的消息写入方法,其特征在于,所述方法还包括:
根据所述消息确定所述设备的状态;
当所述设备处于下线状态时,停止向所述设备发送控制指令。
6.一种电子设备,其特征在于,所述电子设备包括:
存储器,存储至少一个指令;及
处理器,执行所述存储器中存储的指令以实现如权利要求1至5中任意一项所述的消息写入方法。
7.根据权利要求6所述的电子设备,其特征在于,所述电子设备为组成内容分发网络或者区块链网络的节点。
8.一种消息写入系统,其特征在于,所述系统包括:
确定单元,用于当检测到有接入服务器接收到消息时,确定所述接入服务器的属性信息;
生成单元,用于根据所述属性信息,生成所述接入服务器的标识码;
获取单元,用于获取所述接入服务器上记录的当前时间;
添加单元,用于根据所述当前时间添加时间戳及所述标识码至所述消息;
写入单元,用于将所述消息写入消息队列;根据所述消息,确定与所述接入服务器建立长连接的设备;获取所述设备的最新上线消息及最新下线消息;当所述最新上线消息在所述最新下线消息之前,且所述最新上线消息对应的接入服务器与所述最新下线消息对应的接入服务器不一致时,舍弃所述最新下线消息。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有消息写入程序,所述消息写入程序可被一个或者多个处理器执行,以实现如权利要求1至5中任一项所述的消息写入方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910900783.1A CN110647409B (zh) | 2019-09-23 | 2019-09-23 | 消息写入方法、电子设备、系统及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910900783.1A CN110647409B (zh) | 2019-09-23 | 2019-09-23 | 消息写入方法、电子设备、系统及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110647409A CN110647409A (zh) | 2020-01-03 |
CN110647409B true CN110647409B (zh) | 2023-05-12 |
Family
ID=68992371
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910900783.1A Active CN110647409B (zh) | 2019-09-23 | 2019-09-23 | 消息写入方法、电子设备、系统及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110647409B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111291424B (zh) * | 2020-02-19 | 2023-03-24 | 望海康信(北京)科技股份公司 | 标识号生成方法、装置、计算机设备及存储介质 |
CN111586117A (zh) * | 2020-04-26 | 2020-08-25 | 特瓦特能源科技有限公司 | 一种设备通信方法及装置 |
CN114138196A (zh) * | 2021-11-26 | 2022-03-04 | 南方电网大数据服务有限公司 | 电力系统数据存储方法、装置、计算机设备和存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106792797A (zh) * | 2016-11-22 | 2017-05-31 | 上海斐讯数据通信技术有限公司 | 一种用户终端上下线的处理方法及无线接入设备 |
CN109286542A (zh) * | 2017-07-21 | 2019-01-29 | 西安中兴新软件有限责任公司 | 一种基于nb-iot的无线设备群组接入方法及终端 |
CN110008041A (zh) * | 2019-03-27 | 2019-07-12 | 北京奇艺世纪科技有限公司 | 一种消息处理方法及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8375400B2 (en) * | 2011-02-11 | 2013-02-12 | Research In Motion Limited | Communication device and method for coherent updating of collated message listings |
US9253125B2 (en) * | 2013-06-06 | 2016-02-02 | International Business Machines Corporation | Managing a messaging state across multiple clients |
-
2019
- 2019-09-23 CN CN201910900783.1A patent/CN110647409B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106792797A (zh) * | 2016-11-22 | 2017-05-31 | 上海斐讯数据通信技术有限公司 | 一种用户终端上下线的处理方法及无线接入设备 |
CN109286542A (zh) * | 2017-07-21 | 2019-01-29 | 西安中兴新软件有限责任公司 | 一种基于nb-iot的无线设备群组接入方法及终端 |
CN110008041A (zh) * | 2019-03-27 | 2019-07-12 | 北京奇艺世纪科技有限公司 | 一种消息处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN110647409A (zh) | 2020-01-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110647409B (zh) | 消息写入方法、电子设备、系统及介质 | |
CN111181804B (zh) | 智能设备离线状态自动检测方法、装置、电子设备及介质 | |
US8086906B2 (en) | Correlating hardware devices between local operating system and global management entity | |
CN110677493B (zh) | 服务状态确定方法及装置、计算机装置及存储介质 | |
CN111277645B (zh) | 主备节点热切换方法、区块链系统、区块链节点及介质 | |
CN112015663B (zh) | 测试数据录制方法、装置、设备及介质 | |
US10282120B2 (en) | Method, apparatus and system for inserting disk | |
CN112115026A (zh) | 服务器集群监控方法、装置、电子设备及可读存储介质 | |
CN114124968B (zh) | 基于行情数据的负载均衡方法、装置、设备及介质 | |
CN112653760A (zh) | 跨服务器的文件传输方法、装置、电子设备及存储介质 | |
CN111988198B (zh) | 在线用户人数统计方法、装置、电子设备及计算机介质 | |
WO2021114877A1 (zh) | 缺失号码检测方法、装置、电子设备及存储介质 | |
CN113868058A (zh) | 一种外设组件高速互联设备故障检测方法、装置及服务器 | |
CN110688073B (zh) | 数据存储方法、电子设备、系统及介质 | |
CN110879701B (zh) | 工作流可视化配置方法、服务器、系统及介质 | |
CN110730228A (zh) | 数据存储方法、电子设备、系统及介质 | |
CN111245727A (zh) | 基于dht网络的消息路由方法、电子设备、代理节点及介质 | |
CN115002062B (zh) | 消息处理方法、装置、设备及可读存储介质 | |
CN110716939B (zh) | 数据管理方法、电子设备、系统及介质 | |
CN114499880A (zh) | 燃气轮机的运维数据的传输方法及装置 | |
CN110716806B (zh) | 边缘节点计算能力确定方法、电子设备、系统及介质 | |
CN111245948A (zh) | Dht网络连接方法、电子设备及介质 | |
CN111106950B (zh) | 反向代理服务质量监测方法、电子设备、系统及介质 | |
CN110879743B (zh) | 基于边缘计算环境的任务剔除方法、设备、系统及介质 | |
CN110971697A (zh) | Redis单实例保护处理方法、装置、计算机设备及存储介质 |
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 |