问题标签 [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.
spring - 从响应式 Spring 服务调用阻塞 feign 客户端
我试图从反应弹簧通量中调用生成的假装客户端,如下所示:
调用已执行,但是当我尝试从反应式安全上下文(在 requets 拦截器中)检索 jwt 令牌时,如下所示:
……
上下文为空。由于我对反应弹簧还很陌生,所以我肯定会搞砸一些愚蠢而重要的事情。
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),但似乎没有这种反向转换机制。
spring - spring webflux中sse区间的解决方法
我使用 Spring webflux 构建,服务器发送事件一个端点,当 MongoDB 更改时需要通知我的前端。
但要实现这一点,我必须使用 Flux.interval 并逐秒阅读我的 MongoDb。
有没有更好的方法在 MongoDb 更改时通知我的前端?
我的代码
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.
caching - 如何使用 Mono 的“缓存”方法
我是spring webflux的初学者。在研究时,我发现了一些代码,例如:
“缓存”这个名字告诉我缓存的东西,但是缓存在哪里以及如何检索缓存的东西?是咖啡因之类的吗?
webclient - 如何检查Webclient reposebody?
我通过 WebClient 开发了外部 API,但我不知道如何检查响应正文..
和测试代码
日志内容
它只是打印“MonoMap”..我如何检查响应正文?
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:
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 件这样的物品,我可以一次带一件吗..?)
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。那么我做错了什么?
问题:
- Netty 上的 Webflux 不应该能够更好地处理更多并发用户吗?
- 为什么响应时间如此之长?...并且 netty 的吞吐量较低?
- 我是否需要以不同的方式配置响应式客户端以获得更好的性能?
- 拥有数百个 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 个文档