Как использовать GraphSON v2 вместо v3?
Я пытаюсь запустить кусок кода на Python, который использует Cosmos DB из Microsoft Azure. В настоящее время я использую gremlinpython 3.2.6 и последнюю версию Cosmos (по умолчанию в microsoft azure), но, похоже, между ними есть некоторые проблемы совместимости.
Когда я запускаю свой код, я получаю следующую ошибку:
GremlinServerError: 498:
ActivityId : 5c05bb15-3aa1-41b8-9c10-ab3015152eab
ExceptionType : GraphMalformedException
ExceptionMessage :
Gremlin Malformed Request: GraphSON v3 IO is not supported.
GremlinRequestId : 5c05bb15-3aa1-41b8-9c10-ab3015152eab
Context : global
GraphInterOpStatusCode : MalformedRequest
HResult : 0x80131500
Я прочитал, что должен попробовать использовать GraphSON v2 вместо V3, но не знаю, как это сделать, может ли кто-нибудь помочь?
5 ответов
Добро пожаловать в это сообщество. Вам просто нужно убедиться, что вы используете схему GraphSON v2, поскольку эта версия поддерживается в Azure Cosmos DB. Проверьте используемый json и убедитесь, что он соответствует поддерживаемой схеме. У вас есть несколько примеров по этой ссылке.
Используя C#, если вы поместите свою конфигурацию подключения в Startup.cs, вы можете настроить ее следующим образом:
services.AddSingleton<GremlinClient>(
(serviceProvider) =>
{
var gremlinServer = new GremlinServer(
hostname: "<account>.gremlin.cosmosdb.azure.com",
port: <port>,
enableSsl: true,
username: "/dbs/<db>/colls/<collection>",
password: ""
);
var connectionPoolSettings = new ConnectionPoolSettings
{
MaxInProcessPerConnection = 32,
PoolSize = 4,
ReconnectionAttempts = 3,
ReconnectionBaseDelay = TimeSpan.FromSeconds(1),
};
var mimeType = "application/vnd.gremlin-v2.0+json";
return new GremlinClient
(
gremlinServer: gremlinServer,
graphSONReader: new GraphSON2Reader(),
graphSONWriter: new GraphSON2Writer(),
mimeType: mimeType,
connectionPoolSettings: connectionPoolSettings
);
}
);
В противном случае вы должны создать клиент gremlin со следующими читателями, писателями и mimeType:
var mimeType = "application/vnd.gremlin-v2.0+json";
var client = new GremlinClient
(
gremlinServer: <your server>,
graphSONReader: new GraphSON2Reader(),
graphSONWriter: new GraphSON2Writer(),
mimeType: mimeType,
connectionPoolSettings: <your connection pool>
);
По умолчанию gremlin_python использует GraphSONSerializersV3d0
, поэтому вам нужно явно передать GraphSONSerializersV2d0
при создании клиента:
from gremlin_python.driver import client, serializer
client.Client(
message_serializer=serializer.GraphSONSerializersV2d0(),
password="...",
traversal_source='g',
url='wss://...:443/',
username="/dbs/.../colls/...",
)
Представьте это как
mime
введите при создании клиента
var client = new GremlinClient(gremlinServer:gremlinServer,mimeType:GremlinClient.GraphSON2MimeType)
Вам необходимо понизить версию до поддерживаемой версии соединителя. Это относится ко всем языкам программирования. Для Python на момент написания этой статьи это 3.2.7.