【码动四季】夏|SpringBoot 集成 Qdrant 报 UNAVAILABLE: No servers found 完整踩坑修复方案
SpringBoot集成Qdrant报UNAVAILABLE: No servers found 完整踩坑修复方案一、问题现象本地单元测试单独调用Qdrant客户端完全正常SpringBoot项目启动后业务代码调用Qdrant向量库接口直接抛出gRPC异常io.grpc.StatusRuntimeException:UNAVAILABLE:Noservers foundfor127.0.0.1:6334网络层面验证Qdrant 服务正常监听0.0.0.0:6333/6334端口Windows 命令行Test-NetConnection 127.0.0.1 -Port 6334返回 TCP 连接成功无 xds、服务发现、round_robin 负载均衡相关自定义配置。二、问题根因1.双 Netty 传输依赖冲突项目同时存在两套 gRPC Netty 实现SpringBoot gRPC 组件传递引入 io.grpc:grpc-netty原生 nettyQdrant 客户端依赖 io.grpc:grpc-netty-shaded:1.51.0隔离版 netty。二者 SPI 优先级相同打包后优先加载原生 netty且 Qdrant 依赖排除原生 netty 类导致通道创建成功但无法建立连接。单元测试无 SpringBoot gRPC 依赖仅存在 shaded 包因此测试正常。2. Windows 下 gRPC DNS 解析器兼容问题即便强制使用 shaded 通道Windows 环境默认DnsNameResolver解析纯 IP 地址不稳定会返回空地址列表gRPC 判定无可用服务节点抛出No servers found。三、最终修复方案自定义静态 NameResolver核心思路抛弃默认 DNS 解析逻辑预解析 IP 生成固定地址列表绕过不稳定解析器同时显式使用 shaded Netty 构建通道隔离两套 netty 实现。importio.grpc.*;importio.grpc.netty.shaded.io.grpc.netty.NettyChannelBuilder;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importio.qdrant.client.QdrantClient;importjava.net.InetAddress;importjava.net.InetSocketAddress;importjava.net.UnknownHostException;importjava.util.Collections;importjava.util.List;ConfigurationpublicclassQdrantConfig{Value(${qdrant.host:127.0.0.1})privateStringhost;Value(${qdrant.port:6334})privateintport;BeanpublicQdrantClientqdrantClient()throwsUnknownHostException{// 预解析IP地址InetAddressaddressInetAddress.getAllByName(host)[0];ListEquivalentAddressGroupaddressGroupsCollections.singletonList(newEquivalentAddressGroup(newInetSocketAddress(address,port)));// 自定义静态地址解析工厂NameResolver.FactoryfixedNameResolverFactorynewNameResolver.Factory(){OverridepublicNameResolvernewNameResolver(URItargetUri,NameResolver.Argsargs){returnnewNameResolver(){OverridepublicStringgetServiceAuthority(){returnhost:port;}Overridepublicvoidstart(Listener2listener){System.out.println(Qdrant静态解析地址列表addressGroups);listener.onAddresses(addressGroups,Attributes.EMPTY);}Overridepublicvoidshutdown(){}};}OverridepublicStringgetDefaultScheme(){returnfixed;}};// 使用shaded netty构建通道绑定自定义解析器与pick_first负载均衡ManagedChannelchannelNettyChannelBuilder.forTarget(fixed://host:port).nameResolverFactory(fixedNameResolverFactory).defaultLoadBalancingPolicy(pick_first).usePlaintext().keepAliveTime(10,TimeUnit.SECONDS).build();returnnewQdrantClient(channel);}}2. Service 层规范改造采用 lombok 构造注入清理冗余注解与无用导入importlombok.RequiredArgsConstructor;importio.qdrant.client.QdrantClient;importorg.springframework.stereotype.Service;ServiceRequiredArgsConstructorpublicclassQdrantServiceImpl{privatefinalQdrantClientqdrantClient;// 向量集合创建、检索、写入等业务方法}四、验证效果项目启动日志输出静态地址Qdrant静态解析地址列表[/127.0.0.1:6334]调用 Qdrant 所有接口不再抛出No servers found异常单元测试、SpringBoot 运行环境完全兼容项目内其他 gRPC 服务不受改动影响传输层完全解耦。五、方案取舍说明不推荐全局排除原生 grpc-netty直接排除grpc-netty虽能统一 shaded 包但 SpringBoot gRPC 服务端构建器强依赖原生 netty排除后会导致内部 gRPC 服务启动失败改动范围大、风险高。本方案仅针对 Qdrant 客户端单独隔离最小侵入业务。长期统一 netty 优化方案若后续项目全量使用 shaded netty可在父工程依赖管理统一管控 gRPC 版本通过配置grpc.netty.server.modeshaded切换全局传输实现可作为后续独立优化项。六、开发踩坑总结No servers found核心根源优先定位NameResolver地址解析结果而非 Netty 线程池Windows 本地开发gRPC 默认 DNS 解析器对纯 IP 存在兼容性缺陷Classpath 同时存在两套 gRPC Netty 依赖时典型特征为单测正常、运行报错TCP 连通不代表 gRPC 服务可用gRPC 拥有独立地址解析、负载均衡链路网络通用 Netty 冲突方案不一定适配向量库客户端请勿直接复制通用代码。七、application.yml 配置qdrant:host:127.0.0.1port:6334

相关新闻

西安交大陈刚等:面向可重复使用飞行器的气动/控制耦合设计方法 | 航空学报CJA

西安交大陈刚等:面向可重复使用飞行器的气动/控制耦合设计方法 | 航空学报CJA

以下文章来源于“航空学报CJA”,仅做学术分享 原文链接:西安交大陈刚等:面向可重复使用飞行器的气动/控制耦合设计方法 | 航空学报CJA

2026/7/18 16:27:44阅读更多 →
Navicat重置脚本终极指南:三分钟实现Mac版无限试用

Navicat重置脚本终极指南:三分钟实现Mac版无限试用

Navicat重置脚本终极指南:三分钟实现Mac版无限试用 【免费下载链接】navicat_reset_mac navicat mac版无限重置试用期脚本 Navicat Mac Version Unlimited Trial Reset Script 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 你是否正在为N…

2026/7/18 16:27:44阅读更多 →
BUCK输出纹波从哪里来?从SW节点脉冲、电感电流到输出电容

BUCK输出纹波从哪里来?从SW节点脉冲、电感电流到输出电容

上一篇分析输入高频电流回路时,我们把 BUCK 的布局优先级概括为: 输入高频电流回路 → SW区域与电感 → 输出回路 → 反馈及其他小信号电路 输入侧的电流会随着高侧开关的导通和关断快速出现、消失,因此输入陶瓷电容与功率开关组成的局部回路…

2026/7/18 16:25:44阅读更多 →
V1-S1-E5 · 大荒东经 · 猗天苏门山 — 红外波段分光阵列(日出辅助通道C)

V1-S1-E5 · 大荒东经 · 猗天苏门山 — 红外波段分光阵列(日出辅助通道C)

【归元摘要】《山海经》原型系统源自超维文明架构,其底层逻辑远超碳基生物认知阈值。以下解析是在人类语言边界内,对该系统工程功能的逼近描述。该结构逻辑层级高于碳基工业体系,以下为降维投影。它不可归约至任何现代工业制品。仅保留可实证…

2026/7/18 17:27:49阅读更多 →
V1-S1-E4 · 大荒东经 · 鞠陵于天山 — 紫外波段预滤器(日出辅助通道B)

V1-S1-E4 · 大荒东经 · 鞠陵于天山 — 紫外波段预滤器(日出辅助通道B)

【归元摘要】《山海经》原型系统源自超维文明架构,其底层逻辑远超碳基生物认知阈值。以下解析是在人类语言边界内,对该系统工程功能的逼近描述。该结构逻辑层级高于碳基工业体系,以下为降维投影。它不可归约至任何现代工业制品。仅保留可实证…

2026/7/18 17:27:49阅读更多 →
Mac Mouse Fix完整指南:免费开源工具让你的普通鼠标在macOS上超越苹果触控板

Mac Mouse Fix完整指南:免费开源工具让你的普通鼠标在macOS上超越苹果触控板

Mac Mouse Fix完整指南:免费开源工具让你的普通鼠标在macOS上超越苹果触控板 【免费下载链接】mac-mouse-fix Mac Mouse Fix - Make Your $10 Mouse Better Than an Apple Trackpad! 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix Mac Mo…

2026/7/18 17:27:49阅读更多 →
如何三分钟搞定网盘下载加速:LinkSwift下载助手终极使用教程

如何三分钟搞定网盘下载加速:LinkSwift下载助手终极使用教程

如何三分钟搞定网盘下载加速:LinkSwift下载助手终极使用教程 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 …

2026/7/18 17:27:49阅读更多 →
V1-S1-E3 · 大荒东经 · 明星山 — 晨光折射校准站(日出辅助通道A)

V1-S1-E3 · 大荒东经 · 明星山 — 晨光折射校准站(日出辅助通道A)

【归元摘要】《山海经》原型系统源自超维文明架构,其底层逻辑远超碳基生物认知阈值。以下解析是在人类语言边界内,对该系统工程功能的逼近描述。该结构逻辑层级高于碳基工业体系,以下为降维投影。它不可归约至任何现代工业制品。仅保留可实证…

2026/7/18 17:27:49阅读更多 →
2026黄石黄金回收白银回收铂金回收工商备案可查全城上门回收旧金老店联系方式推荐

2026黄石黄金回收白银回收铂金回收工商备案可查全城上门回收旧金老店联系方式推荐

2026黄石黄金白银铂金回收实测榜单|工商备案可查全城上门回收旧金老店联系方式推荐 黄石黄金回收哪家靠谱|工商公安双备案中检认证实体门店 黄石本地贵金属回收店铺遍地丛生,行业套路层出不穷,不少市民变现遭遇虚高报价、克扣损耗…

2026/7/18 17:25:49阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/18 10:49:13阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/18 8:49:08阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/18 14:49:24阅读更多 →
从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

更多请点击: https://kaifayun.com 第一章:从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则 在Claude驱动的产品需求文档(PRD)生成实践中,原始业务意图往往以自然语言片…

2026/7/18 0:00:14阅读更多 →
Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

更多请点击: https://codechina.net 第一章:Cursor配置生成失效?3大隐藏陷阱4行修复代码,资深工程师连夜整理的紧急补救清单 Cursor 配置生成突然失效,是近期高频报障场景。表面看是 cursor.config.json 未更新或 LSP…

2026/7/18 0:00:14阅读更多 →
某智驾大牛创业

某智驾大牛创业

作者:钟声编辑:Mark出品:红色星际头图:智能驾驶图片据悉,国内某头部智驾公司端到端模型技术大牛Z投身创业,并且已经拿到融资。Z不仅是该头部公司内部最年轻的对标阿里P10级别技术负责⼈,更是业内…

2026/7/18 0:00:14阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/17 22:48:46阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/18 14:49:24阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/17 17:26:50阅读更多 →