我正在设置一个nodejs lambda,它使用NetworkTopologyStrategy和3复制因子查询部署在EC2上的Cassandra实例。
我正在使用cassandra驱动程序库,并在Exports.handler函数外部管理连接,如解释的here
var cassandra = require('cassandra-driver');
if (typeof client === 'undefined') {
var contactPoints = ['***'];
console.log("Conneting to new client")
var client = new cassandra.Client({ contactPoints, localDataCenter: "***", keyspace: '***' });
client.connect()
}
exports.handler = function (event, context, callback) {
context.callbackWaitsForEmptyEventLoop = false
console.log('Object event: ' + JSON.stringify(event));
var query = 'SELECT * FROM ***';
client.execute(query, (err, result) => {
if (err) {
console.log(err)
callback(err)
return
}
else {
callback(null, result.rows)
}
})
}
lambda在一开始就可以完美地工作((我正在将使用api网关条目的react应用连接到lambda),但是过一会儿
{“ errorMessage”:“所有尝试查询的主机都失败。尝试了第一台主机, ***:主机被视为DOWN。请参见innerErrors。“,” errorType“:” NoHostAvailableError“,” stackTrace“:[” Function.borrowNextConnection (/var/task/node_modules/cassandra-driver/lib/request-handler.js:52:23)","RequestHandler.getNextConnection (/var/task/node_modules/cassandra-driver/lib/request-handler.js:118:20)","RequestExecution.start (/var/task/node_modules/cassandra-driver/lib/request-execution.js:86:18)","RequestHandler._startNewExecution (/var/task/node_modules/cassandra-driver/lib/request-handler.js:160:15)","newPlanCb (/var/task/node_modules/cassandra-driver/lib/request-handler.js:147:14)","DCAwareRoundRobinPolicy.newQueryPlan (/var/task/node_modules/cassandra-driver/lib/policies/load-balancing.js:206:3)","TokenAwarePolicy.newQueryPlan (/var/task/node_modules/cassandra-driver/lib/policies/load-balancing.js:274:29)","RequestHandler.send (/var/task/node_modules/cassandra-driver/lib/request-handler.js:142:11)","Function.send (/var/task/node_modules/cassandra-driver/lib/request-handler.js:110:14)","Array.utils.series.next (/var/task/node_modules/cassandra-driver/lib/client.js:935:28)“]}
稍后我进行测试时,它会工作一段时间,好像它会创建一个新的连接,然后返回相同的错误。