Реактор + SSE с бесконечным потоком, который получает из асинхронного сообщения в весенний boot2 - PullRequest
0 голосов
/ 10 октября 2018

Вот сценарий.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;

Мой вопрос: а) является ли это правильным способом обработки такого сценария, б) есть ли лучшее решение для этого?

...