使用Azure函数和Azure SQL(node.js)达到连接限制

使用Azure函数和Azure SQL(node.js)达到连接限制,node.js,azure,azure-sql-database,azure-functions,tedious,Node.js,Azure,Azure Sql Database,Azure Functions,Tedious,我有一个提供node.js API的函数应用程序。我们正在使用冗长的连接到Azure SQL的连接达到900个并发连接的限制,并且意识到我们应该添加连接池(当然,除非有更好的建议) 似乎回答了我们的祈祷,但想验证如何将单个连接池与Azure功能结合使用 将“let pool=new ConnectionPool(poolConfig,connectionConfig);”置于mode.exports之上的最佳做法是否适用于所有函数?这不是每次调用单个函数时都创建一个新池吗 不幸的是,Micros

我有一个提供node.js API的函数应用程序。我们正在使用冗长的连接到Azure SQL的连接达到900个并发连接的限制,并且意识到我们应该添加连接池(当然,除非有更好的建议)

似乎回答了我们的祈祷,但想验证如何将单个连接池与Azure功能结合使用

将“let pool=new ConnectionPool(poolConfig,connectionConfig);”置于mode.exports之上的最佳做法是否适用于所有函数?这不是每次调用单个函数时都创建一个新池吗


不幸的是,Microsoft没有关于node.js的清晰文档,因此非常感谢您的帮助

要使整个功能应用程序共享一个池,我们需要将初始化部分放在一个共享模块中。Christiaan Westerbeek曾发布过一篇文章,在这方面,函数应用程序和web应用程序没有太大区别

我建议使用
mssql
(在内部使用
Teduous
generic pool
),而不是两年内似乎都没有更新的

将连接代码放在
poolConfig.js
文件夹下的
SharedLib
文件夹中

const sql = require('mssql');
const config = {
    pool:{
        max:50 // default: 10
    },
    user: '',
    password: '',
    server: '', 
    database: '',
    options: {
        encrypt: true // For Azure Sql 
    }
};
const poolPromise = new sql.ConnectionPool(config).connect().then(pool => {
    console.log('Connected to MSSQL');
    return pool;
  })
  .catch(err => console.log('Database Connection Failed! Bad Config: ', err));

module.exports = {
  sql, poolPromise
}
并加载模块以连接到sql。我们使用wait来获取ConnectionPool,函数应该是异步的(v2js函数的默认值)

请注意,如果Function app通过多个实例向外扩展,那么也将为每个实例创建新池

const { poolPromise } = require('../SharedLib/poolConfig');

module.exports = async function (context, req) {
    var pool = await poolPromise;
    var result =  await pool.request().query("");
    ...
}