Флюс не отменяется или не утилизируется после закрытия клиентом - PullRequest
0 голосов
/ 02 июня 2019

При доступе к Flux, который возвращает бесконечные результаты через Chrome или JS EventSource, ни "X" в Chrome, ни запущенный Javascript EventSource.close() не вызывают FluxEmitter 'onCancel() или onDispose(),Кажется, что эти события выполняются только при закрытии Spring.

Как заставить Flux закрыться, когда клиент останавливается?

Вот пример Flux;

public class MyRepository {

   public Flux<MyObject> getFlux() {

    return Flux<MyObject>.create(sink -> {
      for(...) { // get data we have now in EhCache.
         sink.next(myObject);
      }

      myListener = new MyListener() {  // get updates from EhCache events.
         public void onEvent(MyEvent e) {
            sink.next(e.getNewValue());
         }
      };

      sink.onCancel(() -> {
         System.out.println("** CANCELLED **");
         sink.complete();
      }

      sink.onDispose(() -> {
          System.out.println("** DISPOSED **");
      }
    }
  );
}

А вот и конечная точка;

@Autowired MyRepository myRepository;

@GetMapping(value="/myUrl", produces=MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<MyObject> getMyObjects() {
   myRepository.getFlux();
}

Без отмены \ закрытия и после нескольких запросов из Flux Spring начинает умирать, поскольку ресурсы не освобождаются.

Я использую Sping 5.1.5, Boot 2.1.3, Reactor 3.2.6 и Netty 4.1.33.

...