如果Controller返回SseEmitter,可以集成Server-Sent Events功能,向浏览器推送消息。
@GetMapping(path = "infoPush/{sms}", produces=TEXT_EVENT_STREAM_VALUE)
public SseEmitter infoPush(@PathVariable("sms") String smsID) {
//设置超时时间,单位毫秒
final SseEmitter emitter = new SseEmitter(120_000L);
//使用异步方式,不阻塞Controller的执行
Executors.newSingleThreadExecutor().submit(() -> rqService.query(smsID, emitter));
return emitter;
}
query方法是这样的:
//最大查询次数
private static final int MAX = 20;
public void query(@NonNull final String smsID,
@NonNull final SseEmitter emitter) {