0

我们目前正在使用 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)

任何想法,是什么原因造成的?我们无法启动使用此功能的应用程序的任何模块。

米希尔

4

1 回答 1

3

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

因此,简单地说,原因可能是您已将应用程序扩展为在任何给定时间运行超过 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])在它超出范围之前。这将导致客户端与消息中心服务断开连接,并且不再计入同时连接的客户端数量。

于 2016-08-23T12:07:17.473 回答