【发布时间】:2021-05-22 06:07:54
【问题描述】:
我正在尝试在 Spring Boot 中实现 SSE(服务器端事件发射器)。应用程序在浏览器中运行良好,但是当我以 Angular 代码调用应用程序时,它最终出错了。 我的 Spring Boot 代码来自https://howtodoinjava.com/spring-boot2/rest/spring-async-controller-sseemitter/
@RestController
public class DataSetController {
private final DataSetService dataSetService;
public DataSetController(DataSetService dataSetService) {
this.dataSetService = dataSetService;
}
@GetMapping("/emit-data-sets")
public SseEmitter fetchData2()
{
SseEmitter emitter = new SseEmitter();
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(() ->
{
List<DataSet> dataSets = dataSetService.findAll();
try {
for (DataSet dataSet : dataSets) {
randomDelay();
emitter.send(dataSet);
}
emitter.complete();
} catch (IOException e) {
emitter.completeWithError(e);
}
});
executor.shutdown();
return emitter;
}
private void randomDelay() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
我的 Angular 代码来自此链接 https://bartoszgajda.com/2019/12/22/angular-and-server-sent-events-sse/
export class HomeComponent implements OnInit {
constructor(private sseService: SseService) {}
ngOnInit() {
this.sseService
.getServerSentEvent("http://localhost:8082/raw")
.subscribe(data => console.log(data),
error => console.log("The code errors out here")
);
}
}
响应来自控制台,如下所示
请帮助我,为什么代码最终会出错?服务器代码在浏览器中运行良好,这是 Angular 还是 Spring Boot 的问题?
【问题讨论】:
-
是emitter.completeWithError(e);在服务器上被调用?
-
不,它没有被调用
-
你可以尝试做同样的事情,但没有执行者。只需在发射器中发射你想要的一切并返回它
-
我试过还是一样的错误。它被执行了四次,错误出现在角度
标签: angular spring-boot