【问题标题】:Aerospike works ok for 1 - 4 hours before defaulting to a connection errorAerospike 在默认连接错误之前可以正常工作 1 - 4 小时
【发布时间】:2015-08-24 23:25:53
【问题描述】:

我已经使用 Aerospike Node.js 客户端一段时间了,我注意到如果我运行服务器超过两个小时,如果我对 Aerospike 数据库进行连接调用,我会得到以下信息错误:

ERROR(23159) [connect.cc:69] [Connect] - Connecting to Cluster Failed

在此之前,执行会顺利进行。我使用 Aerospike 和 Express 来存储和检索用户内容。这是我写的端点之一

app.get("/api/content/:id",function(req,res){
    aero.client(aeroSec.generateConfig()).connect(function(err, db){
        if(err.code != aero.status.AEROSPIKE_OK)  return res.status(403).send();
        var options = {};
        options.filters = [filter.equal("secindex", req.params.id)];
        var query = db.query("ns","posts",options);
        var data;
        var count = 0;
        var s = query.execute();
        s.on("data",function(rec){
           data = rec;
        });
        s.on("error",function(err){
            data = err;    
        });
        s.on("end",function(){
           db.close();
           if(data == undefined) res.status(404).send("NOTHING FOUND");
           else res.status(200).send(data);
        });   
    });
  });

为了全面披露,我不会查询不存在的索引。在 Aerospike 论坛中的搜索建议我从我的端点中注释掉 db.close(),这只会减慢问题并不能消除它。当我连接到托管在另一台服务器上的 Aerospike 数据库时,错误开始发生,因此我决定查询本地服务器,但在正常运行两个小时后发现同样的错误。

有人知道该怎么做吗?我真的很喜欢 Aerospike 作为数据库,但如果这些问题仍然存在,我将别无选择,只能转到另一个 NoSQL 数据库。

【问题讨论】:

    标签: node.js express aerospike


    【解决方案1】:

    代码 sn-p 显示应用程序创建的客户端对象与接收到的请求数一样多。常见的用法是,创建单个客户端对象,并为与 Aerospike 服务器的所有通信共享该对象。另一个澄清是,client.connect() 是一个同步 API 调用。在 node.js 中有一个使用 express 和 Aerospike 的示例 Web 应用程序。这是link。请参阅此处以获取更多说明。

    上面的代码可以这样重构

     var aerospike = require('aerospike');
     var express   = require('express');
     var app       = express();
     var aerospikeConfig = {
          // add a node in the cluster.
          hosts: [{addr: "192.168.0.1", port: 3000 }] 
     }  
     var client = aerospike.client(aerospikeConfig);
     // client.connect() is a synchronous API call.
     client.connect(function(err, client) {
        if(err.code != aerospike.status.AEROSPIKE_OK) {
            // application should exit or re-attempt the connect call.
            // If connect call fails, connection with Aerospike server is
            // is not established. Subsequent aerospike API calls will fail.
            return err; 
        }
     });
    
    app.get("/api/content/:id",function(req,res){
        var options = {};
        options.filters = [filter.equal("secindex", req.params.id)];
        var query = client.query("ns","posts",options);
        var data;
        var count = 0;
        var s = query.execute();
        s.on("data",function(rec){
           data = rec;
        });
        s.on("error",function(err){
            data = err;    
        });
        s.on("end",function(){
           client.close();
           if(data == undefined) res.status(404).send("NOTHING FOUND");
           else res.status(200).send(data);
        });   
    });
    

    谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-08
      • 2016-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-16
      • 1970-01-01
      • 2022-07-06
      相关资源
      最近更新 更多