RateLimit只在redis模式下支持,以Redis为例分析InProgressLimit及RateLimit实现。
InProgressLimit
存放在TASKS_IN_PROGRESS_STATUS中,核心包括
- 修改task时候根据状态使用 jedisProxy.sadd(nsKey(TASKS_IN_PROGRESS_STATUS, task.getTaskDefName()), task.getTaskId()); 或者 jedisProxy.srem(nsKey(TASKS_IN_PROGRESS_STATUS, task.getTaskDefName()), task.getTaskId()); 来修改数据
- 判断时候直接使用jedisProxy.scard(inProgressKey)
核心代码都在类RedisExecutionDAO 中,关键代码如下:
@Override
public void updateTask(Task task) {
Optional