-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
122 lines (105 loc) · 2.96 KB
/
index.js
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
const mq = require('ibmmq');
const MQC = mq.MQC
const StringDecoder = require('string_decoder').StringDecoder;
const decoder = new StringDecoder('utf8');
const qMgr = 'main_queue_manager'
const connectionName = 'main-queue-manager-3e90.qm.eu-gb.mq.appdomain.cloud(31609)'
const qName = 'DEV.valuation'
let ok = true
console.log("Setting up connection config")
const cno = new mq.MQCNO()
const sco = new mq.MQSCO()
const csp = new mq.MQCSP()
csp.UserId = 'profile'
csp.Password = '7vWwARQZhfiouMIgJaICA1HTCu7_TQykAGNgfeNw1-32'
cno.SecurityParms = csp
cno.Options |= MQC.MQCNO_CLIENT_BINDING
const cd = new mq.MQCD()
cd.ConnectionName = connectionName
cd.ChannelName = 'CLOUD.APP.SVRCONN'
cd.SSLCipherSpec = 'ANY_TLS12_OR_HIGHER'
cd.SSLClientAuth = MQC.MQSCA_OPTIONAL
cno.ClientConn = cd
sco.KeyRepository = './cert/key'
cno.SSLConfig = sco
mq.Connx(qMgr, cno, (err, conn) => {
console.log("Starting connection")
if (err) {
console.log(err.message);
} else {
console.log(`MQCONN to ${qMgr} succesfull`)
let od = new mq.MQOD();
od.ObjectName = qName;
od.ObjectType = MQC.MQOT_Q;
let openOptions = MQC.MQOO_INPUT_AS_Q_DEF;
mq.Open(conn, od, openOptions, function (err, hObj) {
if (err) {
console.log(formatErr(err));
} else {
console.log("MQOPEN of %s successful", qName);
// And loop getting messages until done.
getMessages(hObj);
}
//cleanup(conn,hObj);
});
}
})
function getMessages(hObj) {
/* while (ok) {
getMessage(hObj);
} */
setInterval(() => {
getMessage(hObj)
}, 0)
}
// This function retrieves messages from the queue without waiting.
function getMessage(hObj) {
let buf = Buffer.alloc(1024);
let hdr;
let mqmd = new mq.MQMD();
let gmo = new mq.MQGMO();
gmo.Options = MQC.MQGMO_NO_SYNCPOINT |
MQC.MQGMO_NO_WAIT |
MQC.MQGMO_CONVERT |
MQC.MQGMO_FAIL_IF_QUIESCING;
mq.GetSync(hObj, mqmd, gmo, buf, function (err, len) {
//console.log("getting messages")
if (err) {
if (err.mqrc == MQC.MQRC_NO_MSG_AVAILABLE) {
//console.log("no more messages");
} else {
console.log(formatErr(err));
}
//ok = false;
} else {
var format = mqmd.Format;
switch (format) {
case MQC.MQFMT_RF_HEADER_2:
hdr = mq.MQRFH2.getHeader(buf);
var props = mq.MQRFH2.getProperties(hdr, buf);
console.log("RFH2 HDR is %j", hdr);
console.log("Properties are '%s'", props);
printBody(hdr.Format, buf.slice(hdr.StrucLength), len - hdr.StrucLength);
break;
case MQC.MQFMT_DEAD_LETTER_HEADER:
hdr = mq.MQDLH.getHeader(buf);
console.log("DLH HDR is %j", hdr);
printBody(hdr.Format, buf.slice(hdr.StrucLength), len - hdr.StrucLength);
break;
default:
printBody(format, buf, len);
break;
}
}
});
}
function printBody(format, buf, len) {
if (format == "MQSTR") {
console.log("*** New message ***")
console.log(`message len=${len}`);
console.log(decoder.write(buf.slice(0, len)))
console.log("*******************")
} else {
console.log("binary message: " + buf);
}
}