Azure Cosmos DB Emulator-Gremlin API无法通过Python连接求助
解决Python连接Azure Cosmos DB模拟器Gremlin API失败问题
问题描述
已成功通过Gremlin控制台连接Azure Cosmos DB模拟器的Gremlin API,但使用Python代码连接时触发错误:RuntimeError: Connection was closed by server。
出错的Python代码
from gremlin_python.process.anonymous_traversal import traversal from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection conn = DriverRemoteConnection(url='ws://localhost:8901/gremlin', traversal_source='g', username='/dbs/db1/colls/coll1', password='C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==') g = traversal().withRemote(conn) g.V().toList()
Gremlin控制台使用的conf\remote-localcompute.yaml配置
hosts: [localhost] port: 8901 username: /dbs/db1/colls/coll1 password: C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw== connectionPool: { enableSsl: false} serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { serializeResultToString: true }}
解决方案
问题根源在于Python代码未匹配控制台配置中的序列化器规则和SSL设置,修改代码如下:
from gremlin_python.process.anonymous_traversal import traversal from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection from gremlin_python.driver.serializer import GraphSONMessageSerializerV1d0 # 对齐控制台的序列化器配置 serializer = GraphSONMessageSerializerV1d0() serializer.config = {'serializeResultToString': True} conn = DriverRemoteConnection( url='ws://localhost:8901/gremlin', traversal_source='g', username='/dbs/db1/colls/coll1', password='C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==', serializer=serializer, enable_ssl=False # 与控制台的enableSsl配置保持一致 ) g = traversal().withRemote(conn) result = g.V().toList() print(result)
关键说明
- 必须使用
GraphSONMessageSerializerV1d0并开启serializeResultToString,否则客户端与服务器的序列化格式不兼容,会直接被服务器断开连接 - 显式设置
enable_ssl=False,与控制台配置同步,避免SSL握手失败导致的连接问题
内容的提问来源于stack exchange,提问作者RandomPerson
相关产品推荐
相关产品推荐

