问题标签 [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 投票
0 回答
168 浏览

spring-webflux - 如何验证 Webflux/Webclient 中的错误正文

我有一个端点的处理程序方法,就是这个:

如您所见,如果验证器失败,该方法将返回错误请求错误,并以 ErrorResponse 作为正文。

我使用 WebClient 来测试它。WebClient 有一个过滤器,用于在出现错误状态时获取 ErrorResponse:

但它不起作用。当我调试测试时,似乎调用 exchange() 方法时会在调用端点之前返回异常。我在做什么坏事?

0 投票
0 回答
56 浏览

javascript - 保存 WebSocketSession 并通知该会话,

我正在保存 webSocketSession,并在一种方法中检索该会话并向其发送消息,但在我的 websocket 客户端的 .html 文件中看不到该消息,

我有一个用于 WebsocketClient 的 .html 和 .js 文件,在那个 html 文件上我可以看到 MessageSentDirectly 但我没有看到 MessageAfterRetreiveSession 字符串,

为什么我在调用 sendNotification 方法时没有在客户端收到 MessageAfterRetreiveSession?

0 投票
1 回答
275 浏览

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() 是什么

0 投票
0 回答
11 浏览

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

我写的代码如下。

这工作正常,但它太慢了

想知道为什么它很慢,我该如何提高速度?

请告知要结合哪个操作,以免出现速度问题

0 投票
1 回答
491 浏览

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线程池的方式。

所以,我的问题是:

  1. 为什么带有 body 的 POST 方法会被http-nio线程池处理?
  2. 这个http-nio线程池应该是一个较小的线程池,那么为什么带有 body 的 POST 方法(我认为被认为是阻塞代码)落在了它们身上?
  3. 有意义返回 newUser.subscribeOn(Schedulers.boundedElastic()); 或者它应该保持在同一个线程上?
0 投票
2 回答
186 浏览

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,即使它有更多的空间来执行更多的请求。

希望为此找到一些解决方案...

0 投票
1 回答
406 浏览

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 应用程序一起使用?还是我需要将其作为单独的微服务并调用相关端点?

0 投票
1 回答
117 浏览

java - 在反应式编程中如何优雅地关闭数据库连接池中的连接

最近在学习 Spring WebFlux。当我尝试关闭连接池中的连接时,它不起作用!

代码是这样的:

我注意到该close函数会返回一个Publish< Void>对象,但我不知道如何同时处理两个数据流(Mono< Result>Publish< Void>)!

有人可以帮助我吗?

0 投票
1 回答
347 浏览

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

似乎找不到控制器,因为在控制器中添加打印语句不会打印任何内容。下面是代码->

0 投票
1 回答
29 浏览

spring-webflux - 如何将 Flux-Results 放入一组 Mono-Bean

我有以下情况:我有一个 ProductFamily 有一组产品。

我从数据库加载 ProduktFamily,然后我想加载其产品并将它们插入 ProduktFamily.products。

在 Spring MVC 中很容易(因为 JPA),但使用 Webflux 我正在苦苦挣扎。我试过这个,但它不起作用。ProduktFamily.products-set 为空。

服务:

ProduktfamilyDatabaseFacade:

ProduktfamilyDatabaseFacade:

有没有办法从 Mono 开始,然后遍历 Flux 以将每个产品添加到 Productfamily,然后返回 ProductfamilyRS?

谢谢