本发明涉及软件通讯,具体为一种基于redis-stream的定时任务分发及多节点处理系统及方法。
背景技术:
1、消息队列是很多互联网程序中常见的信息传递方式,在使用消息队列时需要同时满足以下需求:及时性、有序性及准确性。当存在多个节点时,也就是多个消费者时同时消费通一个消息时,可能存在某个节点挂掉或者重启时,消息不能及时处理,造成消息遗漏或处理失败的问题。
技术实现思路
1、本发明的目的在于提供一种基于redis-stream的定时任务分发及多节点处理系统及方法,以解决上述背景技术中提出消息队列的多节点分发问题。
2、为实现上述目的,本发明提供如下技术方案:一种基于redis-stream的定时任务分发及多节点处理系统,包括定时任务执行器、消息队列、redis数据库、消息接收模块、处理模块以及节点;
3、定时任务执行器,所述为应用程序中创建的定时任务,用于定时处理创建、删除、执行定时任务;
4、消息队列,为定时任务执行时,将消息传递至消息队列;
5、redis数据库,用于存放消息队列中id对应的数据;
6、消息接收模块,用于接收生产者发送的消息队列中的信息;
7、处理模块,根据接收到的消息,获取id数据,根据id作为key值从redis数据库中获取对应数据;
8、节点,每个节点中的消费者绑定不同的消费者组。
9、优选的,消息队列的数据包括id和操作述。
10、优选的,还包括前端页面展示模块,用于设定定时任务信息和操作信息,并展示消息队列监控信息,并用于向数据库插入定时任务。
11、优选的,还包括消费者组,允许多个消费者组消费stream的消息,使每个消费者组都能收到完整的消息。
12、一种基于redis-stream的定时任务分发及多节点处理方法,所述方法包括以下步骤:
13、生产者创建定时任务;
14、定时任务执行器定时上传消息至redis数据库,同时将包含key值以及操作类型的数据上报至redis-stream消息队列中,redis-stream有一个消息链表,将所有加入的消息都串起来,每个消息都有一个唯一的id和对应的内容;
15、消费者读取到消息队列中的信息,通过读取消息队列中的数据,获取key值,然后获取key的数据信息,消息监听线程通过redis数据库提供的模式订阅功能,监听某类状态信息在redis数据库中的操作,包括写入(set)和删除(del)两类;
16、消费者分布在不同节点上,创建不同的消费者组,确保不同节点的消费者在不同的消费者组中,保证每个节点的消费者都能读取到消息队列中的信息。
17、优选的,每一个stream队列包含多条消息,每条消息由唯一的id进行标识,每条消息以追加的方式添加到stream队列中。
18、与现有技术相比,本发明的有益效果是:
19、本发明提出的基于redis-stream的定时任务分发及多节点处理系统及方法,利用定时任务执行器,可以是消息生产者和消息消费者达到解耦的效果,降低了程序的复杂度,提高了程序的可扩展性和异步性;通过创建多个消费者组的方式,使不同节点的消费者绑定不同消费者组,可使多个节点的消费者程序都能收到消息,保证了消息的有效性。
1.一种基于redis-stream的定时任务分发及多节点处理系统,其特征在于:包括定时任务执行器、消息队列、redis数据库、消息接收模块、处理模块以及节点;
2.根据权利要求1所述的一种基于redis-stream的定时任务分发及多节点处理系统,其特征在于:消息队列的数据包括id和操作述。
3.根据权利要求1述的一种基于redis-stream的定时任务分发及多节点处理系统,其特征在于:还包括前端页面展示模块,用于设定定时任务信息和操作信息,并展示消息队列监控信息,并用于向数据库插入定时任务。
4.根据权利要求1所述的一种基于redis-stream的定时任务分发及多节点处理系统,其特征在于:还包括消费者组,允许多个消费者组消费stream的消息,使每个消费者组都能收到完整的消息。
5.一种根据权利要求1-4任意一项所述的基于redis-stream的定时任务分发及多节点处理系统的基于redis-stream的定时任务分发及多节点处理方法,其特征在于:所述方法包括以下步骤:
6.根据权利要求5所述的一种基于redis-stream的定时任务分发及多节点处理方法,其特征在于:每一个stream队列包含多条消息,每条消息由唯一的id进行标识,每条消息以追加的方式添加到stream队列中。