Как читать строки файла, когда они появляются, и представлять их как Flux? - PullRequest
3 голосов
/ 28 мая 2020

Предположим, мы зависим от Reactor 3 (т.е. в приложении Spring 5) и текстового файла my/file.txt.

Мне нужно подписаться на строки текстового файла (как существующие, так и те, которые появятся в будущем) и создайте Flux<String>. Если вы используете sh, пренебрегая блокировкой операций чтения ввода-вывода, давайте просто раскроем принцип построения такой подписки.

Для простоты предположим, что мы выводим эти строки на стандартный вывод:

flowLinesFrom(Path.of("my/file.txt"))
   .subscribe(System.out::println);     

Как правильно реализовать Flux<String> flowLinesFrom(Path)?

1 Ответ

1 голос
/ 28 мая 2020

Вы можете использовать this так

//Create FluxTailer
FluxTailer tailer = new FluxTailer(
    //The file to tail
    Path.of("my/file.txt").toFile(),
    //Polling interval for changes
    Duration.ofSeconds(1)
);

//Start tailing
tailer.start();

//Subscribe to the tailer flux
tailer.flux().subscribe(System.out::println);

//Just for demo you wait for 10 seconds
try{
    Thread.sleep(10000);
}catch (Exception e){}

//Stop the tailer when done, will also complete the flux
tailer.stop();

Вы можете начинать и останавливать, как хотите, а также устанавливать чтение с начала или конца файла, используя

tailer.readFromStart();
tailer.readFromEnd();
...