问题标签 [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 - 如何重新连接 ReactorNettyWebSocketClient 连接?
我需要访问一个 websocket 服务,它会在 24 小时后关闭一个打开的 websocket 连接。如何使用 Spring-Boot 2 和 Webflux 实现重新连接?
这是我到目前为止所拥有的(取自https://github.com/artembilan/webflux-websocket-demo):
一旦连接丢失(不再输入 3 秒),就会抛出 TimeoutException。但是如何重新连接套接字?
netty - 回收累积的字节缓冲区 Publisher
我们正在迁移到 Spring WebFlux(使用 reactor-netty)。应用程序使用带有 Spring 控制器的 HTTP 协议。目前我们有一个过渡解决方案,它可以将入站 IO 缓冲区累积到CompositeByteBuf
不复制(然后将其作为 处理InputStream
)。reactor-netty 为我们提供直接字节缓冲区。release()
因此,调用这些缓冲区至关重要。最初我们有代码:
并在处理得到的复合缓冲区之后放置释放。
Publisher
但是,如果上游信号错误,这种方法会导致泄漏。因此,在下一次尝试中,我们尝试使用以下方式处理错误并释放缓冲区(省略一些极端情况处理):
但在那之后我们意识到有必要在订阅取消时回收缓冲区(这发生在底层连接关闭时)。首先想到的是使用doOnCancel
操作符,但实际上并不能保证我们不能为doOnError
同doOnCancel
一个请求调用回调。因此,直接的解决方案需要我们明确检查缓冲区之前是否已释放。
现在我被困住了。我不知道如何处理此案并避免额外的复杂性。
amazon-s3 - 用于 S3 上文件操作的 Spring Reactive Proxy 服务器
我正在构建一个代理服务器,将大文件从客户端(iOS、Web 等)流式传输到 S3。我打算将 Spring 与 Netty 一起使用。我正在追赶 Netty 和反应式架构,到目前为止它看起来很有希望。你们中有人以前解决过这样的问题吗?如果是的话,您能否分享一些指针或 GitHub URL 以用于一个很棒的入门项目。
几个问题:
这可能与我当前的技术堆栈有关吗?我觉得是这样的。但想得到反馈。
使用 Netty 和响应式架构,数据块将以异步方式传入,我如何确保将数据包按顺序发送到 S3?
此外,AmazonS3 客户端是否支持使用其 Java SDK 进行响应式文件操作?如果不是,那么我可能需要使用 Spring 反应式 WebClient 直接调用他们的 API。
我理解这个问题不是重点,而且非常广泛。这里的目的是找出是否有人解决了这样的问题,以及他们是否可以提供一些提示。
谢谢。
spring-webflux - Spring WebFlux webclient 处理 ConnectTimeoutException
我正在使用 Spring WebFlux webclient 进行 REST 调用。我已经以3000
毫秒为单位配置了连接超时,因此:
该onStatus
方法Mono
为每个400
/500
响应代码返回一个空。我怎样才能对连接超时甚至读/写超时做同样的事情。现在它只是抛出一个io.netty.channel.ConnectTimeoutException
不由onStatus
我的控制器上不需要一个@ExceptionHandler
,因为这些 REST 调用是更复杂流程的一部分,并且通过一个空Mono
的元素应该被忽略。
回来spring-web
用了一个RestTemplate
,我记得连接超时也导致了一个RestClientException
。所以我们可以捕获RestClientException
所有异常和超时。有没有办法我们也可以做到这一点WebClient
?
java - WebClient Spring 5 IllegalStateException
我收到由 IllegalStateException 引起的 MonoError,原因是“底层 HTTP 客户端已完成但未发出响应。”。
NetworkList 是一个包含网络拓扑列表的类,并具有从方法 convertJsonToPojo 中调用的 setList。
client 是 Spring 5 (5.0.4.RELEASE) 中使用 reactor-netty (0.7.5.RELEASE) 的 WebClient (spring-webflux)。
以下片段显示了我如何使用 WebClient 对 type = BOARDS、CARDS、PORTS、ROUTERS 等进行异步调用,其中网络名称作为 projectName 传入,拓扑类型作为 type 传入。
我遇到的其余服务是一个单一的服务,它返回代表请求的组件的 json。
这似乎与Reactive WebClient Not Emitting A Response类似,但其中的响应指向以下 reactor-netty 问题Issue 138。该问题表明从 0.6.6.RELEASE 开始已修复。
所以我的问题是我在不知不觉中错误地使用了 WebClient 还是应该将其作为未修复的错误提交?我对 Spring 5 和 Reactive 库还很陌生,所以不想天真地提交错误。
提前感谢您的时间!
PS - 我有这个与 RestTemplate 和 CompletableFuture 一起工作,所以不需要提供这个建议作为替代方案。我的任务是开始迁移到反应式架构。谢谢!
更新 - 我相信我现在明白发生了什么,但希望得到某人的确认。我遇到的其余服务是传统服务,而不是响应式流。因此,在通话期间没有共享“阶段”更新。.subscribe() 期待一个反应流,因此从未收到完整的阶段。用 .block() 替换 .subscribe() 强制完成,代码现在可以工作。所以我从中学到的是,在处理传统的休息服务时,需要一个块。有人可以确认吗?谢谢!
reactor-netty - 使用 reactor-netty 处理分块响应中的每个块数据的正确方法是什么?
我正在使用 API 服务器通过使用无限分块响应来实现“服务器推送”功能。响应中的每个块代表一个推送到客户端的消息服务器。每个块实际上是一个完整的 json 对象。这是我用作接收服务器推送到的消息的客户端的代码。
但是我遇到了异常,例如:
显然,我没有得到完整的 json 数据。我想知道 usingresponse.receiveContent()
是否是处理一大块数据的正确方法。
spring-boot - 带有 Reactive 启动器的 Spring Boot 2 中不使用 Netty Server
我正在使用 Spring Boot 2 和响应式启动器开发一个响应式项目。我的问题是,当我启动应用程序时,它启动的是 Tomcat 服务器而不是 Netty。
这是我在 build.gradle 文件中的依赖项任务:
}
你能告诉我为什么我会遇到这个问题吗?谢谢!
spring-data-mongodb - 如何在 Spring Webflux / Reactor Netty Web 应用程序中执行阻塞调用
在我的用例中,我有一个带有 Reactor Netty 的 Spring Webflux 微服务,我有以下依赖项:
org.springframework.boot.spring-boot-starter-webflux
(2.0.1.发布)org.springframework.boot.spring-boot-starter-data-mongodb-reactive
(2.0.1.发布)org.projectreactor.reactor-spring
(1.0.1.发布)
对于一个非常特殊的情况,我需要从我的 Mongo 数据库中检索一些信息,并将其处理为使用我的响应式发送的查询参数WebClient
。由于WebClient
norUriComponentsBuilder
接受 Publisher (Mono / Flux),我使用#block()
调用来接收结果。
由于reactor-core
(版本 0.7.6.RELEASE)已包含在最新spring-boot-dependencies
(版本 2.0.1.RELEASE)中,因此无法再使用:block()/blockFirst()/blockLast() are blocking, which is not supported in thread xxx
,请参阅 -> https://github.com/reactor/reactor-netty/问题/312
我的代码片段:
这适用于spring-boot
版本 2.0.0.RELEASE,但由于升级到版本 2.0.1.RELEASE 并因此升级reactor-core
到版本 0.7.6.RELEASE,它不再被允许。
我看到的唯一真正的解决方案是也包含一个块(非反应性)存储库/mongo客户端,但我不确定是否鼓励这样做。有什么建议么?
java - Spring Security WebFlux - 带有身份验证的主体
我想实现简单的 Spring Security WebFlux 应用程序。
我想使用 JSON 消息,例如
在正文中(对 /signin 的 POST 请求)登录我的应用程序。
我做了什么?
我创建了这个配置
但我使用 jsonBodyAuthenticationConverter() 并读取传入请求的正文。正文只能读取一次,所以我有一个错误
实际上它正在工作,但有例外(会话设置在 cookie 中)。我怎样才能在没有这个错误的情况下重新制作它?
现在我只创建了类似的东西:
并AuthenticationWebFilter
从配置中删除。
spring-boot - spring webflux 如何在 webfilter 中获取请求正文?
我想在 webfilter 中获取请求正文。
现在,当请求体很大时,
这个身体有555号,
如何在 webfilter 中获取请求正文?