问题标签 [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.
spring-boot - Springboot webflux reactor 并发模型
想了解更多关于springboot webflux的底层并发模型?
对于 CPU 密集型 Web 服务,传统的阻塞多线程模型是否更合适?或者,根据本文https://people.eecs.berkeley.edu/~brewer/papers/threads-hotos-2003.pdf ,传统的线程池模型是否更适合?
如果我在反应器链中有一个阻塞步骤,我会使用 publishOn 将其调度到不同的线程池。这是否释放了原始线程并使整个链仍然非阻塞?
udp - SSDP 协议最简单的 Reactor / Netty 实现是什么?
我用 UdpClient、UdpServer、Spring Integration Ip 模块尝试了很多东西,包装了 DatagramSocket 接收方法以返回 Flux,但我根本无法从标准 SSDP 239.255.255.250:1900 收到任何响应。
还将数据包发送到 SSDP 的奖励积分。
slf4j - 始终记录 ID
在我的调试日志中,我看到每个请求都有这个理想的 id "0x277ec1de" 或类似的,因此以非常方便的方式对请求进行编号:
如果我可以在我自己的代码中重新使用这个 ID,那么我就能够提取在错误消息之前发生的所有事情,并且只提取错误消息,而忽略所有其他一千个并行发生的请求。有没有人有线索,如何做到这一点?我正在使用 Spring-Boot 2.1.1,将 netty 作为嵌入式网络服务器。
spring-webflux - 由于我的基本 URI 不固定,在 Webflux 中一次又一次地创建 Webclient 是否明智?
在我的微服务中,我必须从一些地方获取数据。有些 URL 是固定的,但有些不是。如果我的基本 URL 发生变化,我是否需要一次又一次地创建 Webclient。如果不是,那么以下创建 Web 客户端的方法是否正确。WebClient.create(); 然后每当我打电话时一次又一次地更改URI。根据我的理解,创建 WebClient 必须是一些繁重的操作。
spring - 弹簧靴。反应式网络客户端。响应前连接过早关闭
我遇到过这个问题
池化连接观察到错误 reactor.netty.http.client.HttpClientOperations$PrematureCloseException:连接在响应之前过早关闭”。
我正在通过响应式 Web 客户端从石墨服务器收集请求的时间范围内的指标(为了减少通过 http 传输的数据量,我已将天分成 24/4 块),然后将响应组合成一个矩阵并保存它到 csv 文件 -> 合并到另一个文件。当天数增加时会出现问题(2 或 3 天可以正常工作,但更多天会发生更多关闭连接的错误)。尝试使用延迟,它会有所帮助,但要多处理一天而不会出错。
堆栈跟踪: ClosedConnectionStacktrace
发现有点类似的问题https://github.com/reactor/reactor-netty/issues/413,但不确定。
这是代码片段:
和 webclient 调用的部分任务:
spring - 使用 Spring WebClient 解码内容编码 gzip
我正在使用 Spring WebClient (Spring 5.1.3) 调用 Web 服务。服务响应content-type: application/json
和content-encoding: gzip
ClientResponse.bodyToMono
然后失败并出现错误“JSON 解码错误:非法字符((CTRL-CHAR,代码 31))”,我认为这是因为在尝试解析 JSON 之前内容尚未被解码。
这是我如何创建 WebClient 的代码片段(简化)
然后我使用 WebClient 拨打电话:
HTTP 请求有 2 个标头:
响应具有以下标头:
通过执行以下操作,我可以手动解码 GZIP 内容并从结果中获取有效的 JSON
spring-boot - WebClient 首次请求缓慢的解决方法
我在 Spring Boot MVC 2.1 项目中使用 WebClient,发现客户端发出的第一个请求最多需要 6 秒。随后的请求要快得多(~30ms)。
Spring 的 JIRA中有一个已解决的问题,建议使用 Jetty 作为 WebClient Http 连接器。我已经尝试过这种方法,通过约 800 毫秒的第一次请求来改进数据。这一次是一个进步,但与通常需要 < 200 毫秒的 RestTemplate 相比仍然相去甚远。
Netty 方法(5s 首次请求):
会议:
用法:
码头方法(800 毫秒第一次请求):
会议:
用法:和以前一样。
Jetty 方法还有另一个“问题”。在服务器关闭时,它总是会产生以下异常:
我怎样才能避免这个异常?
我们可以使用其他方法来改善 WebClient 首次请求速度慢吗?
java - 如何使用 Spring Boot 2.1 Webflux 自定义 Netty?
我想在我的 Spring Boot Webflux 项目中自定义 Netty。在我的 POM 中,我添加了 Spring Boot Webflux 和 Spring Boot Actuator 依赖项。接下来我重写了Spring 文档中描述的 WebServerFactoryCustomizer 的 customize() 方法。
然后我在我的 NettyCustomizer 中实现了 Netty 引导:
现在,如果我启动 Spring Boot 应用程序,我会收到“无法启动 Netty”错误。
因此,如果使用 Webflux,似乎没有办法覆盖 Netty 引导。不幸的是,将 custom() 方法中的 addServerCustomizers() 方法更改为 setServerCustomizers() 会导致相同的异常。有人知道如何将 Netty 与 Spring Boot 一起定制吗?
spring - 如何使用 Spring 的 WebClient 发送带有自定义标头的删除请求?
我想发送一个带有自定义标头的 http 删除请求。
我尝试使用 Spring 的 WebClient 执行此操作,代码如下:
我期待类似的东西:
但是,提出的实际要求是:
我错过了一些包含自定义标题X-FOO的东西吗?
更新 1:我将 reactor-netty 升级到 0.7.3.RELEASE,
并且丢失的标题仍然丢失:
更新 2:我发现在我的 pom 中导入了一个反应堆的 BOM(Bismuth-RELEASE),删除该 BOM 后,Spring Boot 2.0.5.RELEASE 包含了我想要的自定义标头。
spring-webflux - Spring WebFlux with MongoDB - 限制 SSE 客户端
我正在开发一个由 Spring Boot 2.1.1 和 WebFlux、Reactor 3.2.3、Mongo 3.8.2 和 Netty 4.1.31 运行的简单聊天服务。
每个聊天室都有 2 个集合 - 消息存档和包含当前事件的上限集合(例如,新消息事件、用户键入指示器等)。上限集合有 100 个元素,我正在使用 ReactiveMongoTemplate 的 tail() 方法来检索最新事件。
该服务公开了两种用于检索最近事件的端点:SSE 和轮询。我已经对 2000 个并发用户进行了一些压力测试,除了听聊天之外,还发送了大量的事件。
观察结果是:
- 每 2 秒轮询一次会给服务带来一点压力(测试期间 CPU 使用率约为 40%),而 MongoDB 几乎没有压力(~4%)
- 通过 SSE 收听最大化 MongoDB(~90%),也强调服务(它试图使用剩余的可用资源),但 Mongo 尤其挣扎,整体服务变得几乎没有响应。
观察结果似乎很明显,因为当我在测试期间通过 SSE 连接时,它几乎会在新事件到来时立即更新我 - 基本上,SSE 的响应速度是每 2 秒轮询的数百倍。
问题是:
鉴于客户端最终是订阅者(或者至少我认为它是由有限的知识给出的),我可以通过 ReactiveMongoTemplate 以某种方式限制发布消息的速率吗?或者以某种方式减少对新事件的需求,而不必做那个客户端?
我一直在尝试使用 Flux 缓冲和缓存,但它造成了更大的压力......
代码:
,
,