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
企业数字化 ERP 产品动态
相关推荐
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/11/14 14:30:50
2025可用QQ群娱乐机器人推荐:到2026年仍在更新的一念成仙 搜索“2025可用QQ群娱乐机器人”的人,大概不是来研究机器人历史的。
大家要找的东西很实际:现在还能不能添加,发出指令以后有没有回复,功能是不是正常的,过几个月会不会突然停止维护。
这几个要求看起来不高࿰… · 2026/7/23 16:55:38
低压电工证改革了吗保姆级教程:怕考不过白交培训费?先看这篇 低压电工证改革了吗保姆级教程:怕考不过白交培训费?先看这篇 怕考不过白交培训费?别急,这篇保姆级教程从报考到考试、从复审到薪资待遇,一网打尽,让你少走弯路、稳拿证书。低压电工证改革了吗?这是很多准备报考的朋友最关心的问题,特别是像濮阳这样的… · 2026/11/14 14:30:48
680元电工证官方回应:电工证怎么考、怎么用、怎么保值 680元电工证官方回应:电工证怎么考、怎么用、怎么保值 急需特种作业证才能上岗找工作,这几乎是所有想从事电工行业的人最真实的声音。现在全国范围内对特种作业人员的管理越来越严格,尤其是在建筑、制造、电力等行业, 680元电工证… · 2026/11/14 14:30:48
维修电工证能去物业吗 考证费用多少钱 你别再被忽悠了 维修电工证能去物业吗 考证费用多少钱 你别再被忽悠了 工地太忙根本没时间复习考试,再加上考证流程复杂、费用不明、证书用途不清,让很多一线电工对“维修电工证能去物业吗”这个问题充满疑惑。尤其是南阳房建工程的从业者,天天在工地和项目间奔波,根本… · 2026/11/14 14:30:48
电工证去哪儿办内部消息来了!工地太忙根本没时间复习考试 电工证去哪儿办内部消息来了!工地太忙根本没时间复习考试 工地太忙根本没时间复习考试,这几乎是每个一线电工的普遍困扰,尤其是在项目赶工期的时候,连吃饭的时间都紧张,更别说抽出时间备考了。最近,我接触了不少鹤壁本地的劳务班组负责人,他们普遍反映… · 2026/11/14 14:30:48
低压电工作业安全隐患证丢了怎么补办多少钱 低压电工作业安全隐患证丢了怎么补办多少钱 怕考不过白交培训费?低压电工作业安全隐患证丢了怎么补办多少钱?这是很多正在备考或准备复审的学员最关心的问题。尤其是在当前安全生产形势日益严格的情况下,持有低压电工作业操作证不仅关系到个人职业发展,更… · 2026/11/14 14:30:48
电压电工证报考机构怎么选?保姆级教程帮你避开坑 电压电工证报考机构怎么选?保姆级教程帮你避开坑 不知道去哪报名怕被中介坑?电压电工证报考机构五花八门,真假难辨。尤其是像你这样在洛阳涧西区干建筑的工人,时间紧、任务重,稍不留神就可能被虚假机构骗钱、耽误工作。这篇保姆级教程,就是为你量身打造… · 2026/11/14 14:29:47
电工证丢失还能补吗?千万别踩坑,丢了证等于失业 电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/13 22:30:50
电力电缆作业证直播报名入口与办理流程良心建议 电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/14 13:23:47
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/14 13:20:59
有初级电工证怎么工作 2026河南最新政策怎么应对 有初级电工证怎么工作 2026河南最新政策怎么应对 之前考的证在外省能不能转过来?这个问题我每天被问上百次。2026年河南最新政策对证书跨省转移有了明确说明,特别是南阳市的从业者,需要特别关注。… · 2026/11/14 0:00:31
电工证过期了不知道怎么复审?考电工证自学书+官方报名入口全攻略 电工证过期了不知道怎么复审?考电工证自学书+官方报名入口全攻略 证书过期了不知道怎么复审延期?很多人遇到这种情况,要么是工作太忙没时间处理,要么是不知道具体流程,导致证书失效,影响工作和项目进展。其实复审并不难,关键是要找准官方报名入口,掌… · 2026/11/14 0:00:31
为什么要低压电工证实操考试考什么 为什么低压电工证值不值得考?别再被中介骗了 你是不是也经常看到网上有人在问“低压电工证到底值不值得考”?或者在找报名点时,担心被中间人骗钱?这些问题,我懂,我也经历过。作为一名在应急管理行业摸爬滚打多年的从业者,我深知低压电工证不仅是一个从… · 2026/11/14 0:00:31
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/13 6:12:21
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/13 6:11:51
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/13 22:31:30