尝试使用Javascript中的gremlin连接到Cosmos DB时发生服务器超时

时间:2019-03-19 12:45:12

标签: javascript azure-cosmosdb gremlin

当我尝试在Javascript中使用gremlin 3.4.0进行连接时,我不断从cosmos db获取服务器超时(我也在.net core中尝试过,但仍然相同)。

我已经能够连接到旧版本的gremlin 2.6.0,但是现在当我将gremlin更新到3.4.0时(我也阅读了他们的文档,如何在版本3.4.0中连接到db)我总是得到服务器超时。

这是我尝试连接的方式(也包括ssl身份验证器):

const dbName = "dbName";
const collection = "collectionName";
const key = "key";
const cosmosEndpoint = "ws://endpointName.gremlin.cosmosdb.azure.com:433/gremlin";

const authenticator = new Gremlin.driver.auth.PlainTextSaslAuthenticator(`/dbs/${dbName}/colls/${collectionName}`
  , key);

const client = new Gremlin.driver.Client(
  cosmosEnpoint,
  {
    authenticator,
    traversalsource: "g",
    rejectUnauthorized: true,
    ssl: true,
    session: false
  }
);

我在Javascript中遇到此错误:

  

错误:连接ETIMEDOUT ...:433       在TCPConnectWrap.afterConnect上[作为oncomplete](net.js:1083:14)   在以下位置发出了“错误”事件:       在Connection._handleError(C:\ RDS \ RDS.Graph.API-复制(2)\ node_modules \ gremlin \ lib \ driver \ connection.js:216:10)       在WebSocket._ws.on(C:\ RDS \ RDS.Graph.API-复制(2)\ node_modules \ gremlin \ lib \ driver \ connection.js:129:40)       在WebSocket.emit(events.js:197:13)       在WebSocket.finalize(C:\ RDS \ RDS.Graph.API-复制(2)\ node_modules \ ws \ lib \ WebSocket.js:182:41)       在ClientRequest._req.on(C:\ RDS \ RDS.Graph.API-复制(2)\ node_modules \ ws \ lib \ WebSocket.js:647:10)       在ClientRequest.emit(events.js:197:13)       在Socket.socketErrorListener(_http_client.js:397:9)       在Socket.emit(events.js:197:13)       在emitErrorNT上(内部/流/destroy.js:82:8)       在emitErrorAndCloseNT(internal / streams / destroy.js:50:3)

我在.NET中遇到此错误:

  

连接尝试失败是因为被连接方在一段时间后未正确响应,或者由于连接的主机未能响应而建立的连接失败

我做错什么了吗或者是因为数据库?

谢谢大家。

1 个答案:

答案 0 :(得分:0)

您可以尝试遵循此example js code,对我来说效果很好。

忽略项目中的package.json,只需执行npm install gremlin以安装最新版本的gremlin软件包(3.4.0)

enter image description here

然后运行app.js:

const Gremlin = require('gremlin');
const config = require("./config");

const authenticator = new Gremlin.driver.auth.PlainTextSaslAuthenticator(`/dbs/${config.database}/colls/${config.collection}`, config.primaryKey)

const client = new Gremlin.driver.Client(
    config.endpoint, 
    { 
        authenticator,
        traversalsource: "g",
        rejectUnauthorized: true,
        ssl: true,
        session: false,
        mimeType : "application/vnd.gremlin-v2.0+json"
    }
);

执行日志:

enter image description here