** 什么时候重建任务队列?**
slave来取任务的时候没有取到,就会重建任务队列
Slave取任务的时候会按照 优先队列 重试队列 普通队列的顺序来取任务
**Slave来取任务的时候的操作? **
首先从taskmanager中取一个任务,如果取到任务,向taskmonitor来注册任务(上边的taskmonitor三个数据结构都有记录的),最后返回任务,如果没有取到触发重建任务队列。
taskmonitor监控
Taskmonitor每隔一分钟进行一次slave心跳,获取taskstate,如果发现某个slave取走了任务至少5s钟了还没有taskstate(taskstate一般slave成功获取到任务的时候就会生成)就认为任务可能出错了(这样判断回不会有问题呢?如果网络传输大于5s呢?如果判断有问题,就有可能造成两个slave取得同一个任务),这时候将任务从monitor中删除(Clientpool和Clientpool),并重新加到重试队列中。当对slave心跳的时候网络异常,那么这种情况比较严重,将Clientpool中该ip下所有的任务移到重试队列中去,并删除Clientpool该ip下的记录,同时删除taskItemPool中所有记录,删除clientConcurrentHashMap该ip的信息,也就是从slave集群中移除该节点。
taskmanager
主要是用来管理任务队列的,我们在spring配置文件里配置了一个任务队列,然后在初始化的时候会生成出来一个队列组(group),里面不仅包含这个队列还有对应的优先队列和重试队列。
网友评论