如何处理cassandra+aws lambda中的超时

nom7f22z  于 2021-06-14  发布在  Cassandra
关注(0)|答案(1)|浏览(483)

我有一个lambda函数,vpc连接到cassandra。
我认为,由于冷启动或其他问题,它不能连接到Cassandra在所有,lambda有10秒的超时,我想添加Cassandra超时以及,如果第一个连接没有被建立,我会杀死脚本,并返回有一个问题。
我正在为节点js使用cassandra驱动程序: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在超时结束之前不会完成代码,即使一切正常。

1hdlvixo

1hdlvixo1#

看起来您可以将timeout作为 Client 对象在这里
应该是将这个可选参数指定给您的首选项的值。您还应该在回调函数中寻找处理连接问题的方法。

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重新尝试/杀死/做些别的事情。

相关问题