【异常】Spring Ai Alibaba 流式输出卡住无响应的问题

Spring Ai Alibaba 流式输出卡住无响应的问题

关键点

RestClientCustomizer

WebClientCustomizer 重点 流式输出使用这个

// 定义全局WebClient @Bean public WebClientCustomizer webClientCustomizer() { ConnectionProvider providerWeb = ConnectionProvider.builder("webClient-pool") // 1️⃣ 最大连接数:≈ 并发 + 冗余 .maxConnections(500) // 2️⃣ 等待连接的请求上限(防止雪崩) .pendingAcquireMaxCount(200) // 3️⃣ 等待连接的最长时间 .pendingAcquireTimeout(Duration.ofSeconds(30)) // 4️⃣ 空闲连接回收(SSE 结束后) .maxIdleTime(Duration.ofSeconds(30)) // 5️⃣ 单连接最大存活时间(防“僵尸连接”) .maxLifeTime(Duration.ofMinutes(7)) // 6️⃣ 后台定期回收 .evictInBackground(Duration.ofSeconds(30)) // 7️⃣ 开启 metrics(强烈建议) .metrics(true) .build(); HttpClient httpClientWeb = HttpClient.create(providerWeb) .protocol(HttpProtocol.HTTP11) // HTTP/1.1 // 连接超时:5秒 .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 10_000) // 响应超时:60秒 这里不用控制 通过ReadTimeout来控制 // .responseTimeout(Duration.ofSeconds(60*10)) .doOnConnected(conn -> //读超时(比如每 60 秒没收到数据就断开 conn.addHandlerLast(new ReadTimeoutHandler(60)) // 可选:更细粒度读超时(需导入 netty-handler) ) // .wiretap(true); // 开启日志(需配置 logging.level.reactor.netty=DEBUG) ; return builder -> builder.clientConnector( new ReactorClientHttpConnector(httpClientWeb) ); }

com.alibaba.cloud.ai.dashscope.api.DashScopeAgentApi

//初始化 webClient

private final RestClient restClient;

private final WebClient webClient;

public DashScopeAgentApi(String baseUrl, String apiKey, RestClient.Builder restClientBuilder, WebClient.Builder webClientBuilder, ResponseErrorHandler responseErrorHandler) { ConnectionProvider providerRest = ConnectionProvider.builder("dashscope-restClient-pool") // 1️⃣ 最大连接数:≈ 并发 + 冗余 .maxConnections(500) // 2️⃣ 等待连接的请求上限(防止雪崩) .pendingAcquireMaxCount(200) // 3️⃣ 等待连接的最长时间 .pendingAcquireTimeout(Duration.ofSeconds(30)) // 4️⃣ 空闲连接回收(SSE 结束后) .maxIdleTime(Duration.ofSeconds(30)) // 5️⃣ 单连接最大存活时间(防“僵尸连接”) .maxLifeTime(Duration.ofMinutes(7)) // 6️⃣ 后台定期回收 .evictInBackground(Duration.ofSeconds(30)) // 7️⃣ 开启 metrics(强烈建议) .metrics(true) .build(); HttpClient httpClientRest = HttpClient.create(providerRest) .protocol(HttpProtocol.HTTP11) // HTTP/1.1 // 连接超时:5秒 .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 10_000) // 响应超时:60秒 这里不用控制 通过ReadTimeout来控制 // .responseTimeout(Duration.ofSeconds(60*10)) .doOnConnected(conn -> //读超时(比如每 60 秒没收到数据就断开 conn.addHandlerLast(new ReadTimeoutHandler(60)) // 可选:更细粒度读超时(需导入 netty-handler) ); // .wiretap(true); // 开启日志(需配置 logging.level.reactor.netty=DEBUG) this.restClient = restClientBuilder.baseUrl(baseUrl) .defaultHeaders(ApiUtils.getJsonContentHeaders(apiKey)) .defaultStatusHandler(responseErrorHandler) .requestFactory(new ReactorClientHttpRequestFactory(httpClientRest)) .build(); ConnectionProvider providerWeb = ConnectionProvider.builder("dashscope-webClient-pool") // 1️⃣ 最大连接数:≈ 并发 + 冗余 .maxConnections(500) // 2️⃣ 等待连接的请求上限(防止雪崩) .pendingAcquireMaxCount(200) // 3️⃣ 等待连接的最长时间 .pendingAcquireTimeout(Duration.ofSeconds(30)) // 4️⃣ 空闲连接回收(SSE 结束后) .maxIdleTime(Duration.ofSeconds(30)) // 5️⃣ 单连接最大存活时间(防“僵尸连接”) .maxLifeTime(Duration.ofMinutes(7)) // 6️⃣ 后台定期回收 .evictInBackground(Duration.ofSeconds(30)) // 7️⃣ 开启 metrics(强烈建议) .metrics(true) .build(); HttpClient httpClientWeb = HttpClient.create(providerWeb) .protocol(HttpProtocol.HTTP11) // HTTP/1.1 // 连接超时:5秒 .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 10_000) // 响应超时:60秒 这里不用控制 通过ReadTimeout来控制 // .responseTimeout(Duration.ofSeconds(60*10)) .doOnConnected(conn -> //读超时(比如每 60 秒没收到数据就断开 conn.addHandlerLast(new ReadTimeoutHandler(60)) // 可选:更细粒度读超时(需导入 netty-handler) ); // .wiretap(true); // 开启日志(需配置 logging.level.reactor.netty=DEBUG) this.webClient = webClientBuilder.baseUrl(baseUrl) .defaultHeaders(ApiUtils.getJsonContentHeaders(apiKey, null, true)) .clientConnector(new ReactorClientHttpConnector(httpClientWeb)) .build(); }

单独定义

@Bean public RestClientCustomizer restClientCustomizer() { ClientHttpRequestFactory factory = clientHttpRequestFactory(); return builder -> builder.requestFactory(factory); } /** * 配置ClientHttpRequestFactory * * @return ClientHttpRequestFactory实例 */ private ClientHttpRequestFactory clientHttpRequestFactory() { // 1. 配置连接层(TCP 连接、SSL 握手等) ConnectionConfig connectionConfig = ConnectionConfig.custom() .setConnectTimeout(Timeout.ofSeconds(60)) // TCP + SSL 握手超时 .build(); PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(); connectionManager.setMaxTotal(1024); // Set max total connections connectionManager.setDefaultMaxPerRoute(1024); // Set max connections per route connectionManager.setDefaultConnectionConfig(connectionConfig); // 显式定义超时 RequestConfig requestConfig = RequestConfig.custom() //大模型调用 需要预留充足时间 .setResponseTimeout(Timeout.ofSeconds(300)) // 注意:HttpClient 5 中是 responseTimeout(不是 socketTimeout) .build(); CloseableHttpClient httpClient = HttpClients.custom() .setConnectionManager(connectionManager) .setDefaultRequestConfig(requestConfig) .disableAutomaticRetries() .evictExpiredConnections() .evictIdleConnections(TimeValue.ofSeconds(60)) // 每60秒清理空闲连接 .build(); HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); clientHttpRequestFactory.setConnectTimeout(60_000); clientHttpRequestFactory.setConnectionRequestTimeout(60_000); clientHttpRequestFactory.setReadTimeout(Duration.ofSeconds(60)); return clientHttpRequestFactory; }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1119798.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

商联达云成本优化实战:精细化资源调度与管理,助力企业降本增效

在数字化转型浪潮席卷全球的今天,企业纷纷拥抱云计算以提升业务敏捷性与创新能力。然而,随着云服务的大规模应用,一个不容忽视的挑战浮出水面——“云成本失控”。这一现象已成为制约企业数字化进程的关键瓶颈,迫使企业重新审视其…

【后端开发面试高频场景题设计题】深度解析| 面试全覆盖

文章目录目录一、 压轴高频场景题深度解析1.1 分布式缓存与数据库的数据一致性保障方案问题描述分析思路参考答案面试考察点面试追问1.2 数据库读写分离方案与实践问题描述分析思路参考答案1.2.1 读写分离核心架构对比1.2.2 主从同步方式对比1.2.3 主从同步延迟的解决方案面试考…

JavaEE——多线程(5)

Java线程池详解Java 线程池是管理线程生命周期、控制并发度的核心组件,基于 “池化思想” 减少线程创建 / 销毁的开销,优化系统资源利用率,同时提供任务队列、拒绝策略等机制,确保并发编程的稳定性和可维护性。1.为什么需要线程池…

数据损坏类型及相关恢复方法

(一)文件的删除及恢复文件删除的本质是操作系统在文件目录项首位写入删除标记(如FAT32的"0xE5",NTFS的$MFT条目置空),同时在文件分配表(FAT)或主文件表(MFT&am…

从175亿参数到Transformer革命:一文搞懂大语言模型的底层逻辑

一、打破认知:LLM不是魔法,是数学 当你打开ChatGPT,看着它流畅地回答问题、撰写文案、甚至编写代码时,你是否会产生一种错觉——这是某种"智能生命"? 让我先给你泼一盆冷水:大语言模型(LLM)的本质,不过是一个专门处理文本的深度神经网络。它既不是科幻电影里的人工智…

Zookeeper在大数据领域的元数据管理实践

Zookeeper在大数据领域的元数据管理实践 关键词:Zookeeper、大数据、元数据管理、分布式系统、实践应用 摘要:本文主要探讨了Zookeeper在大数据领域元数据管理方面的实践。首先介绍了相关背景知识,包括目的、预期读者、文档结构和术语表。接着…

企业使用智能体能省多少钱?一套可直接套用的真实ROI计算模型

在2026年企业全面进入精细化经营的背景下,任何技术投入都绕不开一个核心问题:ROI是否能在部署前算清?过程中能否验证?结果是否可复用?结论先行:企业智能体不是概念性投入,而是目前少数可以在上线…

高并发接口调用的线程模型与处理机制

高并发接口调用的线程模型与处理机制 一、并发调用的基本概念 当多个用户同时请求同一接口时,系统如何处理这些并发请求,核心取决于线程分配机制和资源调度策略。二、Web服务器的请求处理模型 2.1 请求线程分配机制 所有Web应用(如Spring Boo…

基于点云和建模命令反推CADQuery代码的批量推理系统

基于点云和建模命令反推CADQuery代码的批量推理系统 1. 项目概述与设计思路 1.1 项目背景 在CAD/CAM领域,从点云数据重建CAD模型是一个具有挑战性的任务。传统方法需要复杂的几何算法和人工干预,而现代大语言模型(LLM)在理解几何关系和生成代码方面展现出强大能力。本项…

走出“实验室”走向“天空” 杭州如何托举低空经济加速起飞?

具身智能加速起跑、低空经济蓬勃发展、人工智能深入公共治理与民生服务……在新一轮科技与产业变革中,杭州正以制度创新、场景开放和生态协同为抓手,加快打通科技成果从实验室走向市场的“最后一公里”,全力建设具有全国影响力的人工智能创新…

0095__WiX Toolset

https://blog.csdn.net/gitblog_00552/article/details/155294915

有监督学习神经网络改造为无监督学习的PyTorch可微分优化实现

有监督学习神经网络改造为无监督学习的PyTorch可微分优化实现 1. 引言:问题背景与需求分析 1.1 原始问题描述 我们面临一个关键任务:将一个原本使用有监督学习的神经网络改造为无监督学习架构。原始模型中,标签数据是通过一个MATLAB实现的交错网格差分法函数计算得到的。…

Spring Boot测试类的使用参考

Spring Boot测试类的使用参考 1. 集成测试概述 集成测试是在完整的Spring应用上下文中测试应用组件之间的交互。与单元测试不同&#xff0c;集成测试会启动Spring容器并加载所有配置的Bean。 2. 依赖配置 2.1 Maven依赖 <!-- Spring Boot测试核心依赖 --> <dependency…

0101__WiX Toolset 安装包制作入门教程(目录篇)

https://cloud.tencent.com.cn/developer/article/2349829

高通开源驱动ath12k已正式支持QCC2072

最新消息&#xff0c;高通于25年12月底更新开源驱动ath12k&#xff0c;已正式支持QCC2072 Wi-Fi7 芯片。 驱动对应链接&#xff1a; https://git.codelinaro.org/clo/ath-firmware/ath12k-firmware/-/tree/main 补丁说明链接&#xff1a; https://lore.kernel.org/ath12k/ O…

宇信科技以金融科技前沿探索 获评《财经》新媒体2025“新奖”——“未来场景定义者”

在“十四五”与“十五五”交汇的历史节点&#xff0c;中国经济正以韧性、创新与结构性跃升为鲜明底色&#xff0c;描绘出一幅深刻转型的画卷。其中&#xff0c;以“人工智能”行动为牵引的新科技与实体经济深度融合&#xff0c;成为驱动高质量发展的核心引擎。近日&#xff0c;…

1024编程——让我们的孩子对话未来

编程到底学什么&#xff1f; 其实&#xff0c;编程思维是“理解问题——找出路径”的高效思维过程&#xff0c;它由分解、模式识别、抽象、算法四个步骤组成。编程能够培养孩子的自律性&#xff0c;需要制定规则并培养孩子形成遵守规则的意识。每一门编程语言都有自己的规则&am…

电力行业气体安全监测指南:气体检测仪的应用方案

在电力系统的日常运营与维护中&#xff0c;除了严防触电、火灾等显性风险&#xff0c;一类隐形杀手同样不容忽视——有害气体。无论是密闭变电站内的六氟化硫泄漏、电缆隧道中的缺氧与可燃气体积累&#xff0c;还是蓄电池室可能产生的氢气&#xff0c;都对设备稳定与人员安全构…

unibest+uview-plus,tabbar icon不展示

方法一&#xff1a;如果你是动态 图标的话&#xff0c;你得需要把你要显示的图标 全部先列出来&#xff0c;<template v-else-if"item.iconType unocss || item.iconType iconfont"><view :class"item.icon" class"h-20px w-20px flex ite…

学霸同款2026 AI论文工具TOP9:本科生毕业论文写作全解析

学霸同款2026 AI论文工具TOP9&#xff1a;本科生毕业论文写作全解析 2026年学术写作工具测评&#xff1a;为什么你需要这份榜单&#xff1f; 随着AI技术在学术领域的深度应用&#xff0c;越来越多的本科生开始依赖智能工具提升论文写作效率。然而&#xff0c;面对市场上琳琅满目…