Azure Cosmos DB for MongoDB(vCore)无法建立并设置集合问题求助
问题场景
开发基于Azure OpenAI和Cosmos DB的RAG应用,已创建Azure Cosmos DB for MongoDB (vCore)实例,连接代码运行时出现兼容性警告,执行数据库和集合创建代码时触发ServerSelectionTimeoutError超时错误。
连接代码
from urllib.parse import quote_plus username = quote_plus("username") password = quote_plus("password") server = "service_name.mongocluster.cosmos.azure.com" mongo_conn = f"mongodb+srv://{username}:{password}@{server}/?tls=true&authMechanism=SCRAM-SHA-256&retrywrites=false&maxIdleTimeMS=120000" mongo_client = pymongo.MongoClient(mongo_conn)
连接时警告(已翻译)
C:\Users\AppData\Local\Temp\ipykernel_3292\24156620.py:9: 用户警告:你似乎已连接到CosmosDB集群。有关功能兼容性和支持的更多信息,请查看相关文档
mongo_client = pymongo.MongoClient(mongo_conn)
创建数据库和集合代码
# 创建名为TryDB的数据库 db = mongo_client['TryDB'] # 若集合不存在则创建 COLLECTION_NAME = "Try_Collection" collection = db[COLLECTION_NAME] if COLLECTION_NAME not in db.list_collection_names(): # 创建使用数据库共享吞吐量的非分片集合 db.create_collection(COLLECTION_NAME) print("已创建集合 '{}'.\n".format(COLLECTION_NAME)) else: print("正在使用集合: '{}'.\n".format(COLLECTION_NAME))
执行时错误(已翻译)
ServerSelectionTimeoutError:
c.service_name.mongocluster.cosmos.azure.com:10260: 超时
(配置的超时参数:socketTimeoutMS: 20000.0ms,connectTimeoutMS: 20000.0ms),总超时:30s,拓扑信息:<TopologyDescription id: 627, topology_type: 未知, servers: [<ServerDescription
('c.service_name.mongocluster.cosmos.azure.com', 1020) server_type:
未知, rtt: 无,
error=NetworkTimeout('c.service_name.mongocluster.cosmos.azure.com:1020:
超时 (配置的超时参数:socketTimeoutMS: 20000.0ms,connectTimeoutMS: 20000.0ms)')>]
解决方案
- 检查防火墙规则:确保本地机器的公网IP已添加到Azure Cosmos DB实例的防火墙允许列表中,同时确认本地网络未限制对Cosmos DB服务的出站访问。
- 调整超时参数:在连接字符串中增大
socketTimeoutMS和connectTimeoutMS的值,比如设置为60000(60秒),应对网络延迟问题。 - 验证连接字符串:核对
service_name、username、password是否与Azure门户中的实例信息完全一致,注意用户名是Cosmos DB的账户名,不是数据库级用户。 - 指定标准端口:Azure Cosmos DB for MongoDB (vCore)的默认端口为10255,可在连接字符串中显式添加
&port=10255。 - 确认实例状态:登录Azure门户检查Cosmos DB实例是否正常运行,无资源过载或服务故障。
内容的提问来源于stack exchange,提问作者Murphy

