最近需要设计一个分布式的定时任务的方案,从理论上来说,Quartz已经提供了一套完善的分布式定时任务的解决方案,但是由于系统目前已有JMS集群和Redis Sentinel集群,如果想要在目前已有的架构上,实现了一个简单的分布式定时任务的话,如何来做了?总体架构设计图如下:
redis集群:提供分布式的缓存,以及实现简单的分布式锁http://blog.csdn.net/liuchuanhong1/article/details/54668460
Node1~Node3节点:定时从数据库中查询需要执行的任务,由于查询的结果是List,如果3个Node节点同时查库,并将查询的结果推送到中间件集群中,那么待执行的任务肯定是会重复的(分库的话,另说)。换句话说,同一时间,只允许一个Node节点活动,没有获取到分布式锁的节点则阻塞,直到获取到锁,同时避免出现单节点故障。
JMS集群:解耦,Node节点会将从数据库中查询出的待处理任务推送到JMS对应的队列中。
Execute Node节点:监听JMS的队列,并从队列中取出待执行的任务,并异步执行http://blog.csdn.net/liuchuanhong1/article/details/54603546