zoukankan      html  css  js  c++  java
  • 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('<<<<<<----mysql createPoolCluster---->>>>>>>', options, len)
      } else {
        this.pool = mysql.createPool(options);
        console.log('<<<<<<-----mysql createPool--->>>>>>>', 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;
    }

  • 相关阅读:
    C++格式化输入输出
    算法的时间复杂度和空间复杂度
    C++编程中const和#define的区别
    C#中结构体和类的区别
    SQL之删除触发器
    Windows添加和取消右键管理员权限
    SQL之trigger(触发器)
    SQL VIEW(视图)
    二分查找的实现
    C++中this指针
  • 原文地址:https://www.cnblogs.com/qiyc/p/12966913.html
Copyright © 2011-2022 走看看