Я пытаюсь заменить обработчика базы данных 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.