hemera.js
3.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.act = exports.add = exports.init = void 0;
const fs = require("fs");
const _ = require("lodash");
const nats_1 = require("nats");
const path = require("path");
const Hemera = require('nats-hemera');
let hemera;
let logger;
function init(cfg, callback) {
logger = cfg.log ? new cfg.log(`${cfg.name}/hemera`) : console;
hemera = new Hemera((0, nats_1.connect)(cfg.nats), Object.assign({}, cfg.hemera));
logger.info('msbase hemera log init success');
try {
const HemeraZipkin = require('hemera-zipkin');
hemera.use(HemeraZipkin, {
host: process.env.ZIPKIN_URL,
port: process.env.ZIPKIN_PORT,
sampling: 1
});
}
catch (e) {
logger.info('zipkin未配置: ');
}
hemera.ready(() => __awaiter(this, void 0, void 0, function* () {
logger.log('hemera initialized');
callback(() => {
try {
_.forEach(cfg.apipath ? cfg.apipath : ['./build/services/'], requirefile);
}
catch (error) {
logger.log(error.message);
}
logger.log('api initialized');
});
}));
return hemera;
}
exports.init = init;
function requirefile(dir) {
fs.readdirSync(dir).forEach((file) => {
try {
console.info(`初始化微服务,扫描文件 ${path.resolve(dir + file)}`);
if (file.substr(-3) === '.js' && require(path.resolve(dir + file)))
return;
if (file.indexOf('.') === -1)
requirefile(`${dir}${file}/`);
}
catch (e) {
console.info(`微服务初始化异常 ${dir} ${file}`, e);
}
});
}
function add(args, callback) {
if (hemera) {
hemera.add(args, (req) => __awaiter(this, void 0, void 0, function* () { return callback(req).catch(e => { return { error: e.message }; }); }));
// hemera.add(args, async (req, cb) => {
// const ret = await callback(req);
// cb(null, ret);
// });
}
}
exports.add = add;
function act(args, isThrowError = false) {
return __awaiter(this, void 0, void 0, function* () {
const starttime = Date.now();
let localfn = hemera.router.lookup(args);
if (localfn)
localfn = localfn.action;
if (!args.context)
args.context = {};
let ret = yield (localfn ?
localfn(args)
: hemera.act(args)).catch((error) => ({ error: error.message, code: 1001 }));
if (ret && ret.context)
ret = ret.data;
if (ret && ret.error)
logger.error(ret.error);
if (isThrowError && ret && ret.error)
throw new Error(ret.error);
const total = Date.now() - starttime;
if (total > 200) {
// logger.log(`${JSON.stringify(args)} 调用时间耗时:${total}毫秒 ${JSON.stringify(ret)}`);
logger.log(`${JSON.stringify(args)} 调用时间耗时:${total}毫秒 `);
}
return ret;
});
}
exports.act = act;
//# sourceMappingURL=hemera.js.map