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

标签 node.js azure azure-sql-database azure-functions tedious

我有一个提供 Node.js API 服务的函数应用程序。我们通过繁琐的连接到 Azure SQL 达到了 900 个并发连接限制,并意识到我们应该添加连接池(当然,除非有更好的建议)。

Azure Functions + Azure SQL + Node.js and connection pooling between requests?似乎回应了我们的祈祷,但想要验证如何将单个连接池与 Azure 函数一起使用

最好的做法是放置“let pool = new ConnectionPool(poolConfig, connectionConfig);”上面的 mode.exports 是否支持所有功能?这不是每次调用单个函数时都会创建一个新池吗?

不幸的是,微软没有关于 Node.js 的明确文档,因此我们将不胜感激!

最佳答案

为了使整个Function应用程序共享一个池,我们需要将初始化部分放入共享模块中。 Christiaan Westerbeek 发布了 wonderful solution使用mssql ,在这方面,Function 应用和 Web 应用没有太大区别。

我建议使用mssql(在内部使用tediousgeneric-pool)而不是tedious-connection-pool好像已经两年没有更新了。

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

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。我们使用await获取ConnectionPool,该函数应该是异步的(v2 js函数默认)。

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

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

请注意,如果 Function 应用程序扩展到多个实例,则也会为每个实例创建新池。

关于node.js - 使用 Azure 函数和 Azure SQL (node.js) 达到连接限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53604240/

相关文章:

javascript - 需要相同的模块,不同的路径,变量不共享

Node.js内存泄漏导致系统丢失可用内存,即使在 Node 重启后也是如此?

node.js - Hapi - 仅回复 JSON

azure - 如何实现 SASTokenProvider 以进行每个容器的 SAS token 访问?

c# - 防止某些字段被 .NET Azure Web Api 中的 PATCH 覆盖

php - 如何将 Symfony 4 与 MSSQL 连接

reporting-services - SQL Azure 报告

azure - 如何将 SQL 数据库中的数据获取到存储 blob 中以供引用数据

javascript - 错误 [ERR_HTTP_HEADERS_SENT] : Cannot set headers after they are sent to the client ASYNC AWAIT not Working

c# - 维护多个实例的处理顺序