0

現在、開発にはメッセージハブを使用しています。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 を超えるインスタンスを実行できるようにしたことが原因である可能性があります。

もう 1 つの可能性は、アプリケーションが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));
}

ただし、クライアントの各インスタンスは作成されるとすぐに範囲外になるため、このコードを実行する 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 に答える