CN108965355A - 用于数据传输的方法、装置及计算机可读存储介质 - Google Patents
用于数据传输的方法、装置及计算机可读存储介质 Download PDFInfo
- Publication number
- CN108965355A CN108965355A CN201710353371.1A CN201710353371A CN108965355A CN 108965355 A CN108965355 A CN 108965355A CN 201710353371 A CN201710353371 A CN 201710353371A CN 108965355 A CN108965355 A CN 108965355A
- Authority
- CN
- China
- Prior art keywords
- message data
- message
- redis
- producer
- agent
- 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
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/2866—Architectures; Arrangements
- H04L67/2876—Pairs of inter-processing entities at each side of the network, e.g. split proxies
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/14—Session management
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
Abstract
本发明实施例,生产者代理agent从第一进程间消息队列中读取生产者发送的消息数据;所述生产者agent将所述消息数据发送到redis;消费者agent从所述redis中读取消息数据,并将所述消息数据写入到第二进程间消息队列,以使消费者从所述第二进程间消息队列读取到所述消息数据。一方面,生产者和消费者不需要网络交互,另一方面,基于redis实现了高性能、高并发、高可用的消息中间件。
Description
技术领域
本发明涉及计算机技术领域,具体而言,涉及一种用于数据传输的方法、装置及计算机可读存储介质。
背景技术
消息中间件是为分布式应用之间提供高效、可靠、平台无关的数据传输服务的一种技术,通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。
目前开源的分布式消息中间件有很多,比如ActiveMQ、RabbitMQ、RocketMQ、ZeroMQ、Kafka等等,它们各有特点,各有自己的独特设计,并选用一种开发语言进行开发实现。
图1是根据一示例性实施例示出的消息中间件的示意图。消息生产者和消息消费者通过网络和消息服务器交互。一方面,生产者和消费者通过网络和消息中间件交互,性能受网络交互的限制,另一方面,消息服务器需要实现网络io处理、异步事件处理、消息队列、消息落地(持久化)、消息去重(去除重复消息)、消息确认与删除、消息订阅管理及消息主备同步等处理,实现复杂,开发成本巨大。
因此,需要一种新的用于数据传输的方法、装置及计算机可读存储介质。
在所述背景技术部分公开的上述信息仅用于加强对本发明的背景的理解,因此它可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
有鉴于此,本发明提供一种新的用于数据传输的方法、装置及计算机可读存储介质,生产者和消费者不需要网络交互,基于redis实现一个高性能、高并发、高可用、完整的消息中间件。
本发明的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本发明的实践而习得。
根据本发明的第一方面,提供一种用于数据传输的方法,所述方法包括:
生产者代理agent从第一进程间消息队列中读取生产者写入的消息数据;
所述生产者agent将所述消息数据发送到redis;
消费者agent从所述redis中读取消息数据,并将所述消息数据写入到第二进程间消息队列,以使消费者从所述第二进程间消息队列读取到所述消息数据。
根据一些实施例,所述消息数据包括主题标识;所述生产者agent将所述消息数据发送到redis包括:
所述生产者agent将具有相同主题标识的消息数据发送到对应的redis。
根据一些实施例,redis以列表的数据形式存储消息数据;
所述生产者agent将具有相同主题标识的消息数据发送到对应的redis,包括:
所述生产者agent将序列化的消息数据发送到与所述消息数据的主题标识对应的redis中。
根据一些实施例,所述方法还包括:
在第一哈希表中记录已经发送到redis中的消息数据的主题标识、消息标识以及发送所述消息数据的生产者标识三者的对应关系;
所述生产者agent将所述消息数据发送到redis,包括:
所述生产者agent在所述第一哈希表中查找是否存在所述消息数据的主题标识、消息标识以及发送所述消息数据的生产者标识三者的对应关系;
如果是,所述生产者agent丢弃所述消息数据;
如果否,所述生产者agent将所述消息数据发送到redis,并更新所述第一哈希表。
根据一些实施例,所述消费者agent从所述redis中读取消息数据,包括:
所述消费者agent遍历redis,查找到与消费者订阅的消息数据的主题标识对应的redis,从redis中读取消息数据。
根据一些实施例,所述方法还包括:
在有序集合中记录消息数据的主题标识、订阅所述消息数据的主题标识的消费者标识以及所述消费者标识对应的待消费的消息标识;
所述从redis中读取消息数据,包括:
所述消费者agent根据所述有序集合,从所述列表中读取消息数据。
根据一些实施例,所述方法还包括:
在第二哈希表中记录各消费者标识、各消费者已经读取的消息数据的消息标识、以及各消费者标识上次读取的消息标识三者的对应关系;
所述消费者agent比较本次读取的消息数据的消息标识与上次读取的消息标识是否一致;
如果一致,所述生产者agent丢弃所述消息数据;
如果不一致,所述生产者agent将所述消息数据写入到第二进程间消息队列。
根据一些实施例,所述方法还包括:
如果所述消费者agent读取消息数据超时,所述消费者agent根据所述第二哈希表重新读取消息数据。
根据本发明的第二方面,提供一种用于数据传输的装置,所述装置包括:
读取模块,用于从第一进程间消息队列中读取生产者发送的消息数据;
发送模块,用于将所述消息数据发送到redis;
写入模块,用于从所述redis中读取消息数据,并将所述消息数据写入到第二进程间消息队列,以使消费者从所述第二进程间消息队列读取到所述消息数据。
根据一些实施例,所述消息数据包括主题标识;所述发送模块,配置为将具有相同主题标识的消息数据发送到对应的redis。
根据一些实施例,所述装置还包括:存储模块,用于以列表的数据形式存储消息数据;
所述发送模块,配置为将序列化的消息数据发送到与所述消息数据的主题标识对应的redis中。
根据一些实施例,所述装置还包括:
记录模块,用于在第一哈希表中记录已经发送到redis中的消息数据的主题标识、消息标识以及发送所述消息数据的生产者标识三者的对应关系;
所述发送模块包括:
查找单元,用于在所述第一哈希表中查找是否存在所述消息数据的主题标识、消息标识以及发送所述消息数据的生产者标识三者的对应关系;
丢弃单元,用于在所述查找单元查找到存在所述消息数据的主题标识、消息标识以及发送所述消息数据的生产者标识三者的对应关系时,丢弃所述消息数据;
发送单元,用于在所述查找单元没有查找到所述消息数据的主题标识、消息标识以及发送所述消息数据的生产者标识三者的对应关系时,将所述消息数据发送到redis,并更新哈希表。
根据本发明的第三方面,提供一种用于数据传输的装置,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现第一方面中的方法。
根据本发明的第四方面,提供一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现第一方面中的方法。
本发明实施例中,生产者代理agent从第一进程间消息队列中读取生产者发送的消息数据;所述生产者agent将所述消息数据发送到redis;消费者agent从所述redis中读取消息数据,并将所述消息数据写入到第二进程间消息队列,以使消费者从所述第二进程间消息队列读取到所述消息数据。一方面,生产者和消费者不需要网络交互,另一方面,基于redis实现了高性能、高并发、高可用的消息中间件。
附图说明
通过参照附图详细描述其示例实施例,本发明的上述和其它目标、特征及优点将变得更加显而易见。
图1是根据一示例性实施例示出的消息中间件的示意图。
图2是根据一示例性实施例示出的一种用于数据传输的方法的流程图。
图3是根据一示例性实施例示出以列表类型存储的消息数据。
图4示意性示出了本发明实施例提供的一种第一哈希表。
图5示意性示出了本发明实施例提供的一种有序集合。
图6示意性示出了本发明实施例提供的一种第二哈希表。
图7是根据一示例性实施例示出的一种用于数据传输的装置的结构图。
图8是根据一示例性实施例示出的一种适于用来实现本申请实施例的装置的计算机系统800的结构示意图。
具体实施方式
现在将参考附图更全面地描述示例实施例。然而,示例实施例能够以多种形式实施,且不应被理解为限于在此阐述的实施例;相反,提供这些实施例使得本发明将全面和完整,并将示例实施例的构思全面地传达给本领域的技术人员。在图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本发明的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本发明的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本发明的各方面。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
图2是根据一示例性实施例示出的一种用于数据传输的方法的流程图。
如图2所示,在S210中,生产者代理agent从第一进程间消息队列中读取生产者写入的消息数据。
根据示例实施例,第一进程间消息队列是生产者本地的一个进程间消息队列,可以缩写成ipc-msgq,对于生产者而言,在本地ipc-msgq写入消息数据后,已经完成了消息数据的传输,后续的消息数据的处理由生产者代理agent进行,生产者无需等待消息数据的处理结果,从而提高消息生产者的消息数据的处理效率。
在S220中,生产者agent将上述消息数据发送到redis。
根据示例实施例,消息数据可以包括主题标识。生产者agent从第一进程间消息队列读取消息数据后,将具有相同主题标识的消息数据发送到对应的redis。
一般情况下,生产者agent将具有相同主题标识的消息数据发送到对应的一个redis中,如果该redis实例异常,生产者agent自动将消息数据转发给下一个redis。
redis是一个key-value存储系统。包括多种数据类型,如字符串string、列表list、集合set、有序集合sorted set和哈希表hash等。redis支持各种不同方式的排序。
本发明实施例中,redis以列表的数据形式存储消息数据,其中,列表的主键key存储消息数据的主题标识,列表的值value存储序列化的消息数据。生产者agent将消息数据发送到对应的redis时,通过将序列化的消息数据发送到与该消息数据的主题标识对应的redis中,详细来说,将序列化的消息数据发送到与该消息数据的主题标识对应的redis的列表的value中。例如,key名可参考使用T_[topicid]_MSG,其中[topicid]替换为消息数据的主题标识,value是序列化好的消息数据列表,新增消息时从右侧插入,因此消息标号是从最左侧0开始逐一递增。图3是根据一示例性实施例示出以列表类型存储的消息数据。
需要说明的是,Redis在内存中保存消息数据的列表,并通过其AOF机制将消息数据落地到磁盘,再通过其主备同步机制将数据同步给备redis。其中,AOF是Append OnlyFile的缩写,是Redis提供的一种记录Redis操作的持久化方案。
需要说明的是,生产者agent可以批量的将消息数据发送到对应的redis。批量发送消息数据可以通过执行redis命令RPUSH key value[value...]将一个或多个值value(序列化好的消息数据)插入到列表key的表尾(最右侧)实现。
在批量发送消息数据时,初始配置一次发送消息数据的批量最小值和最大值。从批量最小值开始,每次批量消息发送成功则批量值增加固定值,直至增加到批量最大值,每次批量消息发送失败则批量值减半或减少固定值,直至减少到批量最小值。
根据示例实施例,可以在第一哈希表中记录已经发送到redis中的消息数据的主题标识、消息标识以及发送所述消息数据的生产者标识三者的对应关系。
例如,可以在第一哈希表key中记录已经发送到redis中的消息数据的主题标识,第一哈希表的域中记录发送所述消息数据的生产者标识,value记录已发送到redis中的消息数据的消息标识。从而记录发送到redis中的每个消息数据的标识、发送该消息数据的生产者标识以及消息标识的对应关系。
生产者agent在将消息数据发送到redis时,在第一哈希表中查找是否存在所述消息数据的主题标识、消息标识以及发送所述消息数据的生产者标识三者的对应关系,如果是,所述生产者agent丢弃所述消息数据,如果否,所述生产者agent将所述消息数据发送到redis,并更新第一哈希表。
图4示意性示出了本发明实施例提供的一种第一哈希表。如图4所示,第一哈希表key中记录已经发送到redis中的消息数据的主题标识,key名为T_[topicid]_SEND_MSGID,其中[topicid]为消息的主题标识,此第一哈希表的域中记录发送消息数据的生产者标识分别为ip1和ip2,value记录标识为ip1的生产者发送的消息数据的消息标识msgid1,以及标识为ip2的生产者发送的消息数据的消息标识msgid2。当生产者agent在将消息数据发送到redis时,在第一哈希表中查找是否记录了该消息数据的主题标识、消息标识以及发送该消息数据的生产者标识的对应关系,如果是,则将该消息数据的丢弃,如果否,则将该消息数据发送到redis,并根据该消息数据的主题标识、消息标识以及发送该消息数据的生产者标识,更新第一哈希表。
在S230中,消费者agent从redis中读取消息数据,并将所述消息数据写入到第二进程间消息队列,以使消费者从第二进程间消息队列读取到所述消息数据。
需要说明的是,第二进程间消息队列是消费者本地的一个进程间消息队列,可以缩写成ipc-msgq,对于消费者而言,在本地ipc-msgq写入订阅的消息数据后,由消费者代理agent读取消息数据,从而提高消息消费者的消息数据的处理效率。
根据示例实施例,消费者agent获取到消费者订阅的消息数据的主题标识后,遍历redis,查找到与订阅的消息数据的主题标识对应的redis,从该redis中读取消息数据。
根据示例实施例,可以在有序集合中记录消息数据的主题标识、订阅所述消息数据的主题标识的消费者标识以及所述消费者标识对应的待消费的消息标识。
例如,在主键key中记录消息数据的主题标识,在有序集合的值value中记录订阅所述主题标识对应的消费者标识,在value的得分score中记录消费者标识对应的待消费的消息标识。
当从redis中读取消息数据时,消费者agent根据该有序集合,从所述列表中读取消息数据。
例如,消费者agent根据有序集合value的score,获取到待消费的消息数据的消息标识,从列表中读取所述消息标识对应的消息数据。
图5示意性示出了本发明实施例提供的一种有序集合。如图5所示,key名可参考使用T_[topicid]_C,其中[topicid]为消息的主题id,value是订阅了此topicid的消费者标识,value的score值用于存储对应消费者标识的待消费的消息标识。根据该有序集合可知,该主题id[topicid]被两个消费者id分别是c1、c2订阅,其中c1待消费的消息标识是2,c2待消费的消息标识是4。
需要说明的是,消费者agent可以批量的从redis中读取消息数据。批量读取消息数据可以通过执行redis命令LRANGE key start stop从列表key T_[topicid]_MSG中取出指定区间的消息,区间以下标参数start和stop指定。起始下标参数start通过执行redis命令ZSCORE key member从有序集合key:T_[topicid]_C获取相应消费者标识的score值得到,结束下标参数stop则通过start加批量值得到。
在批量读取消息数据时,初始配置一个获取消息的批量最小值和最大值。从批量最小值开始,每次批量消息读取成功则批量值增加固定值,直至增加到批量最大值,每次批量消息读取失败则批量值减半或减少固定值,直至减少到批量最小值。
例如,批量读取消息数据时,首先执行redis命令LRANGE从列表key:T_[topicid]_MSG中取出指定区间的消息数据,然后执行redis命令ZRANGE key start stop WITHSCORES从有序集合key:T_[topicid]_C中获取对应topicid的最小score值,即订阅此topicid的所有消费者标识待消费的消息数据的最小标识,记为MsgMinIndex。进一步,执行redis命令LTRIM key start stop从列表key:T_[topicid]_MSG中删除指定区间的消息数据,其中下标参数start是0,stop是MsgMinIndex减1。最后,执行redis命令ZINCRBY key incrementmember更新有序集合key:T_[topicid]_C中各消费者标识待消费的消息数据的最小标识,其中increment是MsgMinIndex的负数,member是订阅此topicid的消费者标识。
上述实施例中,实现了动态批量生产和消费消息数据,提高了消息数据的处理效率。
根据示例实施例,可以在第二哈希表中记录各消费者标识、各消费者已经读取的消息数据的消息标识、以及各消费者标识上次读取的消息标识三者的对应关系。
例如,可以在第二哈希表的主键key中记录各消费者标识已经读取的消息数据的消息标识,哈希表的域中记录已经读取消息数据的消费者标识以及该消费者本次读取的消息数据的消息标识(批量读取时,域中记录“消费者标识+消息数据的起止标识),value中记录上次读取的消息标识。
消费者agent比较本次读取的消息数据的消息标识与上次读取的消息标识是否一致,如果一致,所述生产者agent丢弃所述消息数据,如果不一致,所述生产者agent将所述消息数据写入到第二进程间消息队列。
需要说明的是,如果所述消费者agent读取消息数据超时,所述消费者agent根据第二哈希表重新读取消息数据。例如,根据第二哈希表获取待重新读取的消息数据的消息标识(批量读取时,根据第二哈希表获取待重新读取的消息数据的起止消息标识),从列表中重新读取所述消息标识对应的消息数据。
图6示意性示出了本发明实施例提供的一种第二哈希表。如图6所示,第二哈希表的key名可参考使用T_[topicid]_RECV_MSGID,其中[topicid]为消息的主题id,此第二哈希表key的数据存放各消费者IP已从redis读取的消息数据返回的消息标识,其中第二哈希表的域存放“消费者标识+消费者标识+START|END”(START是批量读取消息数据时的起始消息标号,END是结束消息标号),值存放上次读取已返回的消息标号。消费者agent每次从redis读取消息后都在本地暂存已读取消息数据的消息标识,然后比较本次读取的消息数据的消息标识与后上次读取的消息标识是否相等,如果相等则认为此消息数据是重复消息数据,做丢弃处理,如果不等,则认为该消息数据是新消息数据,写入到ipc-msgq。
消费者agent如果从redis读取消息数据超时,则执行重取操作。重取时从哈希表key:T_[topicid]_RECV_MSGID中获取待重新读取的消息数据的起止消息标识,然后从列表key:T_[topicid]_MSG中指定区间读取消息数据。
需注意,做丢弃处理时,需要同步更新T_[topicid]_RECV_MSGID中记录的消息标识。
上述实施例中,实现了消息数据的去重和防止丢失,进一步增加了消息传输的准确性。
本发明实施例,生产者代理agent从第一进程间消息队列中读取生产者发送的消息数据;所述生产者agent将所述消息数据发送到redis;消费者agent从所述redis中读取消息数据,并将所述消息数据写入到第二进程间消息队列,以使消费者从所述第二进程间消息队列读取到所述消息数据。一方面,生产者和消费者不需要网络交互,另一方面,基于redis实现了高性能、高并发、高可用的消息中间件。
图7是根据一示例性实施例示出的一种用于数据传输的装置的结构图。
如图7所示,所述装置700包括:
读取模块710,用于从第一进程间消息队列中读取生产者发送的消息数据;
发送模块720,用于将所述消息数据发送到redis;
写入模块730,用于从所述redis中读取消息数据,并将所述消息数据写入到第二进程间消息队列,以使消费者从所述第二进程间消息队列读取到所述消息数据。
根据一些实施例,所述消息数据包括主题标识;所述发送模块720,配置为将具有相同主题标识的消息数据发送到对应的redis。
根据一些实施例,所述装置还包括:存储模块740,用于以列表的数据形式存储消息数据;
所述发送模块720,配置为将序列化的消息数据发送到与所述消息数据的主题标识对应的redis中。
根据一些实施例,所述装置还包括:
记录模块750,在哈希表中记录已经发送到redis中的消息数据的主题标识、消息标识以及发送所述消息数据的生产者标识三者的对应关系;
所述发送模块720包括:
查找单元722,用于在哈希表中查找是否存在所述消息数据的主题标识、消息标识以及发送所述消息数据的生产者标识三者的对应关系;
丢弃单元724,用于在所述查找单元722查找到存在所述消息数据的主题标识、消息标识以及发送所述消息数据的生产者标识三者的对应关系时,丢弃所述消息数据;
发送单元726,用于在所述查找单元722没有查找到所述消息数据的主题标识、消息标识以及发送所述消息数据的生产者标识三者的对应关系时,将所述消息数据发送到redis,并更新哈希表。
本发明实施例,生产者代理agent从第一进程间消息队列中读取生产者发送的消息数据;所述生产者agent将所述消息数据发送到redis;消费者agent从所述redis中读取消息数据,并将所述消息数据写入到第二进程间消息队列,以使消费者从所述第二进程间消息队列读取到所述消息数据。一方面,生产者和消费者不需要网络交互,另一方面,基于redis实现了高性能、高并发、高可用的消息中间件。
图8是根据一示例性实施例示出的一种适于用来实现本申请实施例的装置的计算机系统800的结构示意图。图8示出的终端设备仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图8所示,计算机系统800包括中央处理单元(CPU)801,其可以根据存储在只读存储器(ROM)802中的程序或者从存储部分808加载到随机访问存储器(RAM)803中的程序而执行各种适当的动作和处理。在RAM 803中,还存储有系统800操作所需的各种程序和数据。CPU 801、ROM 802以及RAM 803通过总线804彼此相连。输入/输出(I/O)接口805也连接至总线804。
以下部件连接至I/O接口805:包括键盘、鼠标等的输入部分806;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分807;包括硬盘等的存储部分808;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分809。通信部分809经由诸如因特网的网络执行通信处理。驱动器810也根据需要连接至I/O接口805。可拆卸介质811,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器810上,以便于从其上读出的计算机程序根据需要被安装入存储部分808。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分809从网络上被下载和安装,和/或从可拆卸介质811被安装。在该计算机程序被中央处理单元(CPU)801执行时,执行本申请的系统中限定的上述功能。
需要说明的是,本申请所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元也可以设置在处理器中,例如,可以描述为:一种处理器包括读取模块、发送模块、写入模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定。
作为另一方面,本申请还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备可实现:生产者代理agent从第一进程间消息队列中读取生产者写入的消息数据;所述生产者agent将所述消息数据发送到redis;消费者agent从所述redis中读取消息数据,并将所述消息数据写入到第二进程间消息队列,以使消费者从所述第二进程间消息队列读取到所述消息数据。
本发明实施例,生产者代理agent从第一进程间消息队列中读取生产者发送的消息数据;所述生产者agent将所述消息数据发送到redis;消费者agent从所述redis中读取消息数据,并将所述消息数据写入到第二进程间消息队列,以使消费者从所述第二进程间消息队列读取到所述消息数据。一方面,生产者和消费者不需要网络交互,另一方面,基于redis实现了高性能、高并发、高可用的消息中间件。
以上具体示出和描述了本发明的示例性实施例。应可理解的是,本发明不限于这里描述的详细结构、设置方式或实现方法;相反,本发明意图涵盖包含在所附权利要求的精神和范围内的各种修改和等效设置。
Claims (14)
1.一种用于数据传输的方法,其特征在于,所述方法包括:
生产者代理agent从第一进程间消息队列中读取生产者写入的消息数据;
所述生产者agent将所述消息数据发送到redis;
消费者agent从所述redis中读取消息数据,并将所述消息数据写入到第二进程间消息队列,以使消费者从所述第二进程间消息队列读取到所述消息数据。
2.如权利要求1所述的方法,其特征在于,所述消息数据包括主题标识;所述生产者agent将所述消息数据发送到redis包括:
所述生产者agent将具有相同主题标识的消息数据发送到对应的redis。
3.如权利要求2所述的方法,其特征在于,redis以列表的数据形式存储消息数据;
所述生产者agent将具有相同主题标识的消息数据发送到对应的redis,包括:
所述生产者agent将序列化的消息数据发送到与所述消息数据的主题标识对应的redis中。
4.如权利要求1所述的方法,其特征在于,所述方法还包括:
在第一哈希表中记录已经发送到redis中的消息数据的主题标识、消息标识以及发送所述消息数据的生产者标识三者的对应关系;
所述生产者agent将所述消息数据发送到redis,包括:
所述生产者agent在所述第一哈希表中查找是否存在所述消息数据的主题标识、消息标识以及发送所述消息数据的生产者标识三者的对应关系;
如果是,所述生产者agent丢弃所述消息数据;
如果否,所述生产者agent将所述消息数据发送到redis,并更新所述第一哈希表。
5.如权利要求3所述的方法,其特征在于,所述消费者agent从所述redis中读取消息数据,包括:
所述消费者agent遍历redis,查找到与消费者订阅的消息数据的主题标识对应的redis,从redis中读取消息数据。
6.如权利要求5所述的方法,其特征在于,所述方法还包括:
在有序集合中记录消息数据的主题标识、订阅所述消息数据的主题标识的消费者标识以及所述消费者标识对应的待消费的消息标识;
所述从redis中读取消息数据,包括:
所述消费者agent根据所述有序集合,从所述列表中读取消息数据。
7.如权利要求6所述的方法,其特征在于,所述方法还包括:
在第二哈希表中记录各消费者标识、各消费者已经读取的消息数据的消息标识、以及各消费者标识上次读取的消息标识三者的对应关系;
所述消费者agent比较本次读取的消息数据的消息标识与上次读取的消息标识是否一致;
如果一致,所述生产者agent丢弃所述消息数据;
如果不一致,所述生产者agent将所述消息数据写入到第二进程间消息队列。
8.如权利要求7所述的方法,其特征在于,所述方法还包括:
如果所述消费者agent读取消息数据超时,所述消费者agent根据所述第二哈希表重新读取消息数据。
9.一种用于数据传输的装置,其特征在于,所述装置包括:
读取模块,用于从第一进程间消息队列中读取生产者发送的消息数据;
发送模块,用于将所述消息数据发送到redis;
写入模块,用于从所述redis中读取消息数据,并将所述消息数据写入到第二进程间消息队列,以使消费者从所述第二进程间消息队列读取到所述消息数据。
10.如权利要求9所述的装置,其特征在于,所述消息数据包括主题标识;所述发送模块,配置为将具有相同主题标识的消息数据发送到对应的redis。
11.如权利要求10所述的装置,其特征在于,所述装置还包括:存储模块,用于以列表的数据形式存储消息数据;
所述发送模块,配置为将序列化的消息数据发送到与所述消息数据的主题标识对应的redis中。
12.如权利要求9所述的装置,其特征在于,所述装置还包括:
记录模块,用于在第一哈希表中记录已经发送到redis中的消息数据的主题标识、消息标识以及发送所述消息数据的生产者标识三者的对应关系;
所述发送模块包括:
查找单元,用于在所述第一哈希表中查找是否存在所述消息数据的主题标识、消息标识以及发送所述消息数据的生产者标识三者的对应关系;
丢弃单元,用于在所述查找单元查找到存在所述消息数据的主题标识、消息标识以及发送所述消息数据的生产者标识三者的对应关系时,丢弃所述消息数据;
发送单元,用于在所述查找单元没有查找到所述消息数据的主题标识、消息标识以及发送所述消息数据的生产者标识三者的对应关系时,将所述消息数据发送到redis,并更新哈希表。
13.一种用于数据传输的装置,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-8中任一所述的方法。
14.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-8中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710353371.1A CN108965355B (zh) | 2017-05-18 | 2017-05-18 | 用于数据传输的方法、装置及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710353371.1A CN108965355B (zh) | 2017-05-18 | 2017-05-18 | 用于数据传输的方法、装置及计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108965355A true CN108965355A (zh) | 2018-12-07 |
CN108965355B CN108965355B (zh) | 2021-05-25 |
Family
ID=64461458
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710353371.1A Active CN108965355B (zh) | 2017-05-18 | 2017-05-18 | 用于数据传输的方法、装置及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108965355B (zh) |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108769099A (zh) * | 2018-04-02 | 2018-11-06 | 武汉斗鱼网络科技有限公司 | 一种消息中间件的消息去重的实现方法 |
CN109933439A (zh) * | 2019-02-21 | 2019-06-25 | 深圳市珍爱捷云信息技术有限公司 | 消息传输方法、装置、计算机设备和存储介质 |
CN110069557A (zh) * | 2019-03-16 | 2019-07-30 | 平安科技(深圳)有限公司 | 数据传输方法、装置、设备及存储介质 |
CN110232054A (zh) * | 2019-06-19 | 2019-09-13 | 北京百度网讯科技有限公司 | 日志传输系统及流式日志传输方法 |
CN110401592A (zh) * | 2019-07-30 | 2019-11-01 | 三体云智能科技有限公司 | 一种消息通道中数据流转的方法及设备 |
CN110442461A (zh) * | 2019-07-11 | 2019-11-12 | 福建天泉教育科技有限公司 | 一种消息投递方法、存储介质 |
CN110505315A (zh) * | 2019-09-27 | 2019-11-26 | 北京锐安科技有限公司 | 数据处理方法、装置、设备及存储介质 |
CN111046118A (zh) * | 2019-11-09 | 2020-04-21 | 武汉中海庭数据技术有限公司 | 一种基于消息队列的车端数据的实时处理方法及系统 |
CN111381987A (zh) * | 2020-03-13 | 2020-07-07 | 北京金山云网络技术有限公司 | 一种消息处理方法、装置、电子设备及介质 |
CN111740872A (zh) * | 2020-05-06 | 2020-10-02 | 北京百度网讯科技有限公司 | 消息传递测试方法、装置、电子设备和存储介质 |
CN111949418A (zh) * | 2020-07-10 | 2020-11-17 | 北京思特奇信息技术股份有限公司 | 一种订阅消息处理方法和装置 |
CN112486707A (zh) * | 2020-12-14 | 2021-03-12 | 中国人民银行清算总中心 | 基于Redis的消息异步消费方法及装置 |
CN112988741A (zh) * | 2021-02-04 | 2021-06-18 | 北京淇瑀信息科技有限公司 | 实时业务数据合并方法、装置及电子设备 |
CN113139081A (zh) * | 2021-04-27 | 2021-07-20 | 中山亿联智能科技有限公司 | 高效率低延迟上报读取用户在线播放信息的方法 |
CN113407560A (zh) * | 2021-08-19 | 2021-09-17 | 太平金融科技服务(上海)有限公司深圳分公司 | 更新消息处理方法、数据同步方法、配置信息配置方法 |
WO2022032918A1 (zh) * | 2020-08-12 | 2022-02-17 | 紫光云(南京)数字技术有限公司 | 可靠且保证配置可达的方法、装置及计算机可读存储介质 |
CN117527880A (zh) * | 2024-01-05 | 2024-02-06 | 南京研利科技有限公司 | 消息管理方法、装置、电子设备及计算机可读取存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100138728A1 (en) * | 2008-12-03 | 2010-06-03 | Electronics And Telecommunications Research Institute | Apparatus for supporting dynamic change of event rule under sca and method thereof |
CN104092717A (zh) * | 2013-12-13 | 2014-10-08 | 深圳市腾讯计算机系统有限公司 | 消息处理方法及系统、消息目的端设备与分布式消息系统 |
CN104754036A (zh) * | 2015-03-06 | 2015-07-01 | 合一信息技术(北京)有限公司 | 一种基于kafka的消息处理系统及处理方法 |
CN104809510A (zh) * | 2015-05-21 | 2015-07-29 | 武汉大学 | 一种提供票务支持的票池中间件的构建、购票及锁票方法 |
CN106293968A (zh) * | 2016-08-04 | 2017-01-04 | 华中科技大学 | 一种基于Kafka消息中间件的双向通信系统及方法 |
-
2017
- 2017-05-18 CN CN201710353371.1A patent/CN108965355B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100138728A1 (en) * | 2008-12-03 | 2010-06-03 | Electronics And Telecommunications Research Institute | Apparatus for supporting dynamic change of event rule under sca and method thereof |
CN104092717A (zh) * | 2013-12-13 | 2014-10-08 | 深圳市腾讯计算机系统有限公司 | 消息处理方法及系统、消息目的端设备与分布式消息系统 |
CN104754036A (zh) * | 2015-03-06 | 2015-07-01 | 合一信息技术(北京)有限公司 | 一种基于kafka的消息处理系统及处理方法 |
CN104809510A (zh) * | 2015-05-21 | 2015-07-29 | 武汉大学 | 一种提供票务支持的票池中间件的构建、购票及锁票方法 |
CN106293968A (zh) * | 2016-08-04 | 2017-01-04 | 华中科技大学 | 一种基于Kafka消息中间件的双向通信系统及方法 |
Non-Patent Citations (1)
Title |
---|
曾泉匀: ""基于Redis的分布式消息服务的设计与实现"", 《中国优秀硕士学位论文全文数据库信息科技辑》 * |
Cited By (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108769099A (zh) * | 2018-04-02 | 2018-11-06 | 武汉斗鱼网络科技有限公司 | 一种消息中间件的消息去重的实现方法 |
CN108769099B (zh) * | 2018-04-02 | 2021-09-07 | 武汉斗鱼网络科技有限公司 | 一种消息中间件的消息去重的实现方法 |
CN109933439A (zh) * | 2019-02-21 | 2019-06-25 | 深圳市珍爱捷云信息技术有限公司 | 消息传输方法、装置、计算机设备和存储介质 |
CN110069557A (zh) * | 2019-03-16 | 2019-07-30 | 平安科技(深圳)有限公司 | 数据传输方法、装置、设备及存储介质 |
CN110069557B (zh) * | 2019-03-16 | 2023-10-20 | 平安科技(深圳)有限公司 | 数据传输方法、装置、设备及存储介质 |
CN110232054B (zh) * | 2019-06-19 | 2021-07-20 | 北京百度网讯科技有限公司 | 日志传输系统及流式日志传输方法 |
CN110232054A (zh) * | 2019-06-19 | 2019-09-13 | 北京百度网讯科技有限公司 | 日志传输系统及流式日志传输方法 |
CN110442461A (zh) * | 2019-07-11 | 2019-11-12 | 福建天泉教育科技有限公司 | 一种消息投递方法、存储介质 |
CN110442461B (zh) * | 2019-07-11 | 2022-10-21 | 福建天泉教育科技有限公司 | 一种消息投递方法、存储介质 |
CN110401592A (zh) * | 2019-07-30 | 2019-11-01 | 三体云智能科技有限公司 | 一种消息通道中数据流转的方法及设备 |
CN110505315A (zh) * | 2019-09-27 | 2019-11-26 | 北京锐安科技有限公司 | 数据处理方法、装置、设备及存储介质 |
CN111046118A (zh) * | 2019-11-09 | 2020-04-21 | 武汉中海庭数据技术有限公司 | 一种基于消息队列的车端数据的实时处理方法及系统 |
CN111381987A (zh) * | 2020-03-13 | 2020-07-07 | 北京金山云网络技术有限公司 | 一种消息处理方法、装置、电子设备及介质 |
CN111740872A (zh) * | 2020-05-06 | 2020-10-02 | 北京百度网讯科技有限公司 | 消息传递测试方法、装置、电子设备和存储介质 |
CN111949418B (zh) * | 2020-07-10 | 2023-10-24 | 北京思特奇信息技术股份有限公司 | 一种订阅消息处理方法和装置 |
CN111949418A (zh) * | 2020-07-10 | 2020-11-17 | 北京思特奇信息技术股份有限公司 | 一种订阅消息处理方法和装置 |
WO2022032918A1 (zh) * | 2020-08-12 | 2022-02-17 | 紫光云(南京)数字技术有限公司 | 可靠且保证配置可达的方法、装置及计算机可读存储介质 |
CN112486707A (zh) * | 2020-12-14 | 2021-03-12 | 中国人民银行清算总中心 | 基于Redis的消息异步消费方法及装置 |
CN112988741A (zh) * | 2021-02-04 | 2021-06-18 | 北京淇瑀信息科技有限公司 | 实时业务数据合并方法、装置及电子设备 |
CN113139081A (zh) * | 2021-04-27 | 2021-07-20 | 中山亿联智能科技有限公司 | 高效率低延迟上报读取用户在线播放信息的方法 |
CN113139081B (zh) * | 2021-04-27 | 2023-10-27 | 中山亿联智能科技有限公司 | 高效率低延迟上报读取用户在线播放信息的方法 |
CN113407560A (zh) * | 2021-08-19 | 2021-09-17 | 太平金融科技服务(上海)有限公司深圳分公司 | 更新消息处理方法、数据同步方法、配置信息配置方法 |
CN117527880A (zh) * | 2024-01-05 | 2024-02-06 | 南京研利科技有限公司 | 消息管理方法、装置、电子设备及计算机可读取存储介质 |
CN117527880B (zh) * | 2024-01-05 | 2024-04-09 | 南京研利科技有限公司 | 消息管理方法、装置、电子设备及计算机可读取存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN108965355B (zh) | 2021-05-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108965355A (zh) | 用于数据传输的方法、装置及计算机可读存储介质 | |
CN106886375B (zh) | 存储数据的方法和装置 | |
CN109413127A (zh) | 一种数据同步方法和装置 | |
CN108920698A (zh) | 一种数据同步方法、装置、系统、介质及电子设备 | |
CN112069265A (zh) | 配置数据的同步方法、业务数据系统、计算机系统和介质 | |
CN111339186A (zh) | 工作流引擎数据同步方法、装置、介质及电子设备 | |
CN112445626B (zh) | 一种基于消息中间件的数据处理方法和装置 | |
CN109032796B (zh) | 一种数据处理方法和装置 | |
CN110019080A (zh) | 数据访问方法和装置 | |
CN113076304A (zh) | 一种分布式版本管理方法、装置和系统 | |
CN111427701A (zh) | 一种工作流引擎系统和业务处理方法 | |
CN110019062A (zh) | 数据同步方法和系统 | |
CN111190962A (zh) | 一种文件同步方法、装置及本地终端 | |
CN110019539A (zh) | 一种数据仓库的数据同步的方法和装置 | |
CN108984564A (zh) | 数据存储系统、方法和装置 | |
CN110119386A (zh) | 数据处理方法、数据处理装置、介质和计算设备 | |
CN110674082B (zh) | 移除在线文档的方法、装置、电子设备及计算机可读介质 | |
CN109558251A (zh) | 页面结构信息修改的方法及终端 | |
CN109218338A (zh) | 信息处理系统、方法和装置 | |
CN109117420A (zh) | 操作日志记录方法和装置 | |
CN109614440A (zh) | 基于大数据的数据同步方法及相关设备 | |
CN110879818B (zh) | 一种获取数据的方法、装置、介质和电子设备 | |
CN108459833A (zh) | 用于显示文本的方法、系统和装置 | |
WO2016165468A1 (zh) | 一种管理应用系统的方法、装置和系统 | |
CN113742376A (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 |