Получение mysql: «Слишком много соединений», несмотря на использование createPool в nodeJs - PullRequest
0 голосов
/ 20 декабря 2018

Я использую Observables для отображения данных в реальном времени в приложении angular2 +, а бэкэнд написан на NodeJs, который использует базу данных mysql.Так как я использую Observables, мне нужны десятки миллионов соединений mysql для продолжения работы в реальном времени.Но невозможно приобрести так много связей.Поэтому я использовал пул, где соединение создается из пула соединений.Однако я не могу это реализовать.Я все еще получаю сообщение об ошибке:

Ошибка: ER_CON_COUNT_ERROR: слишком много подключений "

Пожалуйста, помогите мне закрыть подключение, чтобы число подключений не превышало нумерацию.

код переднего конца

angular.component.ts

Observable.interval(10000).subscribe(x => {

  this.viewData(Val);

  // more functions

  console.log(" Observable")
});

код узлаJS

dashboard.service.js

function viewData(data) {

    var sqlQuery = `
    select * from TRANSACTION_PAYLOAD where INTERFACE_NAME = 'Highmark' AND (STATUS ='SUCCESS_RESPONSE')`

    var deferred = Q.defer();
    console.log("INSIDE NODE JS SERVICE");

    var host = config.host;
    var user = config.user;
    var password = config.password;
    var database = config.database;

    var con = mysql.createPool({
        host: host,
        user: user,
        password: password,
        database: database
    });

    con.getConnection(function (err) {
        console.log("Inside .getConnection ")

        if (err) deferred.reject(err.name + ': ' + err.message);

        con.query(sqlQuery,
            function (err, result, fields) {
                if (err) deferred.reject(err.name + ': ' + err.message);


                console.log(result);
                deferred.resolve(result);
            });
    });
    return deferred.promise; 
    con.close();
}

1 Ответ

0 голосов
/ 20 декабря 2018

вы создаете пул mysql для каждого запроса.Предполагается, что у вас один пул соединений.

пул соединений автоматически управляет подключениями к серверу mysql.

вам нужно убрать инициализацию пула соединений из вашей функции.

убрать разрыв соединения

const mysqlConOptions = {
    host: host,
    user: user,
    password: password,
    database: database
};
var conPool = mysql.createPool(mysqlConOptions);

внутри вашей функции,

conn = await conPool.getConnection();
...