簡體   English   中英

@mysql/xdevapi ECONNREFUSED 不釋放連接

[英]@mysql/xdevapi ECONNREFUSED doesn't release connection

我正在使用@mysql/xdevapi npm package(版本8.0.22)和mysql-8.0.15-winx64的本地安裝。

我已將池設置為啟用並嘗試從客戶端檢索 session。 如果我在 mysql 准備好之前執行此操作,那么我會收到預期的 ECONNREFUSED 異常,但連接似乎永遠不會被釋放。 如果池大小為 1,則所有后續嘗試 getSession

異常是從 getSession 方法中引發的,因此不會返回 session 供我手動調用.end()

const mysqlx = require('@mysql/xdevapi');
const client = mysqlx.getClient(config, { pooling: { enabled: true, maxSize: 1, queueTimeout: 2000 } });
const session = await this.client.getSession(); // returns ECONNREFUSED exception

/*
wait for mysql to be ready and accepting connections
*/

const session = await this.client.getSession(); // returns connection pool queue timeout exception because the previous session hasn't been returned to the pool

如何確保中止的連接返回到池中?

這是一個錯誤,我鼓勵您使用Connector for Node.jshttps://bugs.mysql.com/上報告它。

如果getSession()方法返回被拒絕的Promise (有或沒有特定錯誤),則想到的唯一解決方法是重新創建池。 例如,類似:

const poolConfig = { pooling: { enabled: true, maxSize: 1, queueTimeout: 2000 } }
let pool = mysqlx.getClient(config, poolConfig)

let session = null

try {
  session = await pool.getSession()
} catch (err) {
  await pool.close()
  pool = mysqlx.getClient(config, poolConfig)

  session = await pool.getSession()
  // do something
}

這是一個丑陋的解決方案,可能很難硬塞進您的設計中,但至少,它可以讓您享受連接池的其他好處。

免責聲明:我是 Node.js 的 MySQL X DevAPI 連接器的主要開發人員

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM