[发明专利]一种基于redis的分布式消息通信方法在审
申请号: | 202010825774.3 | 申请日: | 2020-08-17 |
公开(公告)号: | CN112671819A | 公开(公告)日: | 2021-04-16 |
发明(设计)人: | 刘永 | 申请(专利权)人: | 紫光云技术有限公司 |
主分类号: | H04L29/08 | 分类号: | H04L29/08 |
代理公司: | 天津滨海科纬知识产权代理有限公司 12211 | 代理人: | 刘莹 |
地址: | 300459 天津市滨海新区*** | 国省代码: | 天津;12 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 redis 分布式 消息 通信 方法 | ||
本发明提供了一种基于redis的分布式消息通信方法,包括agent消息队列创建选择方法,所述agent消息队列创建选择方法包括:S1、Agent启动之后查看是否持有代表一个消息队列的名称值,如果不存在,执行步骤S2;如果存在执行步骤S6;S2、获取分布式锁;S3、检查配置在环境变量中的消息队列名称列表,查看redis中是否已经存在了此消息队列,如果不存在,则执行步骤S4;否则,释放锁执行步骤S1。本发明所述的一种基于redis的分布式消息通信方法能够保证存在依赖关系的消息顺序的到达设备,且不存在单点故障问题,提高了集群的可靠性,并且由于将消息分布在不同的消息队列中也提高了消息的处理能力。
技术领域
本发明属于redis消息通信方法领域,尤其是涉及一种基于redis的分布式消息通信方法。
背景技术
当前现状,agent作为与设备交互的端点,在集群环境下由于要保证消息的顺序性,故仅有一个agent服务程序运行,现有技术的agent服务存在单点问题,并且消息没有持久化,一旦agent服务异常,将导致消息丢失和业务不可用,可靠性得不到保证。
发明内容
有鉴于此,本发明旨在提出一种基于redis的分布式消息通信方法,通过redis实现消息传递机制,启动多个agent保证服务多活,且能够保证消息的顺序可靠到达。
为达到上述目的,本发明的技术方案是这样实现的:
一种基于redis的分布式消息通信方法,包括agent消息队列创建选择方法,所述agent消息队列创建选择方法包括:
S1、Agent启动之后查看是否持有代表一个消息队列的名称值,如果不存在,执行步骤S2;如果存在执行步骤S6;
S2、获取分布式锁;
S3、检查配置在环境变量中的消息队列名称列表,查看redis中是否已经存在了此消息队列,如果不存在,则执行步骤S4;否则,释放锁执行步骤S1;
S4、创建消息队列并向消息队列中写入KEY_A字段,设置KEY_A字段的值为一个随机数,Agent持有此随机数,并设置这个KEY_A自动在N秒后超时则释放锁,执行步骤S5;
S5、循环获取消息队列A中的消息,并处理消息发送到设备;
S6、持有的KEY_A字段中的随机数与Agent中记录的随机数不一致,则执行步骤S2重新获取消息队列,否则,重置KEY_A,执行步骤S5继续处理消息;
S7、使用Kubernetes服务探针,每N-N/2秒发送一次重置KEY_A的消息,保证Agent只要存活就能持有消息队列A。
进一步的,步骤S2中获取分布式锁用于保证获取消息队列或者创建消息队列的过程在多个agent间是互斥的。
进一步的,步骤S6中持有的KEY_A字段中的随机数与Agent中记录的随机数不一致,表明此Agent已经没有此KEY_A所代表的Agent的消息队列A。
进一步的,步骤S7中使用Kubernetes服务探针,用于解决在Agent处理消息时间过长导致KEY_A超时丢失,导致其他Agent获取消息队列A的权限的问题。
进一步的,步骤S7中使用Kubernetes服务探针,每N-N/2秒发送一次重置KEY_A的消息,还用于保证Agent只要存活就能持有消息队列A。
相对于现有技术,本发明所述的一种基于redis的分布式消息通信方法具有以下优势:
本发明所述的一种基于redis的分布式消息通信方法能够保证存在依赖关系的消息顺序的到达设备,且不存在单点故障问题,提高了集群的可靠性,并且由于将消息分布在不同的消息队列中也提高了消息的处理能力。
附图说明
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于紫光云技术有限公司,未经紫光云技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010825774.3/2.html,转载请声明来源钻瓜专利网。