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

spring-boot - 如何重新连接 ReactorNettyWebSocketClient 连接?

我需要访问一个 websocket 服务,它会在 24 小时后关闭一个打开的 websocket 连接。如何使用 Spring-Boot 2 和 Webflux 实现重新连接?

这是我到目前为止所拥有的(取自https://github.com/artembilan/webflux-websocket-demo):

一旦连接丢失(不再输入 3 秒),就会抛出 TimeoutException。但是如何重新连接套接字?

0 投票
1 回答
360 浏览

netty - 回收累积的字节缓冲区 Publisher

我们正在迁移到 Spring WebFlux(使用 reactor-netty)。应用程序使用带有 Spring 控制器的 HTTP 协议。目前我们有一个过渡解决方案,它可以将入站 IO 缓冲区累积到CompositeByteBuf不复制(然后将其作为 处理InputStream)。reactor-netty 为我们提供直接字节缓冲区。release()因此,调用这些缓冲区至关重要。最初我们有代码:

并在处理得到的复合缓冲区之后放置释放。

Publisher但是,如果上游信号错误,这种方法会导致泄漏。因此,在下一次尝试中,我们尝试使用以下方式处理错误并释放缓冲区(省略一些极端情况处理):

但在那之后我们意识到有必要在订阅取消时回收缓冲区(这发生在底层连接关闭时)。首先想到的是使用doOnCancel操作符,但实际上并不能保证我们不能为doOnErrordoOnCancel一个请求调用回调。因此,直接的解决方案需要我们明确检查缓冲区之前是否已释放。

现在我被困住了。我不知道如何处理此案并避免额外的复杂性。

0 投票
1 回答
821 浏览

amazon-s3 - 用于 S3 上文件操作的 Spring Reactive Proxy 服务器

我正在构建一个代理服务器,将大文件从客户端(iOS、Web 等)流式传输到 S3。我打算将 Spring 与 Netty 一起使用。我正在追赶 Netty 和反应式架构,到目前为止它看起来很有希望。你们中有人以前解决过这样的问题吗?如果是的话,您能否分享一些指针或 GitHub URL 以用于一个很棒的入门项目。

几个问题:

这可能与我当前的技术堆栈有关吗?我觉得是这样的。但想得到反馈。

使用 Netty 和响应式架构,数据块将以异步方式传入,我如何确保将数据包按顺序发送到 S3?

此外,AmazonS3 客户端是否支持使用其 Java SDK 进行响应式文件操作?如果不是,那么我可能需要使用 Spring 反应式 WebClient 直接调用他们的 API。

我理解这个问题不是重点,而且非常广泛。这里的目的是找出是否有人解决了这样的问题,以及他们是否可以提供一些提示。

谢谢。

0 投票
1 回答
3082 浏览

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

0 投票
0 回答
1845 浏览

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() 强制完成,代码现在可以工作。所以我从中学到的是,在处理传统的休息服务时,需要一个块。有人可以确认吗?谢谢!

0 投票
0 回答
157 浏览

reactor-netty - 使用 reactor-netty 处理分块响应中的每个块数据的正确方法是什么?

我正在使用 API 服务器通过使用无限分块响应来实现“服务器推送”功能。响应中的每个块代表一个推送到客户端的消息服务器。每个块实际上是一个完整的 json 对象。这是我用作接收服务器推送到的消息的客户端的代码。

但是我遇到了异常,例如:

显然,我没有得到完整的 json 数据。我想知道 usingresponse.receiveContent()是否是处理一大块数据的正确方法。

0 投票
1 回答
1935 浏览

spring-boot - 带有 Reactive 启动器的 Spring Boot 2 中不使用 Netty Server

我正在使用 Spring Boot 2 和响应式启动器开发一个响应式项目。我的问题是,当我启动应用程序时,它启动的是 Tomcat 服务器而不是 Netty。

这是我在 build.gradle 文件中的依赖项任务:

}

你能告诉我为什么我会遇到这个问题吗?谢谢!

0 投票
1 回答
15541 浏览

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。由于WebClientnorUriComponentsBuilder接受 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客户端,但我不确定是否鼓励这样做。有什么建议么?

0 投票
2 回答
13727 浏览

java - Spring Security WebFlux - 带有身份验证的主体

我想实现简单的 Spring Security WebFlux 应用程序。
我想使用 JSON 消息,例如

在正文中(对 /signin 的 POST 请求)登录我的应用程序。

我做了什么?

我创建了这个配置

但我使用 jsonBodyAuthenticationConverter() 并读取传入请求的正文。正文只能读取一次,所以我有一个错误

实际上它正在工作,但有例外(会话设置在 cookie 中)。我怎样才能在没有这个错误的情况下重新制作它?

现在我只创建了类似的东西:

AuthenticationWebFilter从配置中删除。

0 投票
0 回答
1659 浏览

spring-boot - spring webflux 如何在 webfilter 中获取请求正文?

我想在 webfilter 中获取请求正文。

现在,当请求体很大时,

这个身体有555号,

如何在 webfilter 中获取请求正文?