Я пытаюсь заменить обработчика базы данных PostgreSQL реактивным асинхронным postgres-асинхронным драйвером и потоком вновь вставленных строк на сайт Spring 5 Webflux Reactive websocket client, например, Josh Long, примерный пример, продемонстрированный здесь, и основанный на весенне-реактивной площадке Sébastien Deleuze.
Мой Publisher получает первую row, но затем не возвращает последующие строки. Является ли проблема с моим Observable, моим Publisher или с тем, как я использую postgres-async-driver Db?
public Observable<WebSocketMessage> getObservableWSM(WebSocketSession session){
return
// com.github.pgasync.Db
db.queryRows(sql)
// ~RowMapper method
.map(row -> mapRowToDto(row))
// serialize dto to String for websocket
.map(dto -> { return objectMapper.writeValueAsString(dto); })
// finally, write to websocket session
.map(str -> { return session.textMessage((String) str);
});
}
Затем я RxReactiveStream.toPublisher Observable к моему WebSocketHandler с помощью конвертера RxReactiveStream.toPublisher:
@Bean
WebSocketHandler dbWebSocketHandler() {
return session -> {
Observable<WebSocketMessage> o = getObservableWSM(session);
return session.send(Flux.from(RxReactiveStreams.toPublisher(o)));
};
}
Это захватит первую row из моей инструкции sql, но никаких дополнительных строк. Как продолжить поток дополнительных строк?
В идеале, я думаю, что я хочу, чтобы PostgreSQL эквивалент курсора MongoDB Tailable.