123456789101112131415161718192021222324252627282930313233// 存放监听某个Id的长轮询集合// 线程同步结构public static Multimap<String, DeferredResult<String>> watchRequests = Multimaps.synchronizedMultimap(HashMultimap.create());@GetMapping(path = "watch/{id}")@ResponseBodypublic DeferredResult<String> watch(@PathVariable String id) { // 延迟对象设置超时时间 DeferredResult<String> deferredResult = new DeferredResult<>(10000L); // 异步请求完成时移除 key,防止内存溢出 deferredResult.onCompletion(() -> { watchRequests.remove(id, deferredResult); }); deferredResult.onTimeout(() -> { deferredResult.setResult("超时"); }); // 注册长轮询请求 watchRequests.put(id, deferredResult); return deferredResult;}@GetMapping(path = "publish/{id}")@ResponseBodypublic String publish(@PathVariable String id) { if (watchRequests.containsKey(id)) { Collection<DeferredResult<String>> deferredResults = watchRequests.get(id); for (DeferredResult<String> deferredResult : deferredResults) { deferredResult.setResult("我更新了" + new Date()); } } return "success";}