问题标签 [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-webflux - 如何验证 Webflux/Webclient 中的错误正文
我有一个端点的处理程序方法,就是这个:
如您所见,如果验证器失败,该方法将返回错误请求错误,并以 ErrorResponse 作为正文。
我使用 WebClient 来测试它。WebClient 有一个过滤器,用于在出现错误状态时获取 ErrorResponse:
但它不起作用。当我调试测试时,似乎调用 exchange() 方法时会在调用端点之前返回异常。我在做什么坏事?
javascript - 保存 WebSocketSession 并通知该会话,
我正在保存 webSocketSession,并在一种方法中检索该会话并向其发送消息,但在我的 websocket 客户端的 .html 文件中看不到该消息,
我有一个用于 WebsocketClient 的 .html 和 .js 文件,在那个 html 文件上我可以看到 MessageSentDirectly 但我没有看到 MessageAfterRetreiveSession 字符串,
为什么我在调用 sendNotification 方法时没有在客户端收到 MessageAfterRetreiveSession?
spring-boot - 使用 WebFlux 调用 Restful 服务的错误处理示例
我正在寻找一个使用 WebFlux 进行错误处理的简单示例。我在网上阅读了很多东西,但找不到适合我想要的东西。
我正在使用 Spring Boot 2.45
我正在调用这样的服务:
我所有的服务都返回被反序列化为 ResposeObject 的 Json,它看起来像这样:
数据只是服务调用结果的对象映射。如果有错误,显然成功是错误的。
当我最终做 aResponseObject response = mono.block()
时,我想每次都得到一个 ResponseObject,即使有错误。我的服务返回一个 ResponseObject,即使它返回 400 的 http 状态,但 WebFlux 似乎拦截了这个并抛出异常。显然,在甚至没有调用服务的情况下也可能存在 400 和 500 错误。但我仍然想将收到的任何消息包装到 ResponseObject 中。如何消除所有异常并始终返回 ResponseObject?
更新 只是想澄清一下服务本身不是 Reactive Webflux 服务。它没有返回 Mono。相反,它正在调用其他 Restful 服务,我想使用 Webflux 来做到这一点。所以我所做的就是调用外部服务,然后这个服务执行一个 block()。在大多数情况下,我会调用多个服务,然后执行 Mono.zip 并调用 block() 来等待所有服务。
这似乎是我想做的:Spring Webflux : Webclient : Get body on error,但仍然无法正常工作。不确定 exchange() 是什么
spring-boot - 两种助焊剂组合操作太慢。我应该如何重构它?
有两种助焊剂
一种是索引号为 1,2,3...5 的通量
另一种是带有索引和布尔映射信息的通量
本次助焊剂的大小与第一次助焊剂不同
我想要的是返回 5 个索引的真/假通量
例>
通量 1 = {1,2,3,4,5} - 大小为 5
通量 2 = {(1,true), (4,true)} - 大小为 2
有了这个,我想输出以下内容:{true, false, false, true, false}。- 尺寸 5
我写的代码如下。
这工作正常,但它太慢了
想知道为什么它很慢,我该如何提高速度?
请告知要结合哪个操作,以免出现速度问题
java - Spring Webflux / Reactor:reactor-http-nio vs boundedElastic
我对每个请求所属的线程模型的一些反应器概念有点困惑。我阅读了https://projectreactor.io/docs/core/release/reference但仍不清楚。让我们看一个例子:
日志:[boundedElastic-4] - INFO - findAll 请求到达
在 Schedulers.boundedElastic 线程池中执行 GET 方法(根据文档用于 I/O 绑定工作)
日志:[reactor-http-nio-6] - INFO - 保存请求到达
POST 方法落在http-nio线程池上。
没有正文的 POST 也落在 Schedulers.boundedElastic 上。
这就是我可以配置http-nio线程池的方式。
所以,我的问题是:
- 为什么带有 body 的 POST 方法会被http-nio线程池处理?
- 这个http-nio线程池应该是一个较小的线程池,那么为什么带有 body 的 POST 方法(我认为被认为是阻塞代码)落在了它们身上?
- 有意义返回 newUser.subscribeOn(Schedulers.boundedElastic()); 或者它应该保持在同一个线程上?
performance - WebFlux WebClient 性能不会触及 CPU 的最大值
我正在编写一个网络密集型 WebFlux 应用程序。当收到请求时,应用程序向另一个外部服务器请求并接收一些东西,然后回复原始请求者。我说的是 WebFlux 应用程序,我在调用外部服务器时使用的是 WebClient。
应用程序的性能不是那么令人满意。我认为它应该触及最大 CPU 资源,最大 CPU 下的最大 TPS。但它显示低 tps,cpu 仅为 30 或 40%。为什么它不再使用 CPU 来获得更多的 TPS,即使它有更多的空间来执行更多的请求。
我将它与没有外部调用(WebClient)的任务进行了比较,它显示了最大 CPU 资源使用情况下的完整 TPS。
====
示例代码:https ://github.com/mouse500/perfwebf
用于 WebClient 性能的 perfwebf 示例项目
/workloadwexcall : 使用外部调用的工作负载
/workloadwoexcall : 仅使用 cpu 作业的工作负载(但有 1ms 延迟)
外部调用是用 prj 内的简单节点服务器实现的,包括所有内容。
您可以构建 Dockerfile 并使用 docker 运行
并准备jmeter什么的,
test1 : 使用超过 200 个线程调用 /workloadwexcall api => 在 perfwebf 服务器上显示 30~40% 的 cpu 级别
test2 : 使用超过 200 个线程调用 /workloadwoexcall api => 在带有 m 的 perfwebf 服务器上显示几乎 100% 的 cpu 级别
======
到目前为止的观察,
我在 AWS EC2(8 核,16 G Mem)上进行了测试,
我认为外部服务器足够简单和强大来做出反应
当测试1,
服务器的大量线程等待
======
我不知道,
netty epoll 遇到困难的情况?
docker net机制不满足?(我也在没有 docker 的情况下进行了测试,结果相同)
Linux内核不能满足困难的情况?
AWS EC2 网络带宽性能低?
问题是,为什么它不再使用 CPU 来获得更多的 TPS,即使它有更多的空间来执行更多的请求。
希望为此找到一些解决方案...
spring - 如何在 Webflux 应用程序上同时使用反应式和非反应式 MongoDB 模板
目前,我正在为我的项目开发一个 springboot webflux 应用程序,其中我使用了响应式蒙戈模板和其他响应式实现。现在我有一个由 WebMvc 实现的遗留 Spring Boot 应用程序(这里我不使用真正的 springboot 应用程序。只使用通过 mongoDB 配置实现的核心服务),并且它使用(普通)mongo-template 来实现其服务。在我的 webflux 应用程序中,我正在尝试使用旧应用程序中定义的旧服务。
为此,我尝试使用组件扫描 ( com.a.b.cservice.core.configuration
) 导入旧版应用程序并遇到一些错误。问题是它不会正确检测应用程序和非反应性 mongo 模板。
spring 是否只支持 1 个 mongo 连接?这些是我得到的错误日志;
是否有任何解决方法可以将旧版应用程序与带有 mongoDb 的 webflux 应用程序一起使用?还是我需要将其作为单独的微服务并调用相关端点?
java - 在反应式编程中如何优雅地关闭数据库连接池中的连接
最近在学习 Spring WebFlux。当我尝试关闭连接池中的连接时,它不起作用!
代码是这样的:
我注意到该close
函数会返回一个Publish< Void>
对象,但我不知道如何同时处理两个数据流(Mono< Result>
和Publish< Void>
)!
有人可以帮助我吗?
spring-boot - 使用wiremock测试webflux代码时出现500错误
我有带有端点“/用户和用户服务类的用户控制器类的spring webflux应用程序。用户服务类调用外部api。我正在尝试使用wiremock和junit 5来测试服务类来模拟外部api ..但是我遇到了错误->
021-07-30 18:22:52.511 错误 16974 --- [o-auto-1-exec-2] oaccC[.[.[/].[dispatcherServlet] : Servlet.service() 用于 servlet [dispatcherServlet] 抛出例外
java.net.ConnectException:连接被拒绝
代码在路径上传:https ://github.com/neeleshsethi/wiremockdemp/tree/master
似乎找不到控制器,因为在控制器中添加打印语句不会打印任何内容。下面是代码->
spring-webflux - 如何将 Flux-Results 放入一组 Mono-Bean
我有以下情况:我有一个 ProductFamily 有一组产品。
我从数据库加载 ProduktFamily,然后我想加载其产品并将它们插入 ProduktFamily.products。
在 Spring MVC 中很容易(因为 JPA),但使用 Webflux 我正在苦苦挣扎。我试过这个,但它不起作用。ProduktFamily.products-set 为空。
服务:
ProduktfamilyDatabaseFacade:
ProduktfamilyDatabaseFacade:
有没有办法从 Mono 开始,然后遍历 Flux 以将每个产品添加到 Productfamily,然后返回 ProductfamilyRS?
谢谢