现在有一个任务执行表
id | 任务类型 | 订单号 | 执行时间 | 执行状态 | 执行的类名 |
---|---|---|---|---|---|
1 | order | 123 | 时间戳 | 是否执行状态 | 执行类 |
这种怎么去实现在指定的时间去执行相关的任务呀?
目前想到的做法是,定时任务定时的扫描表(总会有差值),然后判断时间差。将时间差在20分钟内的(这个值只是乱定义的)任务通过一个消息队列(目前使用的是amq),延迟发送给消费者执行
考虑:如果全用延迟消息队列,目前还不知道怎么持久化消息。只有数据库去存这些任务,但怎么去将这些数据库存的任务,及时的发送给消费者消费,还没有解决办法
一种可行的方案是使用zookeeper。
当你插入一条记录时,在zookeeper中创建一个节点,并设置超时时间(自己算好执行时间跟当前时间的时间差),然后对该节点设置watcher。当超时时间一过,watcher中会收到通知,此时执行你想要执行的方法就行