У кого-нибудь есть образец golang для подключения к cosmosdb-gremlin через wss, желательно с использованием первичного ключа или строки подключения? До сих пор я пробовал гремлинго, грамесс и т. д., но ничего не дало успешного соединения. Заранее спасибо за любые подсказки.
До сих пор я пробовал гремлинго, грамесс и т. д., но ничего не дало успешного соединения.
Ниже приведен код, который я пробовал, например:
func createGremlinClient() *gremlingo.DriverRemoteConnection{
endpoint := "wss://<url-here>.cosmos.azure.com:443/"
accessKey := "my-primarykey-here"
client, err := gremlingo.NewDriverRemoteConnection(endpoint,
func(settings *gremlingo.DriverRemoteConnectionSettings) {
settings.TraversalSource = "g"
settings.NewConnectionThreshold = 4
settings.EnableCompression = false
settings.ReadBufferSize = 0
settings.WriteBufferSize = 0
settings.AuthInfo = &gremlingo.AuthInfo{
Header: http.Header{"Authorization": []string{accessKey}},
Username: "",
Password: accessKey,
}
})
if err != nil {
fmt.Println(err)
return nil
}
return client
}
ниже приведена ошибка, которую я получаю:
18.04.2024, 16:16:34 Не удалось создать экземпляр нового соединения; установка состояния соединения на закрытое.
2024/04/18 16:16:34 Ошибка при создании нового соединения для пула соединений: веб-сокет: плохое рукопожатие
2024/04/18 16:16:34 Произошла ошибка во время работы NewDriverRemoteConnection: «E0104: не удалось установить успешные соединения: веб-сокет: плохое рукопожатие»
После передачи строки подключения вместо URL-адреса конечной точки я все равно получаю ту же ошибку.
Обновлять:
Я изменил код, как показано ниже, и выдает другую ошибку:
package main
import (
"crypto/tls"
"fmt"
gremlin "github.com/apache/tinkerpop/gremlin-go/v3/driver"
"net/http"
"time"
)
func createGremlinClient() *gremlin.DriverRemoteConnection {
endpoint := "<endpoint>"
accessKey := "<primary-key>"
client, err := gremlin.NewDriverRemoteConnection(endpoint, func(settings *gremlin.DriverRemoteConnectionSettings) {
settings.ConnectionTimeout = 45 * time.Second
settings.ReadBufferSize = 4096
settings.WriteBufferSize = 4096
settings.TlsConfig = &tls.Config{InsecureSkipVerify: true}
settings.AuthInfo = &gremlin.AuthInfo{
Header: http.Header{"Authorization": []string{accessKey}},
Username: "/dbs/g",
Password: accessKey,
}
})
if err != nil {
fmt.Println("Error creating Gremlin client:", err)
return nil
}
return client
}
func main() {
client := createGremlinClient()
if client == nil {
fmt.Println("Gremlin client creation failed.")
return
}
g := gremlin.Traversal_().WithRemote(client)
query := g.AddV().Iterate()
count, _ := g.V().Count().Next()
err := <-query
if err != nil {
fmt.Println(err)
return
}
fmt.Println("Vertex count:", *count)
defer client.Close()
}
Ошибка, которую я получаю:
2024/04/19 10:52:19 Подключаемся.
19.04.2024, 10:52:19 Ошибка цикла чтения «websocket: close 1011 (внутренняя ошибка сервера): Internal-Server-Error», закрытие цикла чтения.
19.04.2024, 10:52:19 Ошибка цикла чтения «websocket: close 1011 (внутренняя ошибка сервера): Internal-Server-Error», закрытие цикла чтения.
2024/04/19 10:52:19 Вызов обратного вызова при ошибке соединения, протокол закрытия.
веб-сокет: закрыть 1011 (внутренняя ошибка сервера): Internal-Server-Error
Я думаю, что для Cosmos-Gremlin GraphDB коллекции/контейнеры не применяются, может быть, имя пользователя, которое я передаю, не имеет смысла, я тоже пытался передать пустую строку, но безуспешно.
Пожалуйста, уточните вашу конкретную проблему или предоставьте дополнительную информацию, чтобы выделить именно то, что вам нужно. Поскольку сейчас написано, трудно точно сказать, о чем вы спрашиваете.
Соединение Golang космосдб-гремлин
В этом документе предлагается связь Cosmos DB Gremlin с языками Python
, Node.Js
и .NET
. На этих языках доступны возможные зависимости для подключения к Cosmos DB Gremlin API. Итак, при попытке подключения к GO
выдается ошибка.
Ниже приведен код .NET
, который успешно подключается к API Gremlin Azure Cosmos DB.
static async Task Main(string[] args)
{
string hostname = "<account_name>.gremlin.cosmos.azure.com";
int port = 443;
string primaryKey = "*****";
string database = "newdb";
string collection = "newgraph";
var gremlinServer = new GremlinServer(
hostname,
port,
true,
$"/dbs/{database}/colls/{collection}",
primaryKey
);
var gremlinClient = new GremlinClient(
gremlinServer,
new GraphSON2Reader(),
new GraphSON2Writer(),
mimeType: "application/vnd.gremlin-v2.0+json"
);
string gremlinQuery = "g.V()";
var results = await gremlinClient.SubmitAsync<Dictionary<string, object>>(gremlinQuery);
foreach (var result in results)
{
Console.WriteLine($"Vertex ID: {result["id"]}, Label: {result["label"]}");
var properties = result["properties"] as Dictionary<string, object>;
if (properties != null)
{
foreach (var property in properties)
{
var propertyName = property.Key;
var propertyValue = property.Value;
if (propertyValue is Dictionary<string, object> innerDict)
{
Console.WriteLine($"Property Name: {propertyName}, Value (Dictionary):");
foreach (var kvp in innerDict)
{
Console.WriteLine($"Inner Key: {kvp.Key}, Inner Value: {kvp.Value}");
}
}
else
{
Console.WriteLine($"Property Name: {propertyName}, Value: {propertyValue}");
}
}
}
else
{
Console.WriteLine("No properties found for this vertex.");
}
Console.WriteLine();
}
}
Выход:
Vertex ID: 22946583-c99d-4b37-8e02-808d1287346e, Label: Name
Property Name: name,
Value: System.Linq.Enumerable+SelectEnumerableIterator`2[System.Text.Json.JsonElement,System.Object]
ищу образец go, у меня есть рабочий код .net и Java
Gremlin-go, похоже, несовместим с Azure Cosmos db. Я попробовал другой драйвер с именем gremco, и он сработал.
Не могли бы вы поделиться тем, что вы пробовали, а также ошибкой, с которой вы столкнулись?