You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用TypeScript连接Apache Ignite?遇超时错误,求适配库及JDBC驱动方案

连接Apache Ignite数据库的问题与解决方案

问题场景

尝试通过mysql库编写TypeScript代码连接Apache Ignite数据库,代码如下:

import * as mysql from 'mysql';

async function connectAndQueryDatabase(): Promise<void> {
    // Database connection configuration
    const connection = mysql.createConnection({
        host: '10.10.10.10',
        database: 'DBNAME'
    });

try {
     await new Promise<void>((resolve, reject) => {
        connection.connect((err) => {
            if (err) {
                reject(err);
                return;
            }
            console.log('Connected to database');
            resolve();
        });
    });

     const queryResults = await new Promise<any>((resolve, reject) => {
        connection.query('SELECT * FROM TABLE', (err, results, fields) => {
            if (err) {
                reject(err);
                return;
            }
            resolve(results);
        });
    });

    console.log('Query results:', queryResults);

} catch (error) {
    console.error('Error:', error);
} finally {
     await new Promise<void>((resolve, reject) => {
        connection.end((err) => {
            if (err) {
                reject(err);
                return;
            }
            console.log('Database connection closed');
            resolve();
        });
    });
}}


// Call the function to connect and query the database
connectAndQueryDatabase();

运行后出现超时错误:

errno: 'ETIMEDOUT',
code: 'ETIMEDOUT',
syscall: 'connect',
fatal: true

不确定应该使用哪个库连接(SQL客户端仅需URL即可连接),询问是否有可用的JDBC驱动来创建数据库连接。

解决方案

为什么mysql库会失败?

Ignite虽支持MySQL兼容协议,但默认未开启该连接器,且mysql库是针对MySQL开发的,并非Ignite官方适配库。超时大概率是因为Ignite节点未开启MySQL兼容端口(默认3306),或网络/防火墙阻止了连接。更稳妥的方式是使用Ignite官方支持的客户端或JDBC方案。

方案1:使用Ignite官方Node.js客户端

这是最推荐的方式,官方提供的apache-ignite-client库专门用于Node.js环境连接Ignite:

  1. 安装依赖:
npm install apache-ignite-client
  1. TypeScript代码示例:
import { IgniteClient, IgniteClientConfiguration, SqlQuery } from 'apache-ignite-client';

async function connectAndQuery() {
    const client = new IgniteClient();
    try {
        // 连接Ignite集群(默认thin客户端端口10800)
        await client.connect(new IgniteClientConfiguration('10.10.10.10:10800'));
        
        // 执行SQL查询
        const sqlQuery = new SqlQuery('TABLE', 'SELECT * FROM TABLE');
        const results = await client.query(sqlQuery).getAll();
        
        console.log('查询结果:', results);
    } catch (error) {
        console.error('连接或查询出错:', error);
    } finally {
        // 断开连接
        client.disconnect();
    }
}

connectAndQuery();

方案2:使用JDBC驱动(Node.js环境)

如果偏好JDBC方式,可以通过jdbc库在Node.js中调用Ignite的JDBC驱动:

  1. 安装依赖:
npm install jdbc java
  1. 下载Ignite的JDBC驱动包(如ignite-core.jar、ignite-jdbc.jar),放到项目目录下
  2. TypeScript代码示例:
import { JDBC } from 'jdbc';

async function connectViaJDBC() {
    const config = {
        libpath: ['./ignite-core.jar', './ignite-jdbc.jar'], // 替换为实际jar包路径
        drivername: 'org.apache.ignite.IgniteJdbcDriver',
        url: 'jdbc:ignite:thin://10.10.10.10:10800/DBNAME' // Ignite Thin JDBC URL
    };

    const jdbc = new JDBC(config);

    try {
        await jdbc.initialize();
        const conn = await jdbc.reserve();
        
        // 执行查询
        const results = await conn.query('SELECT * FROM TABLE');
        console.log('查询结果:', results);
        
        await jdbc.release(conn);
    } catch (error) {
        console.error('JDBC连接出错:', error);
    } finally {
        await jdbc.close();
    }
}

connectViaJDBC();

超时问题排查要点

  • 确认Ignite节点的IP和端口可达:thin客户端默认端口10800,MySQL兼容端口默认3306,需检查Ignite配置文件中是否开启了对应连接器
  • 检查防火墙/安全组是否允许目标端口的入站访问
  • 确认Ignite集群处于正常运行状态

内容的提问来源于stack exchange,提问作者Pradap Pandian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 03:14:52