Я изучаю Spring webflux и Reactive Streams и попробовал сервис, который транслирует информацию из mongoDB.Проблема в том, что когда ничего не осталось отправить из MongoDB, Spring закрывает запрос.Так что я действительно хотел сделать: иметь в моем mongodb таблицу Angular, в которой отображаются данные, полученные SPRING, и каждый раз, когда производится обновление / вставка, при этом новые данные автоматически поступают в Angular.
Я нашел способ звонить в мою угловую службу каждые XXXX миллисекунд.
Есть ли другой способ сделать это?Так вот мой код веб-сервиса Spring:
@GetMapping(path="/stream/organisation",produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<Organisation> streamAll() {
return organisationRepository.findAll();
}
Мой сервис Angular:
getOrganisationStream(): Observable<Array<Organisation>> {
this.Organisations = [];
return Observable.create((observer) => {
const eventSource = new EventSource(this.url);
eventSource.onmessage = (event) => {
// tslint:disable-next-line:no-console
console.debug('Received event: ', event);
const json = JSON.parse(event.data);
console.log(json);
const org: Organisation = new Organisation();
org.codeFase = json.codeFase;
org.id = json.id;
org.name = json.name;
this.Organisations.push(org);
console.log(this.Organisations.length);
this.ngZone.run(() => {
observer.next(this.Organisations);
});
};
eventSource.onerror = (error) => {
if (eventSource.readyState === 0) {
console.log('The stream has been closed by the server.');
eventSource.close();
observer.complete();
} else {
observer.error('EventSource error: ' + error);
}
};
});
}
Мой компонент:
organisations: Observable<Organisation[]>;
constructor(private testService: TestService) {
}
ngOnInit(): void {
this.organisations = this.testService.getOrganisationStream();
}
Мой HTML:
<div *ngFor="let org of organisations | async">
{{org.name}} {{org.codeFase}}
</div>