-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsimple.js
More file actions
100 lines (86 loc) · 2 KB
/
simple.js
File metadata and controls
100 lines (86 loc) · 2 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'
const Bench = require('fastbench')
const os = require('os')
require('./platform')
const iterations = 1000
/**
* Hemera
*/
const Hemera = require('nats-hemera')
const nats = require('nats').connect()
const hemera1 = new Hemera(nats, { logLevel: 'error', name: 'node-1' })
const hemera2 = new Hemera(nats, { logLevel: 'error', name: 'node-2' })
hemera2.ready(() => {
hemera2.add({ topic: 'math', cmd: 'add' }, (resp, cb) => {
cb(null, resp.a + resp.b)
})
})
/**
* Moleculer
*/
const { ServiceBroker } = require('moleculer')
const Transporter = require('moleculer').Transporters.NATS
const moleculer1 = new ServiceBroker({
nodeID: 'node-1',
transporter: new Transporter()
})
const moleculer2 = new ServiceBroker({
nodeID: 'node-2',
transporter: new Transporter()
})
moleculer2.createService({
name: 'math',
actions: {
add({ params }) {
return params.a + params.b
}
}
})
moleculer1.start()
moleculer2.start()
/**
* Seneca (broken)
*/
/* const seneca1 = require('seneca')()
.use('nats-transport')
// .client({ type: 'nats' })
const seneca2 = require('seneca')()
.use('nats-transport')
.add({ cmd: 'add' }, (msg, done) => {
done(null, { res: msg.a + msg.b })
})
.listen({ type: 'nats' })*/
const run = Bench(
[
/*function benchSenecaNats(done) {
seneca1.act({ cmd: 'add', a: 5, b: 3 }, (err, res) => {
if (err) console.error(err)
done()
})
}*/ function benchHemera(
done
) {
hemera1.act({ topic: 'math', cmd: 'add', a: 5, b: 3 }, (err, res) => {
if (err) console.error(err)
done()
})
},
function benchMoleculerNats(done) {
moleculer1
.call('math.add', { a: 5, b: 3 })
.then(() => {
done()
return true
})
.catch(console.error)
}
],
iterations
)
// run them two times
console.log('==============')
console.log(`Wait 1 second and send 2x ${iterations} msg`)
console.log('==============')
setTimeout(() => {
run(run)
}, 1000)