Соединение Golang космосдб-гремлин

У кого-нибудь есть образец 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 коллекции/контейнеры не применяются, может быть, имя пользователя, которое я передаю, не имеет смысла, я тоже пытался передать пустую строку, но безуспешно.

Не могли бы вы поделиться тем, что вы пробовали, а также ошибкой, с которой вы столкнулись?

Balaji 18.04.2024 07:03

Пожалуйста, уточните вашу конкретную проблему или предоставьте дополнительную информацию, чтобы выделить именно то, что вам нужно. Поскольку сейчас написано, трудно точно сказать, о чем вы спрашиваете.

Community 18.04.2024 18:02
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
1
2
105
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Соединение 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

user2006769 23.04.2024 02:22
Ответ принят как подходящий

Gremlin-go, похоже, несовместим с Azure Cosmos db. Я попробовал другой драйвер с именем gremco, и он сработал.

Другие вопросы по теме