搭建微服务框架

搭建微服务框架

general-service服务

env.yaml 文件

general_service_port: 8080
general_service_address: localhost

user_service_port: 8081
user_service_address: localhost
src/config/env 文件

var fs = require('fs');
var YAML = require('yamljs');
module.exports = {
  /**
   * 初始化环境变量到process.env中
   * 如果环境变量和config重复则取环境变量里配置的值
   * @param {string} envPath 环境遍历路径
   * @param {object} config 配置项
   */
  init(envPath) {
    let env = {};
    try {
      if (!fs.existsSync(envPath)) {
        console.warn('File not exist: env.yaml');
      } else {
        let envjson = YAML.load(envPath);
        Object.keys(envjson).forEach(function (k) {
          env[k] = envjson[k];
        });
      }
    } catch (e) {
      console.info('Fail to load environment variables: ', e);
    }

    // 将env数组里的值设置到环境变量里,如果系统环境里面已经配置了则会设置失败
    Object.keys(env).forEach(function (k) {
      // Don't override env variables that were set explicitly
      if (typeof process.env[k] === 'undefined') {
        process.env[k] = env[k];
      }
    });

    if (
      !process.env['service_address'] ||
      process.env['service_address'] == 'null'
    ) {
      // 动态获取ip
      process.env['service_address'] = this.getIpAddress();
    }
  },

  getIpAddress() {
    let interfaces = require('os').networkInterfaces();
    for (let devName in interfaces) {
      let iface = interfaces[devName];
      for (let i = 0; i < iface.length; i++) {
        let alias = iface[i];
        if (
          alias.family === 'IPv4' &&
          alias.address !== '127.0.0.1' &&
          !alias.internal
        ) {
          return alias.address;
        }
      }
    }
  }
};

index.js 文件

try {
    const seneca = require('seneca')();
    const path = require('path');
    // 环境配置路径
    const envPath = path.join(path.resolve(__dirname, '../'), '/env.yaml');
    const EnvService = require('./config/env');
    // 初始化环境
    EnvService.init(envPath);

    seneca
        .listen({
            type: 'tcp',
            pin: 'server:general-service',
            port: process.env["general_service_port"],
            host: process.env["general_service_address"]
        })
        .client({
            type: 'tcp',
            pin: 'server:user_service',
            port: process.env["user_service_port"],
            host: process.env["user_service_port"]
        })
} catch (err) {
    console.log('err', err)
}
process.on("uncaughtException", function(err) {
    console.log("Caught exception: " + err);
    console.log(err.stack);
});

user-service 用户服务

env.yaml 文件

user_service_port: 8081
user_service_address: localhost

src/config/env 文件如上

api/setId.js 文件

module.exports = function setId(options) {
    /**
     * @description 获取id时间戳
     * @returns
     */
    this.add(
        'server:user-service,module:user,operate:getId',
        function getId(msg, respond) {
            try {
                var timestamp = (new Date()).valueOf();
                return respond(null, {
                    code: 0,
                    msg: '成功',
                    data: timestamp
                })
            } catch (err) {
                return respond(null, {
                    code: 1,
                    msg: '未知错误',
                    data: { errinfo: err }
                })
            }
        }
    )
}
index.js 文件

try {
    const seneca = require('seneca')();
    const path = require('path');
    // 环境配置路径
    const envPath = path.join(path.resolve(__dirname, '../'), '/env.yaml');
    const EnvService = require('./config/env');
    // 初始化环境
    EnvService.init(envPath);

    const getId = require('./api/setId')

    seneca
        .use(getId)
        .listen({
            type: 'tcp',
            pin: 'server:user-service',
            port: process.env["user_service_port"],
            host: process.env["user_service_port"]
        })
        .act('server:user-service,module:user,operate:getId', (err, result) => {
            console.log(result)
        })

} catch (err) {
    console.log('err', err)
}
process.on("uncaughtException", function(err) {
    console.log("Caught exception: " + err);
    console.log(err.stack);
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值