hemera.ts
1.7 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
import * as fs from 'fs';
import _ = require('lodash');
import { connect } from 'nats';
import * as path from 'path';
const Hemera = require('nats-hemera');
let hemera;
let logger;
export function init(cfg: any) {
logger = console
hemera = new Hemera(connect(cfg.nats), {
...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(async () => {
logger.log('hemera initialized');
});
return hemera;
}
interface Pattern {
pubsub$?: boolean
timeout$?: number
maxMessages$?: number
expectedMessages$?: number
[key: string]: any
}
export async function act(args: Pattern, isThrowError = false) {
const starttime = Date.now();
let localfn = hemera.router.lookup(args);
if (localfn) localfn = localfn.action;
if (!args.context) args.context = {};
let ret = await (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;
}