问题标签 [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 回答
108 浏览

spring - 从响应式 Spring 服务调用阻塞 feign 客户端

我试图从反应弹簧通量中调用生成的假装客户端,如下所示:

调用已执行,但是当我尝试从反应式安全上下文(在 requets 拦截器中)检索 jwt 令牌时,如下所示:

……

上下文为空。由于我对反应弹簧还很陌生,所以我肯定会搞砸一些愚蠢而重要的事情。

0 投票
1 回答
369 浏览

spring - 从 spring webflux WebFilter 设置协程上下文

如何从 spring webflux WebFilter 设置协程上下文?可能吗?我知道我可以使用反应器上下文,但我无法设置协程上下文。

更多细节:

我想使用 MDCContext 将 MDC 传播到 slf4j。例如,我想从 HTTP 标头中获取 MDC,然后我希望这些值自动传播到我编写的任何日志中。

目前,我可以:

  • 我在 WebFilter 中设置反应器上下文
  • 在每个控制器中,我从反应器上下文中获取值并将它们放入 MDCContext (协程)

如您所见,这不是很方便,因为我必须在控制器中添加额外的代码。

有没有办法自动将 Reactor 上下文转换为协程上下文?我知道我可以使用 ContextInjector 和 ServiceLoader 反之亦然(请参阅https://github.com/Kotlin/kotlinx.coroutines/issues/284#issuecomment-516270570),但似乎没有这种反向转换机制。

0 投票
0 回答
78 浏览

spring - spring webflux中sse区间的解决方法

我使用 Spring webflux 构建,服务器发送事件一个端点,当 MongoDB 更改时需要通知我的前端。

但要实现这一点,我必须使用 Flux.interval 并逐秒阅读我的 MongoDb。

有没有更好的方法在 MongoDb 更改时通知我的前端?

我的代码

0 投票
1 回答
430 浏览

java - r2dbc validate if id exists and then insert row

I have following sql query with r2dbc:

And my problem is thet rel_id is constraint(foreign key) to another table Person. So, I would like to check if rel_id exists in table Person and if exists then insert into relation. Or maybe throw some exception if not founded in Person table. I don't know what is prefered way for this case.

0 投票
1 回答
2335 浏览

caching - 如何使用 Mono 的“缓存”方法

我是spring webflux的初学者。在研究时,我发现了一些代码,例如:

“缓存”这个名字告诉我缓存的东西,但是缓存在哪里以及如何检索缓存的东西?是咖啡因之类的吗?

0 投票
1 回答
30 浏览

webclient - 如何检查Webclient reposebody?

我通过 WebClient 开发了外部 API,但我不知道如何检查响应正文..

和测试代码

日志内容

它只是打印“MonoMap”..我如何检查响应正文?

0 投票
1 回答
661 浏览

spring - 未找到 ServerHttpSecurity bean

我有一个安全配置类,其中有一个 SecurityWebFilterChain bean。这个 bean 需要一个 ServerHttpSecuirty 实例,但是 spring 说它找不到任何该类型的 bean,尽管在外部库 (org.springframework.security.config.annotation.web.reactive.ServerHttpSecurityConfiguration) 中创建了一个。我在 github 页面上看到了这个问题,他们说尝试不同的版本,但我使用的是 spring boot 2.4.5,所以它应该可以工作。

我的安全配置类:

我的应用类

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class}) 公共类 TestPlatformBackendApplication {

}

外部库 Bean:

0 投票
0 回答
43 浏览

java - 我对 WebFlux 的行为有疑问

在使用 WebFlux 开发后端服务器时,我不理解据说是优势的部分内容。

(**如果10个用户同时发出请求,写在假设从RDB取数据需要10秒,处理数据需要10秒。)

当 Spring MVC 中总共需要 10 个线程并且 10 个用户可以在每个 20 秒后收到响应时,

在WebFlux中,一共1个线程可以接收用户请求,通过该线程可以向RDB请求数据,即使RDB响应来了,也可以进行处理,给用户一个响应。

(线程数大致写了一个例子。)

最终处理所需要的时间总共是20秒,和现有的Spring MVC一样,但是我明白了用更少的线程处理是有优势的。

如上所述,我认为它有很多优点。

许多文章说,使用 WebFlux 时,数据处理消耗的内存更少,这是一个额外的优势。

如上例,如果一共从RDB中取出10条数据并处理,发送给用户的结果是相同的10条,如果结果是作为单个Json而不是Stream类型

考虑到每个数据1兆字节,MVC还需要存储来自RDB的数据,所以10兆字节的内存和10兆字节的处理数据总共需要20兆字节的内存。

WebFlux也是从RDB导入的10兆数据和10兆处理后的数据,那到底是不是20兆?

还是说RDB可以一次取10次数据,而不是一次取10个数据,这样每次取的1兆数据和10兆处理后的结果数据可以合并为11兆? (如果我总共要了 10 件这样的物品,我可以一次带一件吗..?)

0 投票
0 回答
190 浏览

spring-boot - 为什么我的 Spring MVC(Tomcat NIO、RestHighLevelClient)在负载测试中优于 Webflux(Netty、ReactiveElasticsearchClient)?

我是响应式编程和 webflux 的新手,我正在评估从带有 WebMVC 的 Servlet 堆栈上的 Spring Data Elasticsearch 应用程序迁移到带有 Spring Webflux 的响应式堆栈。

我开发了两个相同的简单 Spring Boot 应用程序,它们可以使用 Spring Data Elasticsearch Repositories 执行 CRUD 操作。

测试是用户将文档索引/保存到 Elasticsearch。负载测试是 500 个并发用户,启动时间 20 秒,每个用户 20 次迭代(总共 10000 个文档)

我期待 Netty 上的 Webflux 优于 Tomcat 上的 MVC,尤其是在有更多并发用户的情况下。但结果却相反。Netty 的响应时间几乎是 tomcat 的两倍,我需要增加响应式客户端中的 maxConnection 队列,因为我收到了 ReadTimeoutExceptions。那么我做错了什么?

问题:

  1. Netty 上的 Webflux 不应该能够更好地处理更多并发用户吗?
  2. 为什么响应时间如此之长?...并且 netty 的吞吐量较低?
  3. 我是否需要以不同的方式配置响应式客户端以获得更好的性能?
  4. 拥有数百个 NIO 线程的 Tomcat 能否只处理更多请求并且比 Netty 事件循环更快?

这些应用程序具有以下堆栈:

Spring Web MVC:

  • Tomcat (spring-boot-starter-tomcat:jar:2.4.2:compile)

  • RestHighLevelClient 用于对 Elasticsearch 的请求

控制器:

服务:

Spring Webflux:

  • Netty (spring-boot-starter-reactor-netty:jar:2.4.2:compile)

  • ReactiveElasticSearchClient 用于对 Elasticsearch 的请求

    }

处理程序:

服务:

MVC ResponseTimesPercentiles: 500 个用户,20 次迭代,总共 10000 个文档

Webflux ResponseTimesPercentiles: 500 个用户,20 次迭代,总共 10000 个文档

0 投票
0 回答
10 浏览

inputstream - 如何使用 webflux Part 类型?

从 webflux 收到零件类型数据后,我将在 S3 上上传零件类型数据。

在我的代码中

我必须从这里获取输入流,但我不知道该怎么做。如何提取和使用数据? 在此处输入图像描述