RestController
public class TaskController {
private Logger log = LoggerFactory.getLogger(TaskController.class);
private static final ResponseMsg<String> OUT_OF_TIME_RESULT = new ResponseMsg<>(-1,"超时","out of time");
private static final long OUT_OF_TIME = 60000L;
@Autowired
private TaskSet taskSet;
@RequestMapping(value = "/get",method = RequestMethod.GET)
public DeferredResult<ResponseMsg<String>> getResult(){
log.info("接收请求,开始处理...");
DeferredResult<ResponseMsg<String>> result = new DeferredResult<>(OUT_OF_TIME, OUT_OF_TIME_RESULT);
result.onTimeout(() -> {
log.info("调用超时,移除任务,此时队列长度为{}",taskSet.getSet().size());
synchronized (taskSet.getSet()) {
taskSet.getSet().remove(result);
}
});
result.onCompletion(() -> {
log.info("调用完成,移除任务,此时队列长度为{}",taskSet.getSet().size());
synchronized (taskSet.getSet()) {
taskSet.getSet().remove(result);
}
});
synchronized (taskSet.getSet()) {
taskSet.getSet().add(result);
}
log.info("加入任务集合,集合大小为:{}",taskSet.getSet().size());
log.info("接收任务线程完成并退出");
return result;
}
}