spring-webflux - 当有任何新数据时,Spring Webflux 发送事件
问题描述
我正在尝试学习 Spring webflux & R2DBC。我尝试的一个是简单的用例:
- 有一张
book
桌子 - 创建一个
/books
提供文本流并返回的 API ( )Flux<Book>
- 我希望当我点击
/books
一次时,让我的浏览器保持打开状态,并将任何新数据插入到book
表中,它将新数据发送到浏览器。
场景 2,仍然来自book
表格:
- 有一张
book
桌子 - 创建一个
/books/count
返回数据计数book
的API ( )Mono<Long>
- 我希望当我点击
/books/count
一次时,让我的浏览器保持打开状态,并将任何新数据插入/删除到book
表中,它将新计数发送到浏览器。
但它不起作用。在我插入新数据后,没有数据发送到我的任何端点。
我需要点击/books
或/books/count
获取更新的数据。
我认为要做到这一点,我需要使用服务器发送事件吗?但是如何做到这一点并查询数据呢?我得到的大多数样本都是简单的 SSE,它每隔一定的时间间隔发送一次字符串。
有什么样品可以做到这一点吗?
这是我的 BookApi.java
@RestController
@RequestMapping(value = "/books")
public class BookApi {
private final BookRepository bookRepository;
public BookApi(BookRepository bookRepository) {
this.bookRepository = bookRepository;
}
@GetMapping(produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<Book> getAllBooks() {
return bookRepository.findAll();
}
@GetMapping(value = "/count", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Mono<Long> count() {
return bookRepository.count();
}
}
BookRepository.java (R2DBC)
import org.springframework.data.r2dbc.repository.R2dbcRepository;
public interface BookRepository extends R2dbcRepository<Book, Long> {
}
图书.java
@Table("book")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Book {
@Id
private Long id;
@Column(value = "name")
private String name;
@Column(value = "author")
private String author;
}
解决方案
使用处理器或接收器来处理 Book created 事件。
查看我使用 reactor Sinks 的示例,并阅读本文了解详细信息。
或者使用可尾的 Mongo 文档。
一个可尾的 MongoDB 文档可以自动完成工作,检查同一个 repos 的主分支。
推荐阅读
- css - 我怎样才能使用第一个类型或第一个孩子来只针对顶级孩子。不是嵌套的吗?
- javascript - 在通用 javascript 错误上显示 html 消息
- android-studio - Mapbox 未解决的依赖项 android SDK
- javascript - 使用列选择器输入搜索 HTML 表,然后根据结果行显示属于该组的所有行 (Javascript)
- python - opencv卡尔曼滤波器鼠标跟踪器类型错误
- matlab - 如何从simulink获取峰值过冲的值?
- php - 无法更改键值对数组的值
- spring-boot - 使用 JPA 原生查询在 jsonb(JSON 数组)列中查询
- css - css 中的定价标头
- python - 绘制两列的百分比