问题标签 [reactor-netty]

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 回答
1836 浏览

spring - Spring 5.1 中的测试失败

我尝试将我的示例代码升级到 5.1 和 Spring Boot 2.1。Reactor Netty 在新版本中进行了重构,一些 API 发生了变化,我根据新版本的 Reactor Netty 更改了我的代码。

HttpServer对于 Reactor Netty。

集成测试:

当我运行测试时,我得到了这样的异常。

更新:通过重构我的测试代码解决了这个问题。

0 投票
1 回答
2090 浏览

spring-webflux - Reactive Redis (Lettuce) 总是发布到单线程

我正在使用 Spring Webflux(带有 spring-reactor-netty)2.1.0.RC1 和 Lettuce 5.1.1.RELEASE。

当我使用 Reactive Lettuce API 调用任何 Redis 操作时,执行总是切换到同一个单独的线程 (lettuce-nioEventLoop-4-1)。

这导致性能不佳,因为所有执行都在该单个线程中成为瓶颈。

我知道publishOn每次调用 Redis 时我都可以使用它来切换到另一个线程,但这很容易出错并且仍然不是最优的。

有什么办法可以改善吗?我看到 Lettuce 提供了 ClientResources 类来自定义线程分配,但我找不到任何方法将它与 Spring webflux 集成。

此外,对于粗心的开发人员来说,当前的行为会不会很危险?也许应该稍微调整一下默认值。我想理想的情况是 Lettuce 可以重用来自 webflux 的相同事件循环。

我正在添加这个 Spring Boot 单类片段,可用于重现我所描述的内容:

如果我继续调用/test端点,我会得到以下输出:

0 投票
1 回答
866 浏览

project-reactor - Reactor-netty TCPClient 无法接收响应

我正在尝试对缺少文档的最新 reactor-netty 版本进行一些项目前体验;我使用的是 0.8.0.M3 版本。

我用这个 tcp 服务器开发了一个简单的 spring boot 应用程序,它可以正确启动并且似乎可以工作:

如果我尝试使用客户端进行测试,交互似乎是正确的,但我无法收到任何响应:

查看窃听日志似乎客户端分别将每个 int 作为字符串发送,而服务器仅接收一个聚合字符串“0123456789”并仅发送一个响应。客户端没有收到任何东西,并且锁存器也没有减少 1 并且保持在 10(我希望至少收到一个聚合响应)。

谁能解释客户端出了什么问题以及如何由服务器分别接收每个整数?

谢谢

0 投票
1 回答
1305 浏览

java - 使用 Reactor Netty 配置 Spring Boot 以监听 2 个端口

您如何使用 Reactor Netty 配置 Spring Boot 以侦听两个单独的端口(除了 Actuator 端口)并将单独@RestController的 ' 绑定到每个端口?

这是用例:我有一个有四个 RESTful API 调用的有界上下文。两个会外露,两个不能。每一对都将以自己的方式进行保护,但我们需要额外的保护层,以使内部调用无法在外部路由。像 Kubernetes 这样的平台通过仅将流量路由到我们专门公开的端口来支持这一点。

所以我希望 Reactor Netty 监听以下端口并仅将适当的请求路由到每个端口:

  1. 8080请求仅由ExternalRestController类响应(默认配置或用 轻松覆盖server.port=8080)。
  2. 8081请求仅由InternalRestController类响应。
  3. 8082请求由 SpringBoot 的 Actuator 支持响应(易于配置management.server.port=8082

如果使用注释的 Spring Boot 注释模型无法做到这一点@RestController,我会考虑使用新的RouterFunction支持。

0 投票
1 回答
7436 浏览

spring-boot - Spring Webflux Webclient设置Connection keepAlive时间

刚开始使用 Spring Webflux Webclient,只是想知道 Http Connection 的默认 KeepAlive 时间是多少?有没有办法增加keepAlive时间?在我们的 Rest Service 中,我们可能每五分钟收到一个请求,该请求需要很长时间来处理。它需要 500 秒 - 10 秒之间的时间。但是在负载测试中,如果我发送频繁的请求,处理时间小于 250 毫秒。

0 投票
0 回答
713 浏览

java - Netty worker 和 boss 线程配置性能问题

环境-Netty 4.1.16。爪哇 8

创建了一个服务器,定义了 2 个老板和 8 个工作线程和 100 个业务处理线程,

问题是我没有通过这种配置获得性能。我的服务器仅在 1 秒内处理 35 个请求。

如果我更改老板线程 = 1 和工作线程 = 1,那么也有相同的响应大小。在这种情况下也服务 35 个请求。

我担心线程是否正常工作?

问题是 1 个工作线程它服务 35 个请求,所以我配置了 8 个工作线程,所以它应该在 1 秒内服务 36 * 8 = 288 个请求。

我是netty的新手。请帮忙。提前致谢

0 投票
0 回答
119 浏览

netty - Spring:单线程消费者

一些工作人员(侦听器)必须以单线程方式一一处理消息。(是的,这是弱点,我知道。)看起来,我不知道如何正确设置它。应用程序挂在 Spring5 上,这阻止了我从 Spring4 移动。

我想强调:应用程序应该有多个单线程侦听器。一个队列一个监听器。我的意思是一些 . 一个队列没有多个侦听器。

我使用科特林。但问题在于配置甚至库错误。

我对每种监听器都使用了SINGLE ExclusiveListener Container Factory。
SINGLE rabbit Connection Factory(CachingConnectionFactory 的实例)
我不知道是不是这样。

麻烦的是:

有时应用程序在 Spring5 上挂起。在 Spring 4 上,相同的配置运行良好。有趣的是,它在机器上使用了 KVM 虚拟化。即使使用 Spring5,Virtualbox 也能很好地工作。

jstack https://pastebin.com/MXdHcVAK
top -H -p 显示 PID 42 消耗所有 cpu

前段时间,我尝试迁移到 Spring5,但遇到了同样的麻烦。我以为是 reactor-netty lib 问题,但没有运气,他们无法重现https://github.com/reactor/reactor-netty/issues/381

我认为这两件事 - 配置和悬挂 - 是绑定的。但我无法深入。

更新

关于转储:如果我理解一切正确(我不确定),"tcp-client-loop-nio-4" #24 daemon prio=5 os_prio=0 tid=0x00007fc0de44d800 nid=0x2a runnable则 jstack 中的条目消耗的 cpu。但我不知道该怎么办。

更新2

Spring Integration 和 Spring AMQP 的首席开发人员 - @GaryRussell - 批准此配置。所以我认为这个问题是关于netty的。

更新3

此问题已通过 netty 版本升级修复。

0 投票
0 回答
1817 浏览

spring-boot - 在 Spring Boot 2 (WebFlux) 中增加 HTTP Post 的最大请求大小

我收到了HTTP 413 Payload Too Large在请求正文中使用 38Kb JSON 数据发出 POST 请求的情况。我使用 WebFlux、Spring Boot 2.0.5 和 Netty。

谁能告诉我如何增加 WebFlux 的最大请求大小?

0 投票
1 回答
557 浏览

java - Spring Integration 流程失去了订阅者

我有 SI 流,org.springframework.web.reactive.socket.WebSocketMessage它使用ByteBuf. 在某些时候,我的流程中发生了异常:

之后,处理所有二进制 Web 套接字消息将失败,并出现以下异常:

谁能指出我尝试解决问题的任何方向?同样,在哪些情况下 SI EIP 组件(路由器、转换器、过滤器、服务激活器)会取消订阅频道?

作为参考,通道类型为org.springframework.integration.channel.FluxMessageChannel

编辑:

我的流程如下所示:

(我知道过滤器在这里更合适,我计划稍后重构)

@ArtemBilan 带有示例的仓库在这里:https ://github.com/ioreskovic/Spring-Integration-flow-loses-subscriber

0 投票
2 回答
8514 浏览

spring-webflux - 如何为 Spring WebFlux 配置 netty 连接超时

我在 AWS 负载均衡器后面运行 spring 云网关(我理解它是在 Spring Webflux 上构建的),我收到间歇性的 502 错误。经调查,问题似乎与负载均衡器和我的节点之间的连接超时有关。从一些调查看来,底层网络服务器的默认超时时间为 10 秒。我使用以下命令确定了这一点...

虽然我可以将负载均衡器上的 idleTimeout 设置为 10 秒以下,但感觉效率非常低。如果可能的话,我想保持在 30 秒以上。相反,我想增加 netty 服务器上的连接超时。我试图在我的 application.yml 中设置 server.connection-timeout 属性...

也通过指定秒...

但是,当我运行 time 命令以查看我的连接持续多长时间时,超时并没有改变,它仍然在 10 秒处结束......

我在这里想念什么?