获取错误messagehub已超出每个租户限制的最大客户端数

时间:2016-08-22 14:50:50

标签: message-hub

我们目前正在使用messagehub进行开发。我们配置了以下MessageHub实例:

但是,当我们尝试启动我们的应用程序时,我们收到错误:

events.js:141
      throw er; // Unhandled 'error' event
      ^
 NetworkError: CONNECTION ERROR (amqp:not-allowed) The maximum clients per tenant limit has been exceeded.
at Error (native)
at waitForStart (C:\Clients\Merck\Dev\MSD 
Dashboard\node_modules\mqlight\mqlight.js:1580:36)
at Immediate._onImmediate (C:\Clients\Merck\Dev\MSD    
Dashboard\node_modules\mqlight\mqlight.js:1582:30)
at processImmediate [as _immediateCallback] (timers.js:383:17)

任何想法,是什么导致这个?我们无法启动使用此功能的应用程序的任何模块。

米希尔

1 个答案:

答案 0 :(得分:3)

Message Hub服务的MQ Light API接口将同时连接的客户端数量限制为25(请参阅文档的Maximum limits部分)。

因此,原因可能是,您已经扩展了应用程序,以便在任何给定时间运行超过25个实例。

另一种可能性是您的应用程序是泄漏 MQ Light客户端的实例。例如,以下代码将尝试创建26个客户端实例(25个将成功,1个将失败):

var mqlight = require('mqlight');
var opts = {
  service: "https://mqlight-lookup-url-here",
  user: "secret",
  password: "secret"
};

for (var i = 1; i <= 26; ++i) {
  client = mqlight.createClient(opts);
  var printStarted = function(count) {
    return function() {console.log('Client ' + count + ' started');};
  }
  var printError = function(count) {
    return function(error) {
      console.log('Client ' + count + ' failed to start due to ' + error);
    };
  };
  client.on('started', printStarted(i));
  client.on('error', printError(i));
}

但是,因为客户端的每个实例在创建后都会超出范围 - 它仍然保持连接并计入其Message Hub服务实例的最大连接客户端数 - 直到Node.js进程运行此代码结束。

如果您怀疑您的应用程序可能“泄漏”MQ Light客户端,您可以使用netstat列出与MQ Light服务的所有连接。

例如,在Windows上:

netstat -o | find ":5671" | find "ESTABLISHED"

或在Linux上:

netstat -p --numeric-ports | grep ':5671.*ESTABLISHED'

如果您的应用程序 泄露MQ Light客户端,那么直接的解决方法是确保在客户端的每个实例超出范围之前始终调用client.stop([callback])。这将导致客户端与Message Hub服务断开连接,并且不再计入同时连接的客户端数量。