【springboot】闲话 springboot 的几种异步机制 及 长轮询的概念和简单实现
Spring Boot 中的异步处理可以通过 @EnableAsync
和 @Async
注解来实现。
@EnableAsync
:开启异步调用功能。@Async
:标记在方法上,表明该方法是异步执行的。
长轮询通常是客户端与服务器之间的一种持久连接,客户端定期发送请求查看是否有新的数据或响应。
简单的长轮询实现可以使用 Spring Boot 的 @RestController
和 Callable
。
@RestController
public class PollingController {
private Queue<String> queue = new ConcurrentLinkedQueue<>();
@GetMapping("/poll")
public Callable<ResponseEntity<String>> poll() {
return () -> {
String data = queue.poll(); // 非阻塞获取数据
if (data != null) {
return ResponseEntity.ok(data);
} else {
return ResponseEntity.noContent().build();
}
};
}
@PostMapping("/publish")
public ResponseEntity<String> publish(@RequestBody String message) {
queue.add(message); // 发布消息
return ResponseEntity.ok("Message published");
}
}
在这个例子中,poll
方法返回一个 Callable
对象,表示这是一个异步操作。客户端可以通过轮询调用 /poll
接口来获取新的数据。当有新数据可用时,poll
方法中的 Callable
会被执行并返回数据。publish
方法用于模拟发布新消息到队列中,以供长轮询客户端获取。
评论已关闭