Вот сценарий.a) Планшет использует http GET для получения какого-либо ресурса, а ресурс получает из другой системы через асинхронное сообщение.демонстрационный код, как показано ниже
в контроллере
@GetMapping
public List<User> listUser() {
return service.listUser();
}
в службе
public List<User> listUser() {
requestfromAnotherSystem();
while(!newDataReady) {};
newDataReady = false;
return list;
}
public void onMessage(List<User> list) {
this.list = list;
newDataReady = true;
}
b) другая система может время от времени изменять содержимое, и изменение необходимобыть уведомленным планшетом вовремя;
В самом начале я использую RabbitMq для уведомления планшета о новых изменениях в Service :: OnMessage, затем я услышал Reactor + SSE.Поэтому я изменяю код как
в контроллере
@GetMapping
public Flux<List<User>> listUser() {
return service.listUser();
}
в службе
public Flux<List<User>> listUser() {
Flux<List<User>> flux = Flux.generate(
() -> 0,
(state, sink) -> {
while(!newData){};
sink.next(users);
newData = false;
return state + 1;
});
return flux;
Мой вопрос: а) является ли это правильным способом обработки такого сценария, б) есть ли лучшее решение для этого?