我们有一个spring-webflux
应用程序,运行在spring-boot-starter-webflux:jar:2.1.5.release
和reactor-netty:jar:0.8.8.release
上。当响应客户机在请求完成前离开(k8s pod被杀死或客户机订阅被释放)时,我们看到服务器只是停止处理请求,不再看到与该请求相关的应用程序日志。但是,reactive-netty
会打印一个跟踪日志,指示通道处于非活动状态并将被终止。
我们能做些什么来优雅地处理这次终止吗?理想情况下,我们希望响应来自Reactor的取消信号。
2020-03-18T16:46:40.372Z TRACE --- [reactor-http-epoll-2] r.n.c.ChannelOperations : [id: 0x4cad974b, L:/<SERVER_IP_ADDRESS>:8080 ! R:/<SOME_OTHER_IP_ADDRESS>:55436] Disposing ChannelOperation from a channel
java.lang.Exception: ChannelOperation terminal stack
at reactor.netty.channel.ChannelOperations.terminate(ChannelOperations.java:391)
at reactor.netty.channel.ChannelOperations.onInboundClose(ChannelOperations.java:360)
at reactor.netty.channel.ChannelOperationsHandler.channelInactive(ChannelOperationsHandler.java:72)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:257)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:243)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:236)
at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelInactive(CombinedChannelDuplexHandler.java:420)
at io.netty.handler.codec.ByteToMessageDecoder.channelInputClosed(ByteToMessageDecoder.java:393)
at io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:358)
at io.netty.channel.CombinedChannelDuplexHandler.channelInactive(CombinedChannelDuplexHandler.java:223)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:257)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:243)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:236)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelInactive(DefaultChannelPipeline.java:1416)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:257)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:243)
at io.netty.channel.DefaultChannelPipeline.fireChannelInactive(DefaultChannelPipeline.java:912)
at io.netty.channel.AbstractChannel$AbstractUnsafe$8.run(AbstractChannel.java:816)
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:416)
at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:331)
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:918)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at java.base/java.lang.Thread.run(Thread.java:834)
dooncancel
运算符允许在取消订阅时提供回调。这与dooneach
运算符不同,后者仅在订阅完成或出错时运行。
https://projectreactor.io/docs/core/release/api/reactor/core/publisher/mono.html#dooncancel-java.lang.runnable-
我正在尝试使用Reactor Netty TcpClient以反应方式与主机交互,这可能是无法访问的。下面是通道初始化逻辑的示例: 我收到的输出: “inbound”和“outbound”有一个专门的方法来处理它们的错误,但是它们工作在一个连接实例之上,如果您得到“Connection timeout”,则不会创建该连接实例。 我试过: > 异常,我接收到的异常包装在“ErrorCallBacKn
Spring靴2.1.5项目Reactor3.2.9 我正在使用上述框架设置一系列rest反应式API,我在MDC(映射诊断上下文)方面遇到了一个恼人的问题。我的应用程序是JAVA的。 MDC依赖于线程局部变量来存储要放入日志中的当前查询的映射上下文。显然,这个系统并不完美,而且与反应模式相矛盾,因为执行的不同步骤将通过不同的线程执行。 我在Play Responsive框架中遇到了同样的问题,但
我是Spring WebFlux/Reactive编程的新手,我在调度器任务方面遇到了一些问题: 发生错误后,调度器(执行器线程)不会终止,例如,当试图使用schedulers.parallel()线程将实体保存到脱机的数据库时。 我的代码实际上是这样的: 然而,当数据库脱机时,i会将错误消息打印到控制台,但调度器/执行器不会停止将实体持久化到数据库中的尝试。过程继续进行,错误信息一次又一次地打印
在我的用例中,我有一个带有Reactor Netty的Spring Webflux微服务,我有以下依赖项: null 由于(版本0.7.6版)已包含在最新的(版本2.0.1版)中,因此不能再使用:,请参阅->https://github.com/reactor/reactor-netty/issues/312 我的代码段: 这适用于版本2.0.0.release,但由于升级到版本2.0.1.rel
我正在尝试配置带有ssl和客户端主机名验证的spring-webflux WebClient(带有reactor netty)。为我提供了javax.net.ssl.SSLContext、HostnameVerifier和一个受信任的主机名列表(作为字符串列表)。 到目前为止,我已经使用SSLContext配置了WebClient,但我找不到配置主机名验证的方法。 说明一下我的问题:我有一组受信任