2017-01-12 10 views
2

関連するWebアプリケーションからCloudantデータベースにアクセスする特定の関数を実行すると、Node.jsコンソールウィンドウに次のエラーが表示されます。 :Cloudent LiteサービスでBluemixのNode.js Webアプリケーションで500のクエリエラーが発生する

"Error: You've exceeded your current limit of 5 requests per second for query class".

私は私のChromeウェブブラウザでは、この対応するエラーを取得:

"MethodHubFrontend-1.1.0.js:32 POST http://cognitivehub.w3ibm.mybluemix.net/api/export/archive 500 (Internal Server Error)".

当社のアプリケーションはCloudant Liteのサービスと(CIO)専用Bluemix上で実行されています。これらのエラーの原因は何ですか? Cloudant Liteのスループット制限を超過しているためですか?

クラウドスタンダードには、毎秒50のクエリを提供するオプション以外にもオプションがありますか?

私たちのNode.jsサーバーのエラーをどのように処理して、500エラーコードではなく3xxエラーコードを返しますか?

答えて

3

What is causing these errors? Is it because we are exceeding the 5 queries per second throughput limitation in Cloudant Lite?

はい、正しくあります。レート制限を引き上げるには、標準プランにアップグレードする必要があります。詳細については、Cloudantウェブコンソールのアカウントタブの詳細をご覧ください。 アカウント>容量タブにリストされているよう

Is there an option in Cloudant Standard, other than the one that provides 50 queries per second, which we could use?

は、いくつかのレベルがあります。

Also, how should we be handling the error in our Node.js server so it returns a 3xx error code instead of the 500 error code?

CloudantはHTTPコード429(Too Many Requests)を返す必要があります。あなたのアプリケーションは、このエラー状態に2つの方法で応答することができます。要求を失敗または再送信します。

+0

クラウドサービスへの各リクエストの間に同じエラーが発生し、5秒の待機時間があります。私は何かがサービスに間違っていると思う。 –

-1

過去数日間同じエラーが発生しています。ここに私が使用しているコードがあります。私は、問題はnodejsの非同期性に関係しており、コールバックを適切に使用しないので、コード/リクエストが非同期的に非同期的に送信されるのと同時に発生すると思います。

Error: You've exceeded your current limit of 5 requests per second for query class

私がCloudant Serviceに対して行う各リクエストの間に1秒の待機時間があります。私は何かがサービスに間違っていると思う。

// Used to add sleep time between calls to cloudant 
var sleep = require('sleep'); 
const winston = require('winston') 
var action_result = null 
winston.level = 'debug'; 
var dbCredentials = { 
    dbName: 'testdb' 
}; 
var feed = 1; 
//Intialize DB for putting records in Cloudant. 
dbCredentials.url = "https://replace with your URL-bluemix:replacewith your URL-bluemix.cloudant.com"; 
cloudant = require('cloudant')(dbCredentials.url); 

// check if DB exists if not create a testdb database 
cloudant.db.create(dbCredentials.dbName, function(err, data) { 
winston.log("debug","create a test database Error:", err); 
winston.log("debug","create a test database Data:", data);  
}); 

dbnames = cloudant.db.use(dbCredentials.dbName); 
winston.log("debug","Creating a record in database %s" , dbCredentials.dbName); 

// Insert a one second timeout delay to not exceed 5 queries every 1 second in Cloudant API 
winston.log("debug","Reproduce timeout error First SLEEP 5 minutes--------------- FIND Time is %d ", new Date().getTime()/1000); 
sleep.sleep(1); 
//Check if the asset action already exists. 
dbnames.find({selector:{feed:feed }}, function(er, action_result) { 
sleep.sleep(5); 
    if (er) { 
     winston.log("debug",'[db.find] Error Message %s', er.message); 
throw er; 
    } 
}); 
    if (action_result !== null) { 
    winston.log("debug",'Reproduce timeout error found results %d documents.', action_result.docs.length); 
    return action_result; 
}else{ 
     winston.log("debug",'Reproduce timeout error before loop'); 
     for (var i = 0; i < 1000; i++) { 
      winston.log("debug","Reproduce timeout error SLEEP item %d --------------- FIND Time is %d " ,i, new Date().getTime()/1000); 
      sleep.sleep(1); 
      dbnames.insert(docData (i, new Date().getTime()/1000),  function(err, body, header) { 
        if (err) { 
         return winston.log("debug",'[db.insert] ', err.message); 
        }  
        winston.log("debug",'You have inserted the doc.'); 
        expert_exists = false; 
       }); 
     }; //End Loop 
}; //End Else 

function docData (number, timestring) { 
    var responseData = { 
      feed : number, 
      time : timestring, 
    }; 
    return responseData; 
} 
関連する問題