如何在Cassandra + AWS Lambda中处理超时

时间:2018-12-05 15:29:00

标签: node.js cassandra datastax-enterprise cassandra-driver

我在VPC上有一个Lambda函数,可以连接到Cassandra。

我认为由于冷启动或其他问题,它根本无法连接到Cassandra,Lambda的超时时间为10秒,如果未建立第一个连接,我也想为Cassandra添加超时我将终止脚本并返回出现问题。

我将cassandra-driver用于节点js: https://github.com/datastax/nodejs-driver/

联系方式:

const cassandra = require('cassandra-driver');
const client = new cassandra.Client({ contactPoints: ['127.0.0.1'], keyspace: 'keyspace' });

我无法使用nodejs的超时,然后检查连接,因为即使一切正常,Lambda也不会完成代码,直到超时完成。

1 个答案:

答案 0 :(得分:4)

您似乎可以将超时作为Client对象here对象的可选参数

应该将此可选参数分配给您的首选项值。您还应该在回调函数中查找处理连接问题。

const cassandra = require('cassandra-driver');
/* Documentation: github.com/datastax/nodejs-driver/blob/master/lib/client.js - line 120*/
const client = new cassandra.Client(
{ 
   contactPoints: ['127.0.0.1'],
   keyspace: 'keyspace',
   socketOptions:
   {
      connectTimeout: 2000
   }
});

创建客户端后,您应该能够在connect方法上指定一个回调(如果它不起作用)。

/* Documentation: github.com/datastax/nodejs-driver/blob/master/lib/client.js - line 320 */
client.connect(function (err) {
   if (err) return console.error(err); /* your attempt to connect is terminated here. */
   console.log('Connected to cluster with %d host(s): %j', 
   client.hosts.length, client.hosts.keys());
});

一旦您确认您的(err)存在-您的连接尝试就基本终止了。您可以根据自己的AWS Lambda重试/杀死/执行其他操作。