我正在玩spring WebFlux。我已经创建了一个项目,该项目将监听mongo封顶的集合,并在数据到达时返回数据流量。
我正在我的repository方法中使用@tailable
。
我的控制器看起来像这样
@GetMapping("/findall")
public Flux<Product>> findAll() {
return productRepository.findAllProducts().;
}
一切正常。我通过添加一个doOnNext(...)
对此进行了测试,每当有一个新项目添加到我的capped集合中时,doOnNext中的consumer就会被执行。
现在我想让这个显示在浏览器上。我想用ReactJs(我对前端是全新的)。
到目前为止,我还没有找到任何方法在浏览器中显示通量数据。我有什么办法可以做到这一点。
我试过这样的SSE(服务器发送的事件)
componentDidMount() {
this.eventSource = new EventSource('http://localhost:8080/findall');
this.eventSource.addEventListener('product', (data) => {
let json = JSON.parse(data.data)
this.state.products.push(json.name)
this.setState ( {
products : this.state.products
})
});
}
这工作起来非常好,但要使其工作,我必须像这样更改服务器端代码
@GetMapping("/findall")
public Flux<ServerSentEvent<Product>> findAll() {
return productRepository.findAllProducts().map(data -> ServerSentEvent.<Product>builder().event("product").data(data).build());
}
在我看来,这有点紧密耦合,因为UI应该知道要监听的事件类型('product')。
有没有其他方法可以从UI端处理事件流(特别是使用reactjs
)?
您不应该为了将数据流化到浏览器而更改控制器。下面的代码段应该可以工作:
@GetMapping(path="/findall", produces=MediaType.TEXT_EVENT_STREAM_VALUE)
@ResponseBody
public Flux<Product>> findAll() {
return productRepository.findAllProducts();
}
如果您想查看完整的工作示例,您可以在本研讨会和本示例应用程序中看到该功能。
我的理解是单声道 我说得对吗? 如果没有,单声道之间的区别是什么
请查看以下使用RestTemplate的controller代码(添加注释): 现在,我正试图通过反应式编程实现同样的目标。我现在使用WebFlux中的WebClient和Mono。但是,我很困惑如何将结果结合起来?看一看下面的代码(在任何地方都使用Mono,其余代码保持不变) 问题1:我们如何整合一切,形成一个Mono对象,并将其作为响应发送出去? 问题2:“CourseInfo CourseI
在https://github.com/spring-projects/spring-framework/blob/master/spring-context/src/main/kotlin/org/springframework/context/support/BeanDefinitionDsl.kt该注释显示了如何通过新的“函数bean定义Kotlin DSL”定义SpringBean。我还发
我希望为每个请求生成唯一的traceId,并将其传递给所有服务。在SpringMVC中,使用MDC上下文并将traceId放在头文件中相当容易,但在反应式堆栈中,由于ThreadLocal,它根本不起作用。 一般来说,我希望使用单个traceId记录我拥有的每个服务上的每个请求和响应,该traceId可以识别整个系统中的特定操作。 我试图根据文章创建自定义过滤器:https://azizulhaq
我试图让服务器发送的事件与Mozilla Firefox一起工作。给定一个Spring Boot的网络服务 使用Chrome浏览器或Edge(始终是最新版本)可以正常工作。我可以在网络分析器选项卡中看到未完成的请求,并且每秒都会显示一个新的时间戳。 然而,当我使用Firefox(84.0.2或更早版本)时,请求也会显示在网络选项卡中,但不会显示响应头或流数据。当我终止Spring后端时,Firef
我正在使用SpringWebSockets,我想从存储库返回一个项目列表 我怎么能在WebSocket会话中发送此列表 这是如何将项目列表发送到websocket的处理程序方法
我正在使用reactive mongodb开发简单的spring webflux演示应用程序,我想按姓名读取员工的所有数据,但不包括姓名字段“joe”、“Sara”、“joe”、“Sara”,我有如下代码: //仓库接口 //服务类
我有一个Restapi,它将从一个网站下载pdf文件,然后将pdf文件返回给调用者。 使用下面的代码,我可以得到