Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在使用服务器发送事件时面对io.netty.handler.timeout.ReadTimeoutException: null

在使用服务器发送事件时面对io.netty.handler.timeout.ReadTimeoutException: null
EN

Stack Overflow用户
提问于 2021-06-01 08:17:53
回答 2查看 10K关注 0票数 2

我对spring流量很陌生,我有一个客户端应用程序,它消耗服务器发送的事件,事件是由服务器随机发布的,没有固定的延迟。但是,如果没有事件,消费者在60秒后抛出io.netty.handler.timeout.ReadTimeoutException: null

服务器端事件使用者代码

代码语言:javascript
运行
AI代码解释
复制
webClient.get()
        .uri("http://localhost:8080/events")
        .accept(MediaType.TEXT_EVENT_STREAM)
        .retrieve()
        .bodyToFlux(type)
        .subscribe(event -> process(event));

我需要客户连接,即使有很长一段时间没有事件。

完全例外

代码语言:javascript
运行
AI代码解释
复制
[36mr.netty.http.client.HttpClientConnect   [...] The connection observed an error

io.netty.handler.timeout.ReadTimeoutException: null

reactor.Flux.MonoFlatMapMany.1    onError(org.springframework.web.reactive.function.client.WebClientRequestException: nested exception is io.netty.handler.timeout.ReadTimeoutException)
reactor.Flux.MonoFlatMapMany.1     

org.springframework.web.reactive.function.client.WebClientRequestException: nested exception is io.netty.handler.timeout.ReadTimeoutException
    at org.springframework.web.reactive.function.client.ExchangeFunctions$DefaultExchangeFunction.lambda$wrapException$9(ExchangeFunctions.java:141) ~[spring-webflux-5.3.5.jar:5.3.5]
    Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
Error has been observed at the following site(s):
EN

回答 2

Stack Overflow用户

发布于 2021-06-01 14:57:24

服务器发送事件的Mozilla描述中有一个注释:

冒号作为行的第一个字符本质上是一个注释,并被忽略。备注:注释行可用于防止连接超时;服务器可以定期发送评论以保持连接正常运行。

因此,定期发送评论可以使连接保持活跃。那么,我们如何发送评论呢?

好吧,spring有类ServerSentEvent,它有函数ServerSentEvent#comment。因此,如果我们将这个类与例如Flux#interval结合使用,我们就可以在只包含注释keep alive的事件中合并。

下面是我不久前构建的一个项目的一个例子

代码语言:javascript
运行
AI代码解释
复制
@Bean
public RouterFunction<ServerResponse> foobars() {
    return route()
            .path("/api", builder -> builder
                .GET("/foobar/{id}", accept(TEXT_EVENT_STREAM), request -> ok()
                        .contentType(MediaType.TEXT_EVENT_STREAM)
                        .header("Cache-Control", "no-transform")
                        .body(Flux.merge(foobarHandler.stream(request.pathVariable("id")),
                                Flux.interval(Duration.ofSeconds(15)).map(aLong -> ServerSentEvent.<List<FoobarResponse>>builder()
                                        .comment("keep alive").build())), new ParameterizedTypeReference<ServerSentEvent<List<FoobarResponse>>>(){}))
            .build();
}
票数 1
EN

Stack Overflow用户

发布于 2022-07-08 08:35:54

Webflux使用默认的超时回退,最终将显示io.netty.handler.timeout.ReadTimeoutException: null。可以通过将自定义超时回退到超时值方法来防止此错误:

代码语言:javascript
运行
AI代码解释
复制
public final Flux<T> timeout(Duration timeout, @Nullable Publisher<? extends T> fallback);

此外,您还可以使用onErrorContinue、onErrorReturn、.等方法。要正确处理Flux中的异常,例如:

代码语言:javascript
运行
AI代码解释
复制
return webClient.get().uri(url).retrieve().bodyToFlux(String.class)
    .timeout(timeout, Mono.error(new ReadTimeoutException("Timeout")))
    .onErrorContinue((e, i) -> {
        // Log the error here.
    });

如果您想在默认情况下禁用所有这些日志,可以将该行添加到文件application.properties中。

代码语言:javascript
运行
AI代码解释
复制
logging.level.reactor.netty.http.client.HttpClient=OFF
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67792501

复制
相关文章
Jenkins集成jira
JIRA Trigger Plugin JiraTestResultReporter plugin Jira Issue Updater JIRA Pipeline Steps
陈不成i
2021/06/03
1.2K0
Jira插件安装
一、Jira插件列表(可以将下面免费插件直接下载,然后登陆jira,在"插件管理"->"上传插件",将下载后的免费插件直接进行上传安装即可) 序号 插件名称 功能概要 供应商 资源 100用户报价($) 1 GreenHopper 敏捷项目管理 Atlassian 下载 2000 2 Universal Plugin Manager 管理插件的查找、安装、升级、授权等,也可用于Confluence,FishEye,Bamboo,Crucible 及S
洗尽了浮华
2018/04/18
9.1K0
Jira插件安装
7.Jenkins插件安装使用帮助说明
项目描述: Jenkins流水线步骤,提供SSH工具,如命令执行或文件传输,以实现持续交付。 项目地址: https://github.com/jenkinsci/ssh-steps-plugin
全栈工程师修炼指南
2022/09/29
2.1K0
7.Jenkins插件安装使用帮助说明
Jenkins 常用插件介绍
刚开始接触Jenkins,大部分都会从插件开始吧。我也是一样。被各种插件弄的懵逼。
zinyan.com
2022/12/07
11.9K0
Jenkins 常用插件介绍
jenkins通过fir插件实现ipa的自动发包
上一篇文章讲了通过蒲公英发包 jenkins+Xcode+蒲公英实现ipa自动打包发布全攻略 http://www.jianshu.com/p/ed124917d6c6#
专注APP开发
2019/11/07
1.1K0
jenkins通过fir插件实现ipa的自动发包
jira webhook发消息_jenkins webhook
为了能够接收webhook事件,你的插件需要在它的JSON装饰器中包含webhook模块的声明。这个声明包含了插件用于接收webhook事件的相对网址。换句话说,应用会发送一个HTTP POST给该资源来作为对应用事件的响应。处理POST的插件代码应该处理该消息中主体部分的几乎仍一个信息。每个发送给插件的webhook的POST也将会包含授权报头来允许插件来对请求消息进行验证。尤其是,JWT token能够被发现在HTTP报头的“Authentication”中。
全栈程序员站长
2022/11/17
2.5K0
CI/CD 工具选型:Jenkins 还是 Bamboo?
持续集成和持续交付是在软件开发生命周期中获得交付一致性的方法。作为一个流程,它帮助你自动化开发管道,同时确保所有事情都可跟踪。其中有趣的部分是在开发阶段中引入自动化。当我们谈到集成和交付时,另一个与之匹配的过程是“持续测试”,或者有时我们称之为 DevOps 测试。虽然持续集成(CI)和持续交付(CD)已经成为 DevOps 的重要组成部分,但在选择最佳工具时,DevOps 团队常常会陷入困境。如果没有 CI/CD 工具是无法想象的。
深度学习与Python
2020/11/16
6.1K1
CI/CD 工具选型:Jenkins 还是 Bamboo?
Go 1.19 发行说明(翻译)
美国时间 2022 年 8 月 2 日,Go 团队官宣 Go 1.19 正式发布。下面让我们一起了解下 Go 1.19 为我们带来的新特性吧。
恋喵大鲤鱼
2022/09/27
1.2K0
Go 1.18 发行说明(翻译)
美国时间 2022 年 3 月 15 日,Go 团队官宣 Go 1.18 正式发布。下面让我们一起了解下 Go 1.18 为我们带来的新特性吧。
恋喵大鲤鱼
2022/09/27
1.8K0
Go 1.18 发行说明(翻译)
Go 1.20 发行说明(翻译)
美国时间 2023 年 2 月 1 日,Go 团队官宣 Go 1.20 正式发布。下面让我们一起了解下 Go 1.20 为我们带来的新特性吧。
恋喵大鲤鱼
2023/10/12
7290
jenkins安装说明
centos6.x和centos7.x的yum和war安装方法相同,但是添加yum源的时候需要注意是不同的
dogfei
2020/07/31
3590
Laravel 7发行说明
Laravel及官方发布的包皆遵循 语义版本化。主要框架版本每六个月发布一次 (~2月和~8月),而次要和补丁版本可能每周发布一次。次要版本和补丁 决不 包含非兼容性更改。
Lansonli
2021/10/09
9.3K0
JavaFX 11发行说明
以下记录描述了有关此版本的重要更改和信息。在某些情况下,该说明提供了有关问题或更改的其他详细信息的链接。
gemron的空间
2019/11/04
6.9K0
Jenkins 插件
jenkins 的所有插件安装后需要重启才能够生效,由于jendkins国外官方插件地址的下载速度简直龟速,所以我们修改为国内插件地址(清华大学源):
木字楠
2022/11/15
7200
Jenkins 插件
Flink 作业生成①:生成 StreamGraph
如上,通过 DataStreamSource<OUT> StreamExecutionEnvironment#addSource(SourceFunction<OUT> function) 设置 SourceFunction 并返回一个 DataStreamSource。关于 SourceFunction、SourceContext 等请查看
codingforfun
2021/05/17
9370
Flink 作业生成①:生成 StreamGraph
Visual Studio 2017 15.8 版发行说明
显著提升了在运行包含多个测试项目的大型解决方案期间的性能。 在我们的实验室中,超过 10,000 个 MSTest 的解决方案执行单个测试的速度提高了 82%!
Edi Wang
2019/07/08
8.6K0
Visual Studio 2017 15.8 版发行说明
Jenkins 插件开发之旅:两天内从 idea 到发布(下篇)
托管插件包括一系列流程步骤。 笔者完成了它所有步骤(包括非必须的步骤),其中主要有两个具有标志性的任务:
LinuxSuRen
2019/05/15
1.2K0
Jenkins插件维护
除了在线安装,还可以官网插件下载地址中进行下载安装,如果访问缓慢可以用清华镜像站。
陈不成i
2021/06/01
7010
Jenkins 常用插件
利用Docker容器动态创建Jenkins Slave。如果有了Kubernetes/Openshift集群,就不需要这个插件了。直接使用下面的Kubernetes插件。 jenkins非root启动的话,为了运行docker需要执行sudo chmod 777 /var/run/docker.sock
acc8226
2022/05/17
5730
Jenkins 邮件插件
1、下载插件 2、配置插件 3、插件设置 4.设置触发器: image.png
用户5760343
2022/05/24
3800
Jenkins 邮件插件

相似问题

如何以编程方式从jira插件中获取发行说明

25

作业生成器jenkins插件

13

Jenkins - JIRA插件问题

11

Jenkins JIRA插件问题

11

如何生成发行说明?

96
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档