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])を呼び出すようにすることです。これにより、クライアントはメッセージ ハブ サービスから切断され、同時に接続されたクライアントの数に対してカウントされなくなります。