Jak to zrobić w WebFlux żeby po operacji dodania itemu do bazy, automatycznie wysyłać taką informację do endpointu który zbiera wszystkie itemy z bazy? Chodzi o to że mam powiedzmy tabele songs, odpytuję endpoint /GET songs i zwraca mi TEXTEVENTVALUESTREAM i wszystkie elementy, teraz kiedy dodałbym item poprzez /POST songs chciałbym żeby w tamtej karcie przeglądarki pojawił się nowy item. Wiem, że to jest możliwe ale nie wiem jak się podpiąc pod insniejący stream? Może żeby reagował na jakiś event?
Mój kod:
@RestController @RequestMapping("/songs") public class SongController {
private final SongRepository songRepository;
public SongController(SongRepository songRepository) { this.songRepository = songRepository; }
@PostMapping public Mono addSong(@RequestBody Song song) { return songRepository.save(song); } } Narazie odpytuje co sekundę ale wtedy mi zwraca za każdym razem całość (razem z nowym itemem) a nie dokłada nowy.
@MrFisherman: kumam chyba co chcesz zrobić - chcesz żeby Ci zwracało deltę a nie cały stream. Więc to co ty musiałbyś zrobić to na froncie trzymac se w cache całość danych a endponintem ciągnąć deltę (zmianę). Więc (koncepcyjnie) ja bym to widział tak: 1. Dodaj sobie endpoint getDeltaSongs - endpoint z logiką która zwraca te songi które zostały ostatnio dodane (czyli tą deltę) - różnicę względem całości 2. Zrobić cachowanie po
Mój kod:
@RestController
@RequestMapping("/songs")
public class SongController {
private final SongRepository songRepository;
public SongController(SongRepository songRepository) {
this.songRepository = songRepository;
}
@GetMapping(produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux getAllSongs() {
return Flux.interval(Duration.ofSeconds(1))
.flatMap(x -> songRepository.findAll());
}
@PostMapping
public Mono addSong(@RequestBody Song song) {
return songRepository.save(song);
}
}
Narazie odpytuje co sekundę ale wtedy mi zwraca za każdym razem całość (razem z nowym itemem) a nie dokłada nowy.
#webflux #flux #spring #programowaniereaktywne #java
1. Dodaj sobie endpoint getDeltaSongs - endpoint z logiką która zwraca te songi które zostały ostatnio dodane (czyli tą deltę) - różnicę względem całości
2. Zrobić cachowanie po