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