问题标签 [spring-webflux]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
26628 浏览

java - Spring WebFlux 和 Reactor 的线程模型

目前正在使用Spring 5.0.0.RC2Reactor 3.1.0.M2Spring Boot 2.0.0.M2试验反应式编程。

想知道WebFlux 和 Reactor 用于正确编码应用程序和处理可变状态的并发和线程模型。

Reactor 文档指出该库被认为与并发无关,并提到了调度程序抽象。WebFlux 文档没有提供信息。

然而,当通过 Spring Boot 使用 WebFlux 时,定义了一个线程模型。

从我的实验中,我得到了:

  • 该模型既不是 1 个事件线程,也不是 1 个事件线程 + 工作者
  • 使用了几个线程池
  • reactor-http-nio-3 ”线程:可能每个核心一个,处理传入的 HTTP 请求
  • Thread-7 ”线程:由对 MongoDB 或 HTTP 资源的异步请求使用
  • parallel-1 ”线程:每个内核一个,由 Reactor 中的 Schedulers.parallel() 创建,由延迟运算符等使用
  • 共享可变状态必须由应用程序同步
  • ThreadLocal(用于应用程序状态、MDC 日志记录等)不是请求范围的,所以不是很有趣

它是否正确 ?WebFlux 的并发和线程模型是什么:例如默认的线程池是什么?

感谢您的信息

0 投票
2 回答
6502 浏览

java - 如何使用 Spring 5 Reactive WebSocket 检测断开连接的客户端

我设法WebSocketHandler使用 Spring 5 Reactive WebSocket 支持(第 23.2.4 章)创建了一个。接收和发送一切正常。但是,我不知道如何检测客户端断开连接。HttpServerWSOperations当调试客户端断开连接时,它会在类(包)中的服务器端停止,在netty.http.server那里它确实检测到CloseWebSocketFrame.

任何建议如何处理客户端断开连接?

0 投票
1 回答
3535 浏览

spring - 带有 Spring WebFlux 安全性的 ClassNotFoundException

我遇到以下问题:

我正在尝试设置一个包含 Spring Webflux 和 Spring Security 的基本 Spring Boot (2.0.0.M2) 项目。

我的 pom.xml 看起来像这样(通过 start.spring.io 生成):

弹簧安全配置:

我没有进一步了解,因为我在启动时遇到异常:

所以我认为整个org.springframework.security.web.server包不在类路径上,尽管它应该在那里,因为它包含在API 文档中。

好像我做错了什么,但我不知道是什么。

0 投票
0 回答
627 浏览

java - Spring 5 WebClient NIO 特性和问题域,使用 Spring Webflux

我正在使用最新版本的 Spring - Spring 5。

我正在开发http客户端的WebService“聚合器”,类似于将请求路由到外部WebServices,接收响应接收响应,进行一些数据操作并回复给我的HTTP服务的客户端。

为了在我的应用程序中创建 http 客户端,我基本上使用可用于构建反应式应用程序的新 WebClient。

我的代码遵循以下风格:

稍后,我会在自己的 HTTP API 中公开此调用的结果,为简单起见,我不会在此处发布。

作为这个应用程序的一部分,我使用 Netty 作为嵌入式 HTTP 层为我的应用程序的客户端提供服务。(当我在 Spring Boot Starter 中选择Spring Webflux时,它也是默认的)。

我的用例不一定是响应式应用程序,我不需要执行任何流式处理或背压逻辑。

但是,我的理解是,使用 Netty,我可以以非阻塞方式对外部 HTTP 服务进行所有请求,这对我的用例很有用。

问题是:

1. 关于 NIO 功能是否正确,我可能从中受益?

2. 如果正在使用 Spring 5 的这个 WebClient 接口,我会失去一些东西,或者在我的用例中获得一些东西,因为我没有做反应性的东西吗?

3. 应该org.springframework.web.reactive.function.client.WebClient满足我的要求吗?

4. WebClient 是构建功能管道的好选择吗?我问是因为我打算获取一次调用的结果,然后进行后续调用,并且我打算使用CompletableFutures,我在 WebClient API 中看到了它?

0 投票
4 回答
11450 浏览

java - Spring Webflux,如何转发到 index.html 以提供静态内容

spring-boot-starter-webflux(Spring Boot v2.0.0.M2) 已经配置spring-boot-starter-web为在资源中的静态文件夹中提供静态内容。但它不会转发到 index.html。在 Spring MVC 中,可以这样配置:

如何在 Spring Webflux 中做到这一点?

0 投票
1 回答
865 浏览

java - 无法绑定到 Mono通过@PathVariable?

我正在使用 spring boot 2.0.0.M2 遵循 Simon Basle 的“Reactor by Example”中的代码。它就像一个魅力。但是,当我尝试将路径变量绑定到 Mono 并发送请求http://localhost:8080/monohello/Hero时,它的响应如下:

{“时间戳”:1500534277626,“状态”:500,“错误”:“内部服务器错误”,“消息”:“无法将类型'java.lang.String'的值转换为所需类型'reactor.core.publisher .Mono';嵌套异常是 java.lang.IllegalStateException:无法将类型“java.lang.String”的值转换为所需类型“reactor.core.publisher.Mono”:找不到匹配的编辑器或转换策略”、“路径” : "/monohello/英雄" }

下面是控制器:

0 投票
4 回答
16042 浏览

spring - WebExceptionHandler : 如何使用 Spring Webflux 编写正文

我想通过添加 WebExceptionHandler 来处理我的 api 异常。我可以更改状态代码,但是当我想更改响应的主体时我被卡住了:例如添加异常消息或自定义对象。

有人有例子吗?

我如何添加我的 WebExceptionHandler :

0 投票
1 回答
3259 浏览

spring - Spring Data REST 是否支持响应式 crud 存储库?

我有非常简单和标准的 OrderRepository:

使用以下命令访问服务器后:

我收到以下回复:

0 投票
11 回答
69817 浏览

spring-boot - 如何在 Spring WebFlux 中记录请求和响应主体

我想在带有 Kotlin 的 Spring WebFlux 上的 REST API 中集中记录请求和响应。到目前为止,我已经尝试过这种方法

这里请求方法和路径日志成功但正文是Mono,那我应该如何记录呢?是否应该反过来,我必须订阅请求正文Mono并将其记录在回调中?另一个问题是ServerResponse这里的接口无法访问响应正文。我怎么能在这里得到它?


我尝试过的另一种方法是使用WebFilter

同样的问题:请求正文是Flux,没有响应正文。

有没有办法访问来自某些过滤器的日志记录的完整请求和响应?我不明白什么?

0 投票
1 回答
612 浏览

spring-boot - 异步弹簧安全 WebFilter

如何使用 SecurityContextHolder 摆脱 WebFilter 中的阻塞。我试图将身份验证设置放在 Mono 的 doOnSuccess(...) 和 thenEmpty(...) 中,但它从未被调用过。