У меня есть один пример метода GET, который генерирует Randon INT и отправляет обратно клиенту
@GetMapping
public Flux<String> search() {
return Flux.create(fluxSink -> {
Random r = new Random();
int n;
for (int i = 0; i < 10; i++) {
n= r.nextInt(1000);
System.out.println("Creating:"+n);
fluxSink.next(String.valueOf(n));
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
fluxSink.complete();
});
}
Curl:
curl -v -H "Принять:text / event-stream "-X GET 'http://localhost:8080/stream
С помощью этого кода с помощью команды CURL я могу видеть цифры в моем клиенте только тогда, когда происходит fluxSink.complete.
Теперь, если я изменю свой код на:
@GetMapping
public Flux<String> search() {
return Flux.create(fluxSink -> {
Thread t = new Thread(() -> {
Random r = new Random();
int n;
for (int i = 0; i < 10; i++) {
n= r.nextInt(1000);
System.out.println("Creating:"+n);
fluxSink.next(String.valueOf(n));
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
fluxSink.complete();
});
t.start();
});
}
Оборачивая процесс в поток, он работает нормально.Я могу видеть, что данные передаются нормально, когда происходит fluxSink.next.
Кто-нибудь может объяснить этот эффект?Как я могу видеть поток данных без явного использования Thread?
Спасибо!