一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于redis的消息监听方法与流程

2022-10-26 18:26:18 来源:中国专利 TAG:


1.本发明属于通信技术领域,涉及一种基于redis的消息监听方法。


背景技术:

2.分布式系统:包括多个节点(一般来说一个节点即一台计算机),且节点间互相连通(网络和消息传递),在这些连通的节点上部署了组件并且组件之间的操作互相连通,这样的一个系统可以认为是一个分布式系统。
3.复杂的分布式系统一般包含多个不同功能模块运行在不同硬件节点上,模块运行完成其能力时需要共享部分状态信息。
4.一般的共享方法是将状态信息直接发送给需要的模块,会导致功能模块间耦合,系统能力扩展不方便。


技术实现要素:

5.为解决现有技术存在的难题,本发明提供了一种基于redis的消息监听方法,包括以下步骤:
6.状态信息命名线程以键值对的形式将系统的状态信息存入redis数据库,所述键值对包括名称和操作;
7.消息监听线程通过redis数据库提供的模式订阅功能,监听某类状态信息在redis数据库中的操作;
8.消息缓存线程将消息监听线程监听到的状态信息的名称和操作存入一个先进先出的消息队列;
9.消息获取和响应线程从消息队列中依次取出状态信息的名称和操作,根据操作的类型进入不同的响应函数,通过名称从redis数据库中获取具体的状态信息进行处理。
10.进一步地,状态信息命名线程对每类状态信息的名称进行命名,命名规则按照类型 频率的形式对状态信息进行分类。
11.进一步地,所述操作包括写入和删除两类。
12.进一步地,支持多个消息监听线程存入同一个消息队列。
13.进一步地,根据操作的类型进入不同的响应函数具体为:如果操作为写入,进入响应函数onset,通过名称从redis数据库中获取具体的状态信息进行处理;如果操作为删除,进入响应函数ondelete。
14.本发明与现有技术相比,其有益效果如下:
15.1、本发明通过redis数据库实现数据的发布订阅,降低应用间数据的耦合,提升系统的可扩展性。
16.2、本发明通过消息队列实现消息的缓存,使得消息的监听和响应处理异步进行,不会因为处理影响监听性能;同时消息缓存支持多个监听线程写入监听结果,支持同一个应用监听多类状态信息,提升了系统设计的灵活性。
附图说明
17.图1为实施例一的基于redis的消息监听方法的流程图。
18.图2为实施例一的基于redis的消息监听方法的应用的示意图。
具体实施方式
19.下面结合实施例并参照附图对本发明作进一步详细描述。
20.实施例一:
21.本实施例提供了一种基于redis的消息监听方法,如图1和图2所示,包括以下步骤:
22.状态信息命名线程以键值对的形式将系统的状态信息存入redis数据库,所述键值对具体包括名称key和操作op,如节点信息以node_作为前缀命名,应用信息以app_作为前缀命名。
23.状态信息命名线程对每类状态信息的名称进行命名,命名规则按照类型 频率的形式对产生自不同的模块、以及模块内信息产生的不同频率来分类,如产生自节点管理器的信息node_*和应用管理器的信息app_*是按照模块来划分的;同一模块节点管理器的node_*信息产生频率为每秒一次,heartbeat_*信息产生频率为几十毫秒一次,是按照信息的产生频率划分的。两者结合起来形成的节点状态信息如“node_[nodeip]_*”来表示,这样设计的好处是使系统信息交互的逻辑更加高效可靠。
[0024]
所述操作op包括写入(set)和删除(del)两类。
[0025]
消息监听线程通过redis数据库提供的模式订阅功能,监听某类状态信息在redis数据库中的操作,包括写入(set)和删除(del)两类。
[0026]
消息缓存线程将消息监听线程监听到的状态信息的名称key和操作op存入一个先进先出的消息队列,支持多个监听线程存入同一个消息队列,即支持同一个应用同时监听多类不同状态信息。
[0027]
消息获取和响应线程,消息获取和响应线程从消息队列中依次取出状态信息的名称key和操作op,根据操作op的类型进入不同的响应函数,通过名称key从redis数据库中获取具体的状态信息进行处理。
[0028]
如图2所示为一种基于redis的消息监听方法的应用实例。
[0029]
被监听的应用按照状态信息命名规则将需要共享的状态信息命名后存入redis数据库;
[0030]
需要监听该类状态的监听应用通过redis数据库提供的消息订阅功能完成对状态信息存入redis或从redis删除两类操作的监听,将监听到的信息存入消息缓存。一个消息监听一类状态信息;因此如监听应用需要监听多类状态信息,可重复执行消息监听线程,所监听到的状态信息都存入消息队列。
[0031]
应用的消息获取和响应线程从消息队列中依次取出信息名称key和操作op,如操作为写入(set),进入响应函数onset,通过信息名称key从redis数据库中获取具体的状态信息进行处理;如操作为删除(del),进入响应函数ondelete。
[0032]
在实例中,节点监测模块和应用管理模块的状态信息命名线程分别将需要共享的节点态信息node_1和应用信息app_1存入redis数据库。
[0033]
调度器模块通过消息监听线程完成对节点(node_*)和应用(app_*)两类信息在数据库中操作的监听,监听到的信息[node_1,set]和[app_1,set]存入消息队列。
[0034]
最后,调度器模块的消息获取和响应线程从消息队列中依次取出状态信息的名称key和操作op,进入响应函数onset,从redis数据库中获取node_1和app_1具体的状态信息进行处理。具体流程如图2所示。
[0035]
本发明通过redis数据库实现数据的发布订阅,降低应用间数据的耦合,提升系统的可扩展性;本发明通过消息队列实现消息的缓存,使得消息的监听和响应处理异步进行,不会因为处理影响监听性能;同时消息缓存支持多个监听线程写入监听结果,支持同一个应用监听多类状态信息,提升了系统设计的灵活性。
[0036]
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。


技术特征:
1.一种基于redis的消息监听方法,其特征在于,包括以下步骤:状态信息命名线程以键值对的形式将系统的状态信息存入redis数据库,所述键值对包括名称和操作;消息监听线程通过redis数据库提供的模式订阅功能,监听某类状态信息在redis数据库中的操作;消息缓存线程将消息监听线程监听到的状态信息的名称和操作存入一个先进先出的消息队列;消息获取和响应线程从消息队列中依次取出状态信息的名称和操作,根据操作的类型进入不同的响应函数,通过名称从redis数据库中获取具体的状态信息进行处理。2.根据权利要求1所述的基于redis的消息监听方法,其特征在于,状态信息命名线程对每类状态信息的名称进行命名,命名规则按照类型 频率的形式对状态信息进行分类。3.根据权利要求2所述的基于redis的消息监听方法,其特征在于,所述操作包括写入和删除两类。4.根据权利要求3所述的基于redis的消息监听方法,其特征在于,支持多个消息监听线程存入同一个消息队列。5.根据权利要求4所述的基于redis的消息监听方法,其特征在于,根据操作的类型进入不同的响应函数具体为:如果操作为写入,进入响应函数onset,通过名称从redis数据库中获取具体的状态信息进行处理;如果操作为删除,进入响应函数ondelete。

技术总结
本发明提供了一种基于redis的消息监听方法,包括:状态信息命名线程以键值对的形式将系统的状态信息存入redis数据库,所述键值对包括名称和操作;消息监听线程通过redis数据库提供的模式订阅功能,监听某类状态信息在redis数据库中的操作;消息缓存线程将消息监听线程监听到的状态信息的名称和操作存入一个先进先出的消息队列;消息获取和响应线程从消息队列中依次取出状态信息的名称和操作,根据操作的类型进入不同的响应函数,通过名称从redis数据库中获取具体的状态信息进行处理。本发明提供的一种基于redis的消息监听方法,支持分布式系统内各模块间松耦合通信、实时状态共享。态共享。态共享。


技术研发人员:李路野 韩文俊 丁琳琳 刘洋 檀学文 陆超
受保护的技术使用者:中国电子科技集团公司第十四研究所
技术研发日:2022.07.05
技术公布日:2022/10/25
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献