[发明专利]基于ActiveMQ+Redis的同步消息队列在审
申请号: | 201710198762.0 | 申请日: | 2017-03-29 |
公开(公告)号: | CN107092533A | 公开(公告)日: | 2017-08-25 |
发明(设计)人: | 甄建廷 | 申请(专利权)人: | 弘成科技发展有限公司 |
主分类号: | G06F9/54 | 分类号: | G06F9/54 |
代理公司: | 成都市鼎宏恒业知识产权代理事务所(特殊普通合伙)51248 | 代理人: | 谢敏 |
地址: | 100007 北京市*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 activemq redis 同步 消息 队列 | ||
技术领域
本发明属于同步消息队列执行技术领域,具体涉及一种基于ActiveMQ+Redis的同步消息队列。
背景技术
消息队列在只有一个消费者的情况下,假如该消费者的机器发生故障,则无法完成对消息的完全消费,此时,如果要继续消费消息,则需要切换到其他机器进行操作,即在系统中设置多个消费者终端;而多个消费者消费消息又存在需要顺序执行的问题,在多消费者并行消费分布式消息队列消息的场景中,怎样保持多个消费者之间的顺序消费,是一个亟待解决的重要问题。
在实际业务场景中,例如:有多个教师同时导入学生信息,按照学生人数实时扣费的场景中,导入的逻辑顺序是先获取剩余费用信息并进行判断,剩余费用充足则将学生信息导入,剩余费用不足则禁止导入。以2位教师执行操作导入100名学生信息为例,假如剩余费用等于100名学生的加总费用,在并行执行时,2位教师获取到的剩余费用信息都是充足的,都会执行导入学生信息的操作,这样就有可能导致剩余费用透支的情况发生。
Active MQ是目前最流行的一种消息总线,Redis是一款内存可持久化的日志型key-value数据库,目前还没有成熟的结合了Active MQ和Redis的同步消息队列解决方案。
发明内容
为解决多消费者并行消费分布式消息队列消息容易出现程序故障的问题,实现多个消费者之间的顺序消费,填补Active MQ+Redis同步消息队列这一技术空白,本发明的目的在于提供一种基于Active MQ+Redis的同步消息队列。
本发明是通过以下技术方案来实现的:基于Active MQ+Redis的同步消息队列,步骤包括:
S1. 创建Active MQ消息队列的连接和对话;
S2. 向上述Active MQ消息队列插入消息,由消费者监听消息;
S3. 消费者接收到消息,被消费者接收到的消息反馈并存储到Redis的list数据结构中,用于记录消息进入上述Active MQ消息队列的先后顺序;
S4. 上述Redis按照消息进入上述Active MQ消息队列的先后顺序向持有消息的消费者发送分布式锁;
S5. 获取到分布式锁的消费者成为领导者,消费其持有的消息,消费完成后释放分布式锁,继续监听消息;未获取到分布式锁的消费者继续等待获取由上述Redis发送的新的分布式锁;
S6. 领导者释放分布式锁的动作反馈给上述Redis后,上述Redis继续发送新的分布式锁。
本发明优选地,上述消息有且只有一次被消费者消费。
本发明优选地,上述Redis为单线程。
本发明优选地,上述Redis的list数据结构为双向队列数据结构。
本发明优选地,上述Redis中预设有消息消费时限;在步骤S5中,当消费者成为领导者时,上述Redis自动存储开始消费消息的时间,当领导者实际消费时间大于预设消费时限时,上述Redis自动删除领导者持有的分布式锁并重新向持有消息的消费者发送分布式锁。
本发明优选地,消费者消费过程中因断电或重启导致消费中断时,正在被消费的消息被上述Redis从上述Active MQ消息队列中取出并保存,消费者重启后,上述Redis将保存的消息重新加载到上述Active MQ消息队列中供消费者继续消费,直到消费完成后上述Redis删除保存的消息。
Active MQ是目前最流行的一款消息总线,成熟、稳定,并且对跨平台支持较好;Redis是目前最流行的一款内存可持久化的日志型key-value数据库,具有性能高效、成熟稳定、简单易用、数据结构丰富等特点。
Active MQ提供了消息队列的功能,Redis提供了双向队列的数据结构。消息队列存在两种消费模型:消息队列模型和发布/订阅模型,本发明是针对消息队列模型进行改进。
在现有技术中,存在3种解决方案:其一,将多消费者改为单消费者,此种情形下,一旦消费者机器发生故障,则无法切换机器,消费者无法成功消费消息;其二,通过数据库加锁和索引,将批量插入改为单条插入,这种方案会导致整个系统性能低下;其三,在数据库中设置全局状态,此时,频繁的执行操作会增加数据库压力。这些方案都会导致系统性能低下,逻辑复杂度增加,只能根据实际业务定制相应方案,无法实现通用。
本发明在高可用部署模式下结合Active MQ和Redis创建同步消息队列,通过向消费者发送消息和分布式锁,实现了多个消费者的顺序消费,避免了系统混乱和消费者消费冲突的情况发生。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于弘成科技发展有限公司,未经弘成科技发展有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710198762.0/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种注蜡机夹具
- 下一篇:一种消失模铸造用降温双层波纹管及砂箱冷却系统