CN111817984A - 消息发送方法、装置、设备及存储介质 - Google Patents
消息发送方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN111817984A CN111817984A CN202010471136.6A CN202010471136A CN111817984A CN 111817984 A CN111817984 A CN 111817984A CN 202010471136 A CN202010471136 A CN 202010471136A CN 111817984 A CN111817984 A CN 111817984A
- Authority
- CN
- China
- Prior art keywords
- message
- target message
- data
- target
- sent
- 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.)
- Granted
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/50—Queue scheduling
-
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
-
- 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
Abstract
本发明涉及人工智能,提供一种消息发送方法、装置、设备及存储介质,包括按字符对目标消息队列进行遍历,并实时统计当前字符所对应的字符累计数据量;在其达到消息发送门限值时,判断当前字符是否属于标识符;若是则对当前字符之前的待发送消息进行发送。本发明将以标识符分隔的消息构成的消息队列的初始字符作为起点,进行字符的遍历以及字符累计数据量统计,然后在字符累计数据量达到消息发送门限值时,判断当前字符是否属于标识符;若是,则按遍历顺序对当前字符之前的待发送消息进行发送,既能保证单次消息发送量不超过门限值,也能保证每次发送的消息都是完整的消息。此外,本发明还涉及区块链技术,消息队列中的消息可存储于区块链中。
Description
技术领域
本发明涉及人工智能领域,尤其涉及一种消息发送方法、装置、设备及存储介质。
背景技术
Kafka是一种高吞吐量的分布式发布订阅消息系统,也是一种能够实现实时发送消息数据的工具。
目前,通过kafka一次性批量发送消息的最大默认容量是固定的,一般为1M。基于kafka目前的消息发送机制,在需要一次性发送多条消息且容量较大的情况下,如果一次性发送超过1M的消息数据,kafka会自动截取容量为1M的数据进行发送。因此,在需要发送的消息数据条数较多,并且数据容量大于1M的情况下,现有技术有以下几点缺陷:
(1)很可能会造成某条完整消息被截断发送的情况,而超过1M对应部分的消息,则不会被发送。这就可能会造成接收到的消息,其内容完整性和连贯性均遭到破坏,使消息的内容失去原本的统一性,甚至影响消息的读取使用。
(2)无法较为直观的了解发送的消息是从具体哪个位置被截断,更无法自动接着从被截取的位置,继续发送剩余的消息内容。
上述内容仅用于辅助理解本发明的技术方案,并不代表承认上述内容是现有技术。
发明内容
本发明的主要目的在于提供了一种消息发送方法、装置、设备及存储介质,旨在解决现有技术中,kafka系统在发送消息时容易出现消息被截断发送或部分发送,使消息的内容完整性和连贯性均遭到破坏的技术问题。
为实现上述目的,本发明提供了一种消息发送方法,所述方法包括以下步骤:
读取目标消息队列,所述目标消息队列中包含若干条以标识符分隔的待发送消息;
将所述目标消息队列的初始字符作为遍历起点;
基于所述遍历起点,按字符对所述目标消息队列进行遍历,并实时统计每次遍历到的当前字符所对应的字符累计数据量;
在检测到所述字符累计数据量达到消息发送门限值时,判断所述当前字符是否属于所述标识符;
若是,则按遍历顺序对所述当前字符之前的待发送消息进行发送。
优选地,所述读取目标消息队列,所述目标消息队列中包含若干条以标识符分隔的待发送消息的步骤之前,所述方法还包括:
在接收到消息处理请求时,获取所述消息处理请求对应的待发送消息集合;
获取所述待发送消息集合中各消息的当前数据格式;
根据预先设定的数据格式和所述当前数据格式对所述消息进行格式转换,以获得目标消息;
根据所述目标消息获取目标消息数据,并在不同的目标消息数据之间插入标识符,以获得目标消息队列。
优选地,所述根据所述目标消息获取目标消息数据的步骤,包括:
确定所述待发送消息集合中各消息对应的消息订阅客户端,并获取所述消息订阅客户端对应的互联网协议地址;
根据所述互联网协议地址判断所述消息订阅客户端是否属于预设类型的客户端;
若属于,则在预先构建的映射关系中查找所述互联网协议地址对应的目标消息处理策略;
根据所述目标消息处理策略对所述目标消息进行处理,获得目标消息数据,所述目标消息数据存储于区块链中。
优选地,所述目标消息处理策略中包含消息整合策略和/或消息筛选策略;
所述根据所述目标消息处理策略对所述目标消息进行处理,获得目标消息数据的步骤,包括:
根据所述消息整合策略调用预置编译器生成所述目标消息对应的业务类;
通过所述业务类对所述目标消息进行序列化,以获得序列化后的目标消息数据;
和/或,根据所述消息筛选策略对所述目标消息进行分词处理,获得分词后的消息词汇;
通过TF-IDF算法对所述消息词汇进行关键词筛选,并根据筛选后的关键词生成目标消息数据。
优选地,所述在接收到消息处理请求时,获取所述消息处理请求对应的待发送消息集合的步骤,包括:
在接收到消息处理请求时,读取所述消息处理请求中包含的入参数据,所述入参数据包括应用执行路径、消息主题字段以及地址端口字段;
根据所述应用执行路径确定待调用的分布式应用,根据所述地址端口字段确定数据缓存对象;
根据所述消息主题字段确定待发送的消息数据,并调用所述分布式应用将所述待发送的消息数据发送至所述数据缓存对象中进行缓存,以获得待发送消息集合。
优选地,所述若是,则按遍历顺序对所述当前字符之前的待发送消息进行发送的步骤之后,所述方法还包括:
将所述目标消息队列中剩余的待发送消息作为新的目标消息队列,并返回所述将所述目标消息队列的初始字符作为遍历起点的步骤。
优选地,所述在检测到所述字符累计数据量达到消息发送门限值时,判断所述当前字符是否属于所述标识符的步骤之后,所述方法还包括:
若否,则在所述目标消息队列中查找所述当前字符对应的上一标识符;
按遍历顺序对所述上一标识符之前的待发送消息进行发送;
将所述上一标识符的下一字符作为新的遍历起点,返回所述基于所述遍历起点按字符对所述目标消息队列进行遍历,并实时统计每次遍历到的当前字符所对应的字符累计数据量的步骤。
此外,为实现上述目的,本发明还提出一种消息发送装置,所述装置包括:
消息获取模块,用于读取目标消息队列,所述目标消息队列中包含若干条以标识符分隔的待发送消息;
字符遍历模块,用于将所述目标消息队列的初始字符作为遍历起点;
字符统计模块,用于基于所述遍历起点,按字符对所述目标消息队列进行遍历,并实时统计每次遍历到的当前字符所对应的字符累计数据量;
数据判断模块,用于在检测到所述字符累计数据量达到消息发送门限值时,判断所述当前字符是否为标识符;
消息发送模块,用于在所述当前字符属于所述标识符时,按遍历顺序对所述当前字符之前的待发送消息进行发送。
此外,为实现上述目的,本发明还提出一种消息发送设备,所述设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的消息发送程序,所述消息发送程序配置为实现如上文所述的消息发送方法的步骤。
此外,为实现上述目的,本发明还提出一种存储介质,所述存储介质上存储有消息发送程序,所述消息发送程序被处理器执行时实现如上文所述的消息发送方法的步骤。
本发明通过获取包含若干条以标识符分隔的待发送消息构成的目标消息队列;然后将目标消息队列的初始字符作为遍历起点;再基于遍历起点,按字符对目标消息队列进行遍历,并实时统计每次遍历到的当前字符所对应的字符累计数据量;在检测到字符累计数据量达到消息发送门限值时,判断当前字符是否属于所述标识符;若是,则按遍历顺序对当前字符之前的待发送消息进行发送。由于本发明是将以标识符分隔的待发送消息构成的目标消息队列对应的初始字符作为起点,进行字符的遍历以及字符累计数据量统计,然后在字符累计数据量达到消息发送门限值时,判断当前字符是否属于标识符;若是,则按遍历顺序对当前字符之前的待发送消息进行发送,既能保证单次消息发送量不超过门限值,也能保证每次发送的消息都是完整的,不会出现消息被间断发送的情况。
附图说明
图1是本发明实施例方案涉及的硬件运行环境的消息发送设备的结构示意图;
图2为本发明消息发送方法第一实施例的流程示意图;
图3为本发明消息发送方法第二实施例的流程示意图;
图4为本发明消息发送方法第三实施例的流程示意图;
图5为本发明消息发送装置第一实施例的结构框图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
参照图1,图1为本发明实施例方案涉及的硬件运行环境的消息发送设备结构示意图。
如图1所示,该消息发送设备可以包括:处理器1001,例如中央处理器(CentralProcessing Unit,CPU),通信总线1002、用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、输入单元比如键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如无线保真(WIreless-FIdelity,WI-FI)接口)。存储器1005可以是高速的随机存取存储器(RandomAccess Memory,RAM)存储器,也可以是稳定的非易失性存储器(Non-Volatile Memory,NVM),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
本领域技术人员可以理解,图1中示出的结构并不构成对消息发送设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
如图1所示,作为一种存储介质的存储器1005中可以包括操作系统、数据存储模块、网络通信模块、用户接口模块以及消息发送程序。
在图1所示的消息发送设备中,网络接口1004主要用于与网络服务器进行数据通信;用户接口1003主要用于与用户进行数据交互;本发明消息发送设备中的处理器1001、存储器1005可以设置在消息发送设备中,所述消息发送设备通过处理器1001调用存储器1005中存储的消息发送程序,并执行本发明实施例提供的消息发送方法。
本发明实施例提供了一种消息发送方法,参照图2,图2为本发明消息发送方法第一实施例的流程示意图。
本实施例中,所述消息发送方法包括以下步骤:
步骤S10:读取目标消息队列,所述目标消息队列中包含若干条以标识符分隔的待发送消息;
需要说明的是,本方法实施例的执行主体可以是一种高吞吐量的分布式发布订阅消息系统(以下简称kafka系统),又或是装载有该分布式发布订阅消息系统且具有数据处理、网络通信以及程序运行功能的计算服务设备,例如智能手机、平板电脑、个人电脑、服务器等。下面将以kafka系统为例,对本实施例及下述各实施例进行解释说明。
应理解的是,所述目标消息队列可以是等待发送的消息,这些消息之间以预先设定的标识符(例如换行符,或者是若干个带有序列标记的符号)隔开,例如“消息A标识符I消息B标识符II消息C标识符III消息D”,本实施例中,所述标识符的具体形式可根据实际情况设定,本实施例对此不加以限制。
可理解的是,所述目标消息队列可以由kafka系统对获取的大批量消息数据进行处理后生成。其中,kafka系统对这些消息数据进行处理,至少包括在不同的消息数据之间插入上述标识符。
步骤S20:将所述目标消息队列的初始字符作为遍历起点;
需要说明的是,本实施例消息发送方法的原理是将不同的消息用标识符进行分隔标记,然后基于kafka系统单次发送消息的最大数据量,在保证每次发送消息的完整性的前提下,尽可能多的发送更多的消息数据,提高消息的分批发送效率。
在具体实现中,kafka系统在获取到上述目标消息队列后,可以将所述目标消息队列中第一条消息的第一个字符(即所述初始字符)作为遍历操作的起始点,对整个目标消息队列按照字符进行遍历,从而能够精确地控制每批次发送消息的总数据量,保证消息的发送不会超过kafka系统所限定的单次发送消息的最大数据量。
应理解的是,所谓遍历是指沿着某条搜索路线,依次对树(或图)中每个节点均做一次访问。应用到本实施例中,即按照字符的先后顺序,依次读取每一个字符。
步骤S30:基于所述遍历起点,按字符对所述目标消息队列进行遍历,并实时统计每次遍历到的当前字符所对应的字符累计数据量;
在具体实现中,kafka系统在确定遍历起点后,即可按字符对所述目标消息队列中的每个消息对应的消息数据进行遍历。同时,每遍历一个字符就统计一次已遍历的所有字符的总数据量,即所述字符累计数据量。
步骤S40:在检测到所述字符累计数据量达到消息发送门限值时,判断所述当前字符是否属于所述标识符;
应理解的是,所述消息发送门限值,即kafka系统所限定的单次发送消息的最大数据量(又称为最大默认消息容量)。为了保证数据的完整性,本实施例优选按照kafka系统最大默认消息容量来设置消息发送门限值,然后实时检测当前累加获得的字符累计数据量是否达到该门限值,若达到,则表明当前遍历到的字符之后的消息数据在本次消息发送中不能被发送。此时,为保证被发送的每一条消息都是完整的,本实施例中kafka系统还将判断当前字符是否属于所述标识符,然后根据判断结果执行后续的相应操作。
步骤S50:若是,则按遍历顺序对所述当前字符之前的待发送消息进行发送。
可理解的是,若判断出当前遍历到的字符为标识符,则表明将该标识符之前的消息数据进行发送就能确保本次发送的每一条消息都是完整的,不会被隔断,消息的完整性和连贯性均能得到保证。
在具体实现中,若kafka系统判断出在字符累计数据量达到消息发送门限值时,当前字符正好为标识符,那么此时就可以以该标识符为截取点对目标消息队列进行消息截取,从而对当前字符之前的多条完整的待发送消息进行发送。
进一步地,考虑到现有技术中,kafka系统无法准确地定位已经被发送的消息是从具体哪个位置被截断,因而无法自动接着从被截取的位置,继续发送剩余的消息内容。
为解决该问题,本实施例中,kafka系统在将当前字符之前的多条完整的待发送消息进行发送之后,还可将所述目标消息队列中剩余的待发送消息作为新的目标消息队列,然后将所述新的目标消息队列的初始字符作为新的遍历起点再执行上述步骤S30-S50(即返回所述将所述目标消息队列的初始字符作为遍历起点的步骤),直至消息队列中所有的消息均被成功发送。
本实施例通过获取包含若干条以标识符分隔的待发送消息构成的目标消息队列;然后将目标消息队列的初始字符作为遍历起点;再基于遍历起点,按字符对目标消息队列进行遍历,并实时统计每次遍历到的当前字符所对应的字符累计数据量;在检测到字符累计数据量达到消息发送门限值时,判断当前字符是否属于所述标识符;若是,则按遍历顺序对当前字符之前的待发送消息进行发送。由于本实施例是将以标识符分隔的待发送消息构成的目标消息队列对应的初始字符作为起点,进行字符的遍历以及字符累计数据量统计,然后在字符累计数据量达到消息发送门限值时,判断当前字符是否属于标识符;若是,则按遍历顺序对当前字符之前的待发送消息进行发送,既能保证单次消息发送量不超过门限值,也能保证每次发送的消息都是完整的,不会出现消息被间断发送的情况。
参考图3,图3为本发明消息发送方法第二实施例的流程示意图。
基于上述第一实施例,本实施例消息发送方法在所述步骤S10之前,还包括:
步骤S01:在接收到消息处理请求时,获取所述消息处理请求对应的待发送消息集合;
需要说明的是,所述消息处理请求可以是已订阅的消息事件在kafka系统中触发的消息处理需求。例如,外部应用A在kafka系统中订阅了主题为B的消息,一旦kafka系统监控到主题B这类消息出现,就会产生相应的消息处理请求来使得kafka系统对该消息处理请求进行响应并处理。
可理解的是,作为分布式消息订阅系统,kafka系统中同一时间可能会产生大批量的消息处理请求,且每条消息处理请求所需要处理的消息也可能是批量的。因此,本实施例中kafka系统可在接收到消息处理请求时,可一同获取所述消息处理请求对应的待发送消息集合。
具体的,kafka系统可在接收到消息处理请求时,可先读取所述消息处理请求中包含的入参数据,所述入参数据包括应用执行路径、消息主题字段以及地址端口字段;然后根据所述应用执行路径确定待调用的分布式应用,根据所述地址端口字段确定数据缓存对象;再根据所述消息主题字段确定待发送的消息数据,并调用所述分布式应用将所述待发送的消息数据发送至所述数据缓存对象中进行缓存,以获得待发送消息集合。
需要说明的是,所述入参数据可包括:应用执行路径,数据缓存对象broker的互联网协议地址(IP地址)及端口,消息主题topic等。上述入参数据是在linux环境下使用kafka发送请求时的必传参数,需要kafka应用的执行路径去在该路径下调用kafka应用(即所述分布式应用);同时,由于kafka里的消息是通过消息主题去订阅,因此收发消息实际上是针对相应的主题来收发消息;此外,消息数据需要被发送到broker进行缓存以等待发送,所以需要broker的IP地址及端口。例如入参数据:/bin/kafka-console-producer.sh--broker-list10.25.67.13:9092—topic-MESSAGE-TOPIC中,/bin/kafka-console-producer.sh为kafka的应用执行路径,10.25.67.13:9092则为broker的IP地址及端口字段,MESSAGE-TOPIC为具体的消息主题topic字段。
进一步地,考虑到由于broker没有副本机制,一旦宕机该broker的消息将都不可用,也就是说一旦broker挂掉,该broker中缓存的消息数据都将被清除。因此本实施例中,还将从kafka系统中选取一台服务器作为broker的备份服务器,以同步存储broker中缓存的消息。一旦当前的broker宕机,将立即启动该备份服务器使得消息数据的发送能继续进行。
当然,为保证选取的备份服务器能够承担备用角色,在选取所述备份服务器时,可先根据服务器的运行状态来实现,比如考虑服务器的历史宕机次数、CPU占用率,数据读写性能和/或当前是否被占用等。
步骤S02:获取所述待发送消息集合中各消息的当前数据格式;
需要说明的是,kafka传输的消息一般为json字符串类型的,从而便于收发双方对数据进行解析。但在某些特殊场景中,kafka传输的消息可能不属于json这一既定格式,此时就需要对待发送的消息进行数据格式的转换。
在具体实现中,kafka系统需要先对待发送消息集合中的消息进行数据格式的获取,然后根据获取的当前数据格式判断是否需要对这些消息进行格式转换。
步骤S03:根据预先设定的数据格式和所述当前数据格式对所述消息进行格式转换,以获得目标消息;
需要说明的是,本实施例中所述预先设定的数据格式可以根据实际的需要进行设定,并不局限于上述json格式。
在具体实现中,kafka系统可以在获取到各消息的当前数据格式后,将不属于预设设定的数据格式的消息标记出来,然后对这部分消息单独进行数据格式的转换,从而获得数据格式均为所述预先设定的数据格式的目标消息。
步骤S04:根据所述目标消息获取目标消息数据,并在不同的目标消息数据之间插入标识符,以获得目标消息队列。
需要说明的是,考虑到不同的消息订阅客户端对所接收消息的各类需求不同,为了保证消息的顺利发送。本实施例中kafka系统还将根据预先配置的消息处理策略对目标消息进行处理,获得目标消息数据。
具体的,kafka系统可先确定所述待发送消息集合中各消息对应的消息订阅客户端,并获取所述消息订阅客户端对应的互联网协议地址;然后根据所述互联网协议地址判断所述消息订阅客户端是否属于预设类型的客户端;若属于,则在预先构建的映射关系中查找所述互联网协议地址对应的目标消息处理策略;最后根据所述目标消息处理策略对所述目标消息进行处理,获得目标消息数据。
需要强调的是,为进一步保证上述目标消息数据的私密和安全性,上述目标消息数据还可以存储于一区块链的节点中。
其中,所述预设类型的客户端即需要对消息按照预先配置的消息处理策略进行处理的客户端。对于这类客户端,可预先在kafka系统中通过其对应的IP地址对其进行标记,然后构建一个IP地址与对应消息处理策略之间的映射关系。在实际应用中,当kafka系统通过IP地址确定出具体的消息订阅客户端属于上述预设类型的客户端后,即可在上述映射关系中快速、准确地查找对应的目标消息处理策略。
需要说明的是,根据实际应用情况,本申请中所述消息处理策略可大致分为两类,一类是对消息进行整合或合并的消息整合策略,另一类则是对消息进行筛选的消息筛选策略。
其中,对消息进行整合或合并,即生成消息序列。
应理解的是,在分布式发布订阅消息系统kafka中,通常由producer(即消息的生成者)来对获取的消息进行序列化处理。本实施例中kafka系统可采用以下2种序列化方式:
(1)二进制方式:也就是Specific方式,具体可在kafka系统中定义好schema asvc文件后,调用编译器(avro-tools.jar)编译生成相关语言(java)的业务类,类中会嵌入JSON schema,然后通过调用业务类对接收到的消息进行序列化。因此,本实施例中kafka系统可根据所述消息整合策略调用预置编译器生成所述目标消息对应的业务类;然后通过所述业务类对所述目标消息进行序列化,以获得序列化后的目标消息数据。
(2)JSON方式:也就是Generic方式,具体可在代码中动态加载schema asvc文件,将FieldName-FieldValue,以键值对“Map<K,V>”的方式存储。
其中,FieldName表征待序列化的目标消息对应的主题名称,FieldValue表征待调用的序列化类。在具体实现中,kafka系统可确定目标消息所属的主题名称,然后通过该键值对“Map<K,V>”映射对应的序列化类,再根据该序列化类对所述目标消息进行序列化,以获得序列化后的目标消息数据。
进一步地,对消息进行筛选,即提取消息中的预设字段或能够表征消息核心含义的关键字段,将消息用筛选出的关键词来表示,这样既可以增加单次发送消息的条数,也可以节省kafka系统自身的存储空间。
考虑到TF-IDF算法简单,易于实现,且不需要训练数据,也不需要构建外部关键词库。本方案可以优先采用TF-IDF来对消息进行关键词的筛选,从而在Kafka最大默认消息容量允许的情况下,发送更多的消息。
具体的,kafka系统可根据所述消息筛选策略对所述目标消息进行分词处理,获得分词后的消息词汇;然后通过TF-IDF算法对所述消息词汇进行关键词筛选,并根据筛选后的关键词生成目标消息数据。
本实施例在接收到消息处理请求时,获取消息处理请求对应的待发送消息集合;然后获取待发送消息集合中各消息的当前数据格式;再根据预先设定的数据格式和当前数据格式对消息进行格式转换,以获得目标消息;最后根据所述目标消息获取目标消息数据,并在不同的目标消息数据之间插入标识符,以获得目标消息队列。本实施例通过对消息数据进行格式转换,能够便于收发双方对消息数据进行解析,同时,本实施例采用在不同的目标消息数据之间插入标识符来构建目标消息队列,能够确保根据标识符来进行消息分批发送且不会导致任何一条消息被间隔的可行性。
参考图4,图4为本发明消息发送方法第三实施例的流程示意图。
基于上述各实施例,在本实施例中,所述步骤S40之后,所述方法还包括:
步骤S50':若否,则在所述目标消息队列中查找所述当前字符对应的上一标识符;
可理解的是,若kafka系统检测到当前字符不属于所述标识符,则表明此时以当前字符为隔断点,将当前字符之前的消息数据进行发送将会导致当前字符对应的消息被分割,导致该条消息被发送时不完整。为克服这种缺陷,本实施例中,kafka系统在检测到当前字符不属于所述标识符时,将在所述目标消息队列中查找所述当前字符对应的上一标识符。
例如,对于目标消息队列“aAAA标识符1bBBB标识符2cCCCC标识符3DdDDDD”,在字符累计数据量达到消息发送门限值时,当前字符为d,该字符d并非标识符1、2和3中的任意一个,此时kafka系统就需要在上述目标消息队列中查找字符d所对应的上一个标识符,即所述标识符3,然后以所述标识符3为隔断点,将标识符3之前的消息数据“aAAA标识符1bBBB标识符2cCCCC”进行发送。这样既可以保证本批次发送的消息数据不会超过消息发送门限值,也能保证所发送消息数据的完整性。
步骤S60':按遍历顺序对所述上一标识符之前的待发送消息进行发送;
在具体实现中,kafka系统在确定当前字符对应的上一标识符后,即可按遍历顺序对上一标识符之前的待发送消息进行发送。其中,所述遍历顺序,即进行遍历操作时的字符读取顺序。
进一步地,考虑到将携带有标识符的消息数据直接发送至消息订阅方在某些场景中可能会引起消息的不准确性问题。因此,在本实施例及上述各实施例中,kafka系统在发送消息数据前,可将消息数据中预先插入的标识符抽取出来之后,再对消息进行发送。
当然,对于以换行符作为标识符的消息发送方案,将无需进行上述标识符的抽取操作,因此本实施例中kafka系统在进行标识符的抽取操作之前,可先判断标识符的类型(即属于换行符还是非换行符),然后在根据判断结果执行相应的操作。
步骤S70':将所述上一标识符的下一字符作为新的遍历起点,返回所述基于所述遍历起点按字符对所述目标消息队列进行遍历,并实时统计每次遍历到的当前字符所对应的字符累计数据量的步骤。
同样的,在对上一标识符之前的待发送消息进行发送之后,kafka系统还会将上一标识符的下一字符作为新的遍历起点,返回上述步骤S30,以循环执行步骤S30-S50(或S50'),直至目标消息队列中的所有消息均被发送完成。
本实施例在当前字符不属于标识符时,在目标消息队列中查找当前字符对应的上一标识符,然后按遍历顺序对上一标识符之前的待发送消息进行发送;再将上一标识符的下一字符作为新的遍历起点,返回执行基于遍历起点按字符对目标消息队列进行遍历,并实时统计每次遍历到的当前字符所对应的字符累计数据量的操作,也能够保证在字符累计数据量达到消息发送门限值,但当前字符不属于标识符的情况下,保证消息的完整发送。
此外,本发明实施例还提出一种存储介质,所述存储介质上存储有消息发送程序,所述消息发送程序被处理器执行时实现如上文所述的消息发送方法的步骤。
参照图5,图5为本发明消息发送装置第一实施例的结构框图。
如图5所示,本发明实施例提出的消息发送装置包括:
消息获取模块501,用于读取目标消息队列,所述目标消息队列中包含若干条以标识符分隔的待发送消息;
字符遍历模块502,用于将所述目标消息队列的初始字符作为遍历起点;
字符统计模块503,用于基于所述遍历起点,按字符对所述目标消息队列进行遍历,并实时统计每次遍历到的当前字符所对应的字符累计数据量;
数据判断模块504,用于在检测到所述字符累计数据量达到消息发送门限值时,判断所述当前字符是否为标识符;
消息发送模块505,用于在所述当前字符属于所述标识符时,按遍历顺序对所述当前字符之前的待发送消息进行发送。
本实施例通过获取包含若干条以标识符分隔的待发送消息构成的目标消息队列;然后将目标消息队列的初始字符作为遍历起点;再基于遍历起点,按字符对目标消息队列进行遍历,并实时统计每次遍历到的当前字符所对应的字符累计数据量;在检测到字符累计数据量达到消息发送门限值时,判断当前字符是否属于所述标识符;若是,则按遍历顺序对当前字符之前的待发送消息进行发送。由于本实施例是将以标识符分隔的待发送消息构成的目标消息队列对应的初始字符作为起点,进行字符的遍历以及字符累计数据量统计,然后在字符累计数据量达到消息发送门限值时,判断当前字符是否属于标识符;若是,则按遍历顺序对当前字符之前的待发送消息进行发送,既能保证单次消息发送量不超过门限值,也能保证每次发送的消息都是完整的,不会出现消息被间断发送的情况。
基于本发明上述消息发送装置第一实施例,提出本发明消息发送装置的第二实施例。
在本实施例中,所述消息获取模块501,还用于在接收到消息处理请求时,获取所述消息处理请求对应的待发送消息集合;获取所述待发送消息集合中各消息的当前数据格式;根据预先设定的数据格式和所述当前数据格式对所述消息进行格式转换,以获得目标消息;根据所述目标消息获取目标消息数据,并在不同的目标消息数据之间插入标识符,以获得目标消息队列。
作为一种实施方式,所述消息获取模块501,还用于确定所述待发送消息集合中各消息对应的消息订阅客户端,并获取所述消息订阅客户端对应的互联网协议地址;根据所述互联网协议地址判断所述消息订阅客户端是否属于预设类型的客户端;若属于,则在预先构建的映射关系中查找所述互联网协议地址对应的目标消息处理策略;根据所述目标消息处理策略对所述目标消息进行处理,获得目标消息数据,所述目标消息数据存储于区块链中。
作为一种实施方式,所述目标消息处理策略中包含消息整合策略和/或消息筛选策略;相应地,所述消息获取模块501,还用于根据所述消息整合策略调用预置编译器生成所述目标消息对应的业务类;通过所述业务类对所述目标消息进行序列化,以获得序列化后的目标消息数据;和/或,根据所述消息筛选策略对所述目标消息进行分词处理,获得分词后的消息词汇;通过TF-IDF算法对所述消息词汇进行关键词筛选,并根据筛选后的关键词生成目标消息数据。
作为一种实施方式,所述消息获取模块501,还用于在接收到消息处理请求时,读取所述消息处理请求中包含的入参数据,所述入参数据包括应用执行路径、消息主题字段以及地址端口字段;根据所述应用执行路径确定待调用的分布式应用,根据所述地址端口字段确定数据缓存对象;根据所述消息主题字段确定待发送的消息数据,并调用所述分布式应用将所述待发送的消息数据发送至所述数据缓存对象中进行缓存,以获得待发送消息集合。
作为一种实施方式,所述消息发送模块505,还用于将所述目标消息队列中剩余的待发送消息作为新的目标消息队列,并返回所述将所述目标消息队列的初始字符作为遍历起点的步骤。
作为一种实施方式,所述消息发送模块505,还用于在所述当前字符不属于所述标识符时,在所述目标消息队列中查找所述当前字符对应的上一标识符;按遍历顺序对所述上一标识符之前的待发送消息进行发送;将所述上一标识符的下一字符作为新的遍历起点,执行所述基于所述遍历起点按字符对所述目标消息队列进行遍历,并实时统计每次遍历到的当前字符所对应的字符累计数据量的操作。
本发明消息发送装置的其他实施例或具体实现方式可参照上述各方法实施例,此处不再赘述。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
本发明所指区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层等。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如只读存储器/随机存取存储器、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种消息发送方法,其特征在于,所述方法包括:
读取目标消息队列,所述目标消息队列中包含若干条以标识符分隔的待发送消息;
将所述目标消息队列的初始字符作为遍历起点;
基于所述遍历起点,按字符对所述目标消息队列进行遍历,并实时统计每次遍历到的当前字符所对应的字符累计数据量;
在检测到所述字符累计数据量达到消息发送门限值时,判断所述当前字符是否属于所述标识符;
若是,则按遍历顺序对所述当前字符之前的待发送消息进行发送。
2.如权利要求1所述的方法,其特征在于,所述读取目标消息队列,所述目标消息队列中包含若干条以标识符分隔的待发送消息的步骤之前,所述方法还包括:
在接收到消息处理请求时,获取所述消息处理请求对应的待发送消息集合;
获取所述待发送消息集合中各消息的当前数据格式;
根据预先设定的数据格式和所述当前数据格式对所述消息进行格式转换,以获得目标消息;
根据所述目标消息获取目标消息数据,并在不同的目标消息数据之间插入标识符,以获得目标消息队列。
3.如权利要求2所述的方法,其特征在于,所述根据所述目标消息获取目标消息数据的步骤,包括:
确定所述待发送消息集合中各消息对应的消息订阅客户端,并获取所述消息订阅客户端对应的互联网协议地址;
根据所述互联网协议地址判断所述消息订阅客户端是否属于预设类型的客户端;
若属于,则在预先构建的映射关系中查找所述互联网协议地址对应的目标消息处理策略;
根据所述目标消息处理策略对所述目标消息进行处理,获得目标消息数据,所述目标消息数据存储于区块链中。
4.如权利要求3所述的方法,其特征在于,所述目标消息处理策略中包含消息整合策略和/或消息筛选策略;
所述根据所述目标消息处理策略对所述目标消息进行处理,获得目标消息数据的步骤,包括:
根据所述消息整合策略调用预置编译器生成所述目标消息对应的业务类;
通过所述业务类对所述目标消息进行序列化,以获得序列化后的目标消息数据;
和/或,根据所述消息筛选策略对所述目标消息进行分词处理,获得分词后的消息词汇;
通过TF-IDF算法对所述消息词汇进行关键词筛选,并根据筛选后的关键词生成目标消息数据。
5.如权利要求2所述的方法,其特征在于,所述在接收到消息处理请求时,获取所述消息处理请求对应的待发送消息集合的步骤,包括:
在接收到消息处理请求时,读取所述消息处理请求中包含的入参数据,所述入参数据包括应用执行路径、消息主题字段以及地址端口字段;
根据所述应用执行路径确定待调用的分布式应用,根据所述地址端口字段确定数据缓存对象;
根据所述消息主题字段确定待发送的消息数据,并调用所述分布式应用将所述待发送的消息数据发送至所述数据缓存对象中进行缓存,以获得待发送消息集合。
6.如权利要求1所述的方法,其特征在于,所述若是,则按遍历顺序对所述当前字符之前的待发送消息进行发送的步骤之后,所述方法还包括:
将所述目标消息队列中剩余的待发送消息作为新的目标消息队列,并返回所述将所述目标消息队列的初始字符作为遍历起点的步骤。
7.如权利要求1至6任一项所述的方法,其特征在于,所述在检测到所述字符累计数据量达到消息发送门限值时,判断所述当前字符是否属于所述标识符的步骤之后,所述方法还包括:
若否,则在所述目标消息队列中查找所述当前字符对应的上一标识符;
按遍历顺序对所述上一标识符之前的待发送消息进行发送;
将所述上一标识符的下一字符作为新的遍历起点,返回所述基于所述遍历起点按字符对所述目标消息队列进行遍历,并实时统计每次遍历到的当前字符所对应的字符累计数据量的步骤。
8.一种消息发送装置,其特征在于,所述装置包括:
消息获取模块,用于读取目标消息队列,所述目标消息队列中包含若干条以标识符分隔的待发送消息;
字符遍历模块,用于将所述目标消息队列的初始字符作为遍历起点;
字符统计模块,用于基于所述遍历起点,按字符对所述目标消息队列进行遍历,并实时统计每次遍历到的当前字符所对应的字符累计数据量;
数据判断模块,用于在检测到所述字符累计数据量达到消息发送门限值时,判断所述当前字符是否为标识符;
消息发送模块,用于在所述当前字符属于所述标识符时,按遍历顺序对所述当前字符之前的待发送消息进行发送。
9.一种消息发送设备,其特征在于,所述设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的消息发送程序,所述消息发送程序配置为实现如权利要求1至7中任一项所述的消息发送方法的步骤。
10.一种存储介质,其特征在于,所述存储介质上存储有消息发送程序,所述消息发送程序被处理器执行时实现如权利要求1至7任一项所述的消息发送方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010471136.6A CN111817984B (zh) | 2020-05-28 | 2020-05-28 | 消息发送方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010471136.6A CN111817984B (zh) | 2020-05-28 | 2020-05-28 | 消息发送方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111817984A true CN111817984A (zh) | 2020-10-23 |
CN111817984B CN111817984B (zh) | 2023-06-20 |
Family
ID=72848583
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010471136.6A Active CN111817984B (zh) | 2020-05-28 | 2020-05-28 | 消息发送方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111817984B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112685426A (zh) * | 2021-01-21 | 2021-04-20 | 浪潮云信息技术股份公司 | 一种基于NiFi的Kafka消费NewSQL CDC流数据转换方法 |
CN115134320A (zh) * | 2022-08-25 | 2022-09-30 | 四川汉唐云分布式存储技术有限公司 | 一种基于消息分发确定时序的交易系统 |
CN116170385A (zh) * | 2023-04-21 | 2023-05-26 | 四川汉科计算机信息技术有限公司 | 一种网关信息转发系统及方法、设备、存储介质 |
CN116264565A (zh) * | 2023-05-16 | 2023-06-16 | 山东省邱集煤矿有限公司 | 一种基于语义拆分的煤矿井下数据传输方法、装置及设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009074159A1 (en) * | 2007-12-10 | 2009-06-18 | Jacques Valere Vandaele | Method for associating a slogan to a message exchanged between two telephone terminals |
CN101888366A (zh) * | 2009-05-14 | 2010-11-17 | 灰熊(北京)科技有限公司 | 一种处理tcp不规则文本消息的方法 |
US20150074814A1 (en) * | 2013-09-10 | 2015-03-12 | Crimsonlogic Pte Ltd | Method and system for embedding data in a text document |
CN107734180A (zh) * | 2017-10-30 | 2018-02-23 | 江西博瑞彤芸科技有限公司 | 信息处理方法 |
CN108897607A (zh) * | 2018-06-05 | 2018-11-27 | 中国平安人寿保险股份有限公司 | 消息处理方法、装置、电子设备及存储介质 |
US20200042613A1 (en) * | 2018-08-03 | 2020-02-06 | Asapp, Inc. | Processing an incomplete message with a neural network to generate suggested messages |
-
2020
- 2020-05-28 CN CN202010471136.6A patent/CN111817984B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009074159A1 (en) * | 2007-12-10 | 2009-06-18 | Jacques Valere Vandaele | Method for associating a slogan to a message exchanged between two telephone terminals |
CN101888366A (zh) * | 2009-05-14 | 2010-11-17 | 灰熊(北京)科技有限公司 | 一种处理tcp不规则文本消息的方法 |
US20150074814A1 (en) * | 2013-09-10 | 2015-03-12 | Crimsonlogic Pte Ltd | Method and system for embedding data in a text document |
CN107734180A (zh) * | 2017-10-30 | 2018-02-23 | 江西博瑞彤芸科技有限公司 | 信息处理方法 |
CN108897607A (zh) * | 2018-06-05 | 2018-11-27 | 中国平安人寿保险股份有限公司 | 消息处理方法、装置、电子设备及存储介质 |
US20200042613A1 (en) * | 2018-08-03 | 2020-02-06 | Asapp, Inc. | Processing an incomplete message with a neural network to generate suggested messages |
Non-Patent Citations (1)
Title |
---|
付戈;张欣华;李超;: "面向多应用多租户的消息数据订阅关键技术研究", 信息网络安全, no. 11 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112685426A (zh) * | 2021-01-21 | 2021-04-20 | 浪潮云信息技术股份公司 | 一种基于NiFi的Kafka消费NewSQL CDC流数据转换方法 |
CN115134320A (zh) * | 2022-08-25 | 2022-09-30 | 四川汉唐云分布式存储技术有限公司 | 一种基于消息分发确定时序的交易系统 |
CN115134320B (zh) * | 2022-08-25 | 2023-01-03 | 四川汉唐云分布式存储技术有限公司 | 一种基于消息分发确定时序的交易系统 |
CN116170385A (zh) * | 2023-04-21 | 2023-05-26 | 四川汉科计算机信息技术有限公司 | 一种网关信息转发系统及方法、设备、存储介质 |
CN116264565A (zh) * | 2023-05-16 | 2023-06-16 | 山东省邱集煤矿有限公司 | 一种基于语义拆分的煤矿井下数据传输方法、装置及设备 |
Also Published As
Publication number | Publication date |
---|---|
CN111817984B (zh) | 2023-06-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111817984B (zh) | 消息发送方法、装置、设备及存储介质 | |
US20040019612A1 (en) | System and method for transmitting data content in a computer network | |
CN112162965B (zh) | 一种日志数据处理的方法、装置、计算机设备及存储介质 | |
US8799923B2 (en) | Determining relationship data associated with application programs | |
CN109829287A (zh) | Api接口权限访问方法、设备、存储介质及装置 | |
CN108846100A (zh) | 快速搜索寄宿应用的方法及设备 | |
CN112564988A (zh) | 告警处理方法、装置及电子设备 | |
CN108512898B (zh) | 文件推送方法、装置、计算机设备和存储介质 | |
CN113452780B (zh) | 针对客户端的访问请求处理方法、装置、设备及介质 | |
CN113382282B (zh) | 一种页面资源访问方法、装置、电子设备和存储介质 | |
CN111770002A (zh) | 测试数据转发控制方法、装置、可读存储介质和电子设备 | |
CN109977677A (zh) | 漏洞信息收集方法、装置、设备及可读存储介质 | |
CN114153703A (zh) | 微服务的异常定位方法、装置、电子设备和程序产品 | |
US20080208960A1 (en) | Directory server plug-in call ordering | |
US20070027918A1 (en) | Mail processing server, mail processing method, and mail processing program | |
US20030162559A1 (en) | Mobile communications terminal, information transmitting system and information receiving method | |
CN112000618B (zh) | 集群节点的文件变动管理方法、装置、设备及存储介质 | |
CN111488286B (zh) | 一种Android模块独立开发的方法及装置 | |
CN114201701A (zh) | 运行环境的识别方法及装置、存储介质、服务端、客户端 | |
CN113672248A (zh) | 一种补丁获取方法、装置、服务端及存储介质 | |
CN112861054A (zh) | 网页处理方法、装置、计算机可读存储介质及电子设备 | |
CN112800194A (zh) | 一种接口变更识别方法、装置、设备及存储介质 | |
CN114595457A (zh) | 任务处理方法、装置、计算机设备和存储介质 | |
CN113672281A (zh) | 代码差异查询方法、装置、设备及存储介质 | |
CN111782428B (zh) | 数据调用系统以及方法 |
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 |