eggjs mysql主从_eggjs中egg-mysql不支持mysql集群,代码修改为支持集群

说明:暂不支持egg-mysql动态数据源,用到动态数据源请自行修改。欢迎各位大佬指导。。。

集群配置:

exports.mysql = {

// 单数据库信息配置

client: {

db1: {

// host

host: 'ip1',

// 端口号

port: '3306',

// 用户名

user: 'root',

// 密码

password: '123456',

// 数据库名

database: 'mydatebase',

},

db2: {

// host

host: 'ip2',

// 端口号

port: '3306',

// 用户名

user: 'root',

// 密码

password: '123456',

// 数据库名

database: 'mydatebase',

},

db3: {

// host

host: 'ip3',

// 端口号

port: '3306',

// 用户名

user: 'root',

// 密码

password: '123456',

// 数据库名

database: 'mydatebase',

}

}

};

单数据库配置:

exports.mysql = {

// 单数据库信息配置

client: {

// host

host: 'ip1',

// 端口号

port: '3306',

// 用户名

user: 'root',

// 密码

password: '123456',

// 数据库名

database: 'mydatabase',

},

// 是否加载到 app 上,默认开启

app: true,

// 是否加载到 agent 上,默认关闭

agent: false,

};

1.找到node_modules/ali-rds/lib/client.js,

RDSClient修改如下:

function RDSClient(options) {

if (!(this instanceof RDSClient)) {

return new RDSClient(options);

}

Operator.call(this);

let configObj = JSON.stringify(options);

let len = configObj.match(/\{/g);

if (len.length > 1) {

delete options.connectionLimit;

delete options.database;

let poolCluster = mysql.createPoolCluster({

removeNodeErrorCount: 1,

defaultSelector: "RR" //RR,RANDOM,ORDER

});

for (let node in options) {

poolCluster.add(`${node}`, options[`${node}`]);

}

this.pool = poolCluster.of('*', 'RR');

console.log('<<<<<>>>>>>', options, len)

} else {

this.pool = mysql.createPool(options);

console.log('<<<<<>>>>>>', options, len)

}

[

'query',

'getConnection',

].forEach(method => {

this.pool[method] = promisify(this.pool[method]);

});

}

2./node_modules/egg-mysql/lib/mysql.js,修改如下

'use strict';

const assert = require('assert');

const rds = require('ali-rds');

let count = 0;

module.exports = app => {

app.addSingleton('mysql', createOneClient);

};

function createOneClient(config, app) {

const client = rds(config);

app.beforeStart(function* () {

const rows = yield client.query('select now() as currentTime;');

const index = count++;

app.coreLogger.info(`[egg-mysql] instance[${index}] status OK, rds currentTime: ${rows[0].currentTime}`);

});

return client;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值