amqp-connection-manager 3.4.5 → 3.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/AmqpConnectionManager.js +31 -5
- package/dist/cjs/ChannelWrapper.js +173 -88
- package/dist/esm/AmqpConnectionManager.d.ts +2 -0
- package/dist/esm/AmqpConnectionManager.js +28 -2
- package/dist/esm/AmqpConnectionManager.js.map +1 -1
- package/dist/esm/ChannelWrapper.d.ts +37 -9
- package/dist/esm/ChannelWrapper.js +173 -88
- package/dist/esm/ChannelWrapper.js.map +1 -1
- package/package.json +1 -1
|
@@ -115,6 +115,29 @@ class AmqpConnectionManager extends events_1.EventEmitter {
|
|
|
115
115
|
isConnected() {
|
|
116
116
|
return !!this._currentConnection;
|
|
117
117
|
}
|
|
118
|
+
/** Force reconnect - noop unless connected */
|
|
119
|
+
reconnect() {
|
|
120
|
+
if (this._closed) {
|
|
121
|
+
throw new Error('cannot reconnect after close');
|
|
122
|
+
}
|
|
123
|
+
// If we have a connection, close it and immediately connect again.
|
|
124
|
+
// Wait for ordinary reconnect otherwise.
|
|
125
|
+
if (this._currentConnection) {
|
|
126
|
+
this._currentConnection.removeAllListeners();
|
|
127
|
+
this._currentConnection
|
|
128
|
+
.close()
|
|
129
|
+
.catch(() => {
|
|
130
|
+
// noop
|
|
131
|
+
})
|
|
132
|
+
.then(() => {
|
|
133
|
+
this._currentConnection = undefined;
|
|
134
|
+
this._disconnectSent = true;
|
|
135
|
+
this.emit('disconnect', { err: new Error('forced reconnect') });
|
|
136
|
+
return this._connect();
|
|
137
|
+
})
|
|
138
|
+
.catch(neverThrows);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
118
141
|
/** The current connection. */
|
|
119
142
|
get connection() {
|
|
120
143
|
return this._currentConnection;
|
|
@@ -154,12 +177,15 @@ class AmqpConnectionManager extends events_1.EventEmitter {
|
|
|
154
177
|
// Round robin between brokers
|
|
155
178
|
const url = this._urls[this._currentUrl];
|
|
156
179
|
this._currentUrl++;
|
|
157
|
-
|
|
180
|
+
// Set connectionOptions to the setting in the class instance (which came via the constructor)
|
|
181
|
+
let connectionOptions = this.connectionOptions;
|
|
158
182
|
let originalUrl;
|
|
159
183
|
let connect;
|
|
160
184
|
if (typeof url === 'object' && 'url' in url) {
|
|
161
185
|
originalUrl = connect = url.url;
|
|
162
|
-
|
|
186
|
+
// If URL is an object, pull out any specific URL connectionOptions for it or use the
|
|
187
|
+
// instance connectionOptions if none were provided for this specific URL.
|
|
188
|
+
connectionOptions = url.connectionOptions || this.connectionOptions;
|
|
163
189
|
}
|
|
164
190
|
else if (typeof url === 'string') {
|
|
165
191
|
originalUrl = connect = url;
|
|
@@ -195,7 +221,7 @@ class AmqpConnectionManager extends events_1.EventEmitter {
|
|
|
195
221
|
this._currentConnection = undefined;
|
|
196
222
|
this._disconnectSent = true;
|
|
197
223
|
this.emit('disconnect', { err });
|
|
198
|
-
const handle = helpers_js_1.wait(this.reconnectTimeInSeconds * 1000);
|
|
224
|
+
const handle = (0, helpers_js_1.wait)(this.reconnectTimeInSeconds * 1000);
|
|
199
225
|
this._cancelRetriesHandler = handle.cancel;
|
|
200
226
|
handle.promise
|
|
201
227
|
.then(() => this._connect())
|
|
@@ -219,10 +245,10 @@ class AmqpConnectionManager extends events_1.EventEmitter {
|
|
|
219
245
|
this._connectPromise = undefined;
|
|
220
246
|
let handle;
|
|
221
247
|
if (err.name === 'OperationalError' && err.message === 'connect ETIMEDOUT') {
|
|
222
|
-
handle = helpers_js_1.wait(0);
|
|
248
|
+
handle = (0, helpers_js_1.wait)(0);
|
|
223
249
|
}
|
|
224
250
|
else {
|
|
225
|
-
handle = helpers_js_1.wait(this.reconnectTimeInSeconds * 1000);
|
|
251
|
+
handle = (0, helpers_js_1.wait)(this.reconnectTimeInSeconds * 1000);
|
|
226
252
|
}
|
|
227
253
|
this._cancelRetriesHandler = handle.cancel;
|
|
228
254
|
return handle.promise.then(() => this._connect());
|
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const events_1 = require("events");
|
|
7
7
|
const promise_breaker_1 = __importDefault(require("promise-breaker"));
|
|
8
|
+
const MAX_MESSAGES_PER_BATCH = 1000;
|
|
8
9
|
const IRRECOVERABLE_ERRORS = [
|
|
9
10
|
403,
|
|
10
11
|
404,
|
|
@@ -56,6 +57,8 @@ class ChannelWrapper extends events_1.EventEmitter {
|
|
|
56
57
|
this._messages = [];
|
|
57
58
|
/** Oublished, but not yet confirmed messages. */
|
|
58
59
|
this._unconfirmedMessages = [];
|
|
60
|
+
/** Consumers which will be reconnected on channel errors etc. */
|
|
61
|
+
this._consumers = [];
|
|
59
62
|
/**
|
|
60
63
|
* True if the "worker" is busy sending messages. False if we need to
|
|
61
64
|
* start the worker to get stuff done.
|
|
@@ -67,6 +70,10 @@ class ChannelWrapper extends events_1.EventEmitter {
|
|
|
67
70
|
* workers ever do wake up, they'll know to stop working.
|
|
68
71
|
*/
|
|
69
72
|
this._workerNumber = 0;
|
|
73
|
+
/**
|
|
74
|
+
* True if the underlying channel has room for more messages.
|
|
75
|
+
*/
|
|
76
|
+
this._channelHasRoom = true;
|
|
70
77
|
this._onConnect = this._onConnect.bind(this);
|
|
71
78
|
this._onDisconnect = this._onDisconnect.bind(this);
|
|
72
79
|
this._connectionManager = connectionManager;
|
|
@@ -74,6 +81,7 @@ class ChannelWrapper extends events_1.EventEmitter {
|
|
|
74
81
|
this._json = (_a = options.json) !== null && _a !== void 0 ? _a : false;
|
|
75
82
|
// Array of setup functions to call.
|
|
76
83
|
this._setups = [];
|
|
84
|
+
this._consumers = [];
|
|
77
85
|
if (options.setup) {
|
|
78
86
|
this._setups.push(options.setup);
|
|
79
87
|
}
|
|
@@ -212,7 +220,9 @@ class ChannelWrapper extends events_1.EventEmitter {
|
|
|
212
220
|
try {
|
|
213
221
|
const channel = await connection.createConfirmChannel();
|
|
214
222
|
this._channel = channel;
|
|
223
|
+
this._channelHasRoom = true;
|
|
215
224
|
channel.on('close', () => this._onChannelClose(channel));
|
|
225
|
+
channel.on('drain', () => this._onChannelDrain());
|
|
216
226
|
this._settingUp = Promise.all(this._setups.map((setupFn) =>
|
|
217
227
|
// TODO: Use a timeout here to guard against setupFns that never resolve?
|
|
218
228
|
promise_breaker_1.default.call(setupFn, this, channel).catch((err) => {
|
|
@@ -221,7 +231,11 @@ class ChannelWrapper extends events_1.EventEmitter {
|
|
|
221
231
|
return;
|
|
222
232
|
}
|
|
223
233
|
this.emit('error', err, { name: this.name });
|
|
224
|
-
})))
|
|
234
|
+
})))
|
|
235
|
+
.then(() => {
|
|
236
|
+
return Promise.all(this._consumers.map((c) => this._reconnectConsumer(c)));
|
|
237
|
+
})
|
|
238
|
+
.then(() => {
|
|
225
239
|
this._settingUp = undefined;
|
|
226
240
|
});
|
|
227
241
|
await this._settingUp;
|
|
@@ -229,13 +243,6 @@ class ChannelWrapper extends events_1.EventEmitter {
|
|
|
229
243
|
// Can happen if channel closes while we're setting up.
|
|
230
244
|
return;
|
|
231
245
|
}
|
|
232
|
-
if (this._unconfirmedMessages.length > 0) {
|
|
233
|
-
// requeue any messages that were left unconfirmed when connection was lost
|
|
234
|
-
let message;
|
|
235
|
-
while ((message = this._unconfirmedMessages.shift())) {
|
|
236
|
-
this._messages.push(message);
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
246
|
// Since we just connected, publish any queued messages
|
|
240
247
|
this._startWorker();
|
|
241
248
|
this.emit('connect');
|
|
@@ -253,6 +260,11 @@ class ChannelWrapper extends events_1.EventEmitter {
|
|
|
253
260
|
}
|
|
254
261
|
// Wait for another reconnect to create a new channel.
|
|
255
262
|
}
|
|
263
|
+
/** Called whenever the channel drains. */
|
|
264
|
+
_onChannelDrain() {
|
|
265
|
+
this._channelHasRoom = true;
|
|
266
|
+
this._startWorker();
|
|
267
|
+
}
|
|
256
268
|
// Called whenever we disconnect from the AMQP server.
|
|
257
269
|
_onDisconnect(ex) {
|
|
258
270
|
this._irrecoverableCode = ex.err instanceof Error ? ex.err.code : undefined;
|
|
@@ -290,7 +302,7 @@ class ChannelWrapper extends events_1.EventEmitter {
|
|
|
290
302
|
});
|
|
291
303
|
}
|
|
292
304
|
_shouldPublish() {
|
|
293
|
-
return this._messages.length > 0 && !this._settingUp && !!this._channel;
|
|
305
|
+
return (this._messages.length > 0 && !this._settingUp && !!this._channel && this._channelHasRoom);
|
|
294
306
|
}
|
|
295
307
|
// Start publishing queued messages, if there isn't already a worker doing this.
|
|
296
308
|
_startWorker() {
|
|
@@ -304,6 +316,44 @@ class ChannelWrapper extends events_1.EventEmitter {
|
|
|
304
316
|
_canWaitReconnection() {
|
|
305
317
|
return !this._irrecoverableCode || !IRRECOVERABLE_ERRORS.includes(this._irrecoverableCode);
|
|
306
318
|
}
|
|
319
|
+
_messageResolved(message, result) {
|
|
320
|
+
removeUnconfirmedMessage(this._unconfirmedMessages, message);
|
|
321
|
+
message.resolve(result);
|
|
322
|
+
}
|
|
323
|
+
_messageRejected(message, err) {
|
|
324
|
+
if (!this._channel && this._canWaitReconnection()) {
|
|
325
|
+
// Tried to write to a closed channel. Leave the message in the queue and we'll try again when
|
|
326
|
+
// we reconnect.
|
|
327
|
+
removeUnconfirmedMessage(this._unconfirmedMessages, message);
|
|
328
|
+
this._messages.push(message);
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
// Something went wrong trying to send this message - could be JSON.stringify failed, could be
|
|
332
|
+
// the broker rejected the message. Either way, reject it back
|
|
333
|
+
removeUnconfirmedMessage(this._unconfirmedMessages, message);
|
|
334
|
+
message.reject(err);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
_getEncodedMessage(content) {
|
|
338
|
+
let encodedMessage;
|
|
339
|
+
if (this._json) {
|
|
340
|
+
encodedMessage = Buffer.from(JSON.stringify(content));
|
|
341
|
+
}
|
|
342
|
+
else if (typeof content === 'string') {
|
|
343
|
+
encodedMessage = Buffer.from(content);
|
|
344
|
+
}
|
|
345
|
+
else if (content instanceof Buffer) {
|
|
346
|
+
encodedMessage = content;
|
|
347
|
+
}
|
|
348
|
+
else if (typeof content === 'object' && typeof content.toString === 'function') {
|
|
349
|
+
encodedMessage = Buffer.from(content.toString());
|
|
350
|
+
}
|
|
351
|
+
else {
|
|
352
|
+
console.warn('amqp-connection-manager: Sending JSON message, but json option not speicifed');
|
|
353
|
+
encodedMessage = Buffer.from(JSON.stringify(content));
|
|
354
|
+
}
|
|
355
|
+
return encodedMessage;
|
|
356
|
+
}
|
|
307
357
|
_publishQueuedMessages(workerNumber) {
|
|
308
358
|
const channel = this._channel;
|
|
309
359
|
if (!channel ||
|
|
@@ -314,89 +364,124 @@ class ChannelWrapper extends events_1.EventEmitter {
|
|
|
314
364
|
this._working = false;
|
|
315
365
|
return;
|
|
316
366
|
}
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
if (
|
|
324
|
-
|
|
325
|
-
}
|
|
326
|
-
else if (typeof message.content === 'string') {
|
|
327
|
-
encodedMessage = Buffer.from(message.content);
|
|
328
|
-
}
|
|
329
|
-
else if (message.content instanceof Buffer) {
|
|
330
|
-
encodedMessage = message.content;
|
|
331
|
-
}
|
|
332
|
-
else if (typeof message.content === 'object' &&
|
|
333
|
-
typeof message.content.toString === 'function') {
|
|
334
|
-
encodedMessage = Buffer.from(message.content.toString());
|
|
335
|
-
}
|
|
336
|
-
else {
|
|
337
|
-
throw new Error('Invalid message content');
|
|
367
|
+
try {
|
|
368
|
+
// Send messages in batches of 1000 - don't want to starve the event loop.
|
|
369
|
+
let sendsLeft = MAX_MESSAGES_PER_BATCH;
|
|
370
|
+
while (this._channelHasRoom && this._messages.length > 0 && sendsLeft > 0) {
|
|
371
|
+
sendsLeft--;
|
|
372
|
+
const message = this._messages.shift();
|
|
373
|
+
if (!message) {
|
|
374
|
+
break;
|
|
338
375
|
}
|
|
339
|
-
|
|
340
|
-
const
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
case 'sendToQueue':
|
|
354
|
-
return new Promise(function (resolve, reject) {
|
|
355
|
-
result = channel.sendToQueue(message.queue, encodedMessage, message.options, (err) => {
|
|
356
|
-
if (err) {
|
|
357
|
-
reject(err);
|
|
358
|
-
}
|
|
359
|
-
else {
|
|
360
|
-
resolve(result);
|
|
361
|
-
}
|
|
362
|
-
});
|
|
363
|
-
});
|
|
364
|
-
/* istanbul ignore next */
|
|
365
|
-
default:
|
|
366
|
-
throw new Error(`Unhandled message type ${message.type}`);
|
|
376
|
+
this._unconfirmedMessages.push(message);
|
|
377
|
+
const encodedMessage = this._getEncodedMessage(message.content);
|
|
378
|
+
switch (message.type) {
|
|
379
|
+
case 'publish': {
|
|
380
|
+
let thisCanSend = true;
|
|
381
|
+
thisCanSend = this._channelHasRoom = channel.publish(message.exchange, message.routingKey, encodedMessage, message.options, (err) => {
|
|
382
|
+
if (err) {
|
|
383
|
+
this._messageRejected(message, err);
|
|
384
|
+
}
|
|
385
|
+
else {
|
|
386
|
+
this._messageResolved(message, thisCanSend);
|
|
387
|
+
}
|
|
388
|
+
});
|
|
389
|
+
break;
|
|
367
390
|
}
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
// we reconnect.
|
|
384
|
-
removeUnconfirmedMessage(this._unconfirmedMessages, message);
|
|
385
|
-
this._messages.push(message);
|
|
386
|
-
}
|
|
387
|
-
else {
|
|
388
|
-
// Something went wrong trying to send this message - could be JSON.stringify failed, could be
|
|
389
|
-
// the broker rejected the message. Either way, reject it back
|
|
390
|
-
removeUnconfirmedMessage(this._unconfirmedMessages, message);
|
|
391
|
-
message.reject(err);
|
|
391
|
+
case 'sendToQueue': {
|
|
392
|
+
let thisCanSend = true;
|
|
393
|
+
thisCanSend = this._channelHasRoom = channel.sendToQueue(message.queue, encodedMessage, message.options, (err) => {
|
|
394
|
+
if (err) {
|
|
395
|
+
this._messageRejected(message, err);
|
|
396
|
+
}
|
|
397
|
+
else {
|
|
398
|
+
this._messageResolved(message, thisCanSend);
|
|
399
|
+
}
|
|
400
|
+
});
|
|
401
|
+
break;
|
|
402
|
+
}
|
|
403
|
+
/* istanbul ignore next */
|
|
404
|
+
default:
|
|
405
|
+
throw new Error(`Unhandled message type ${message.type}`);
|
|
392
406
|
}
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
this.
|
|
397
|
-
|
|
398
|
-
|
|
407
|
+
}
|
|
408
|
+
// If we didn't send all the messages, send some more...
|
|
409
|
+
if (this._channelHasRoom && this._messages.length > 0) {
|
|
410
|
+
setImmediate(() => this._publishQueuedMessages(workerNumber));
|
|
411
|
+
}
|
|
412
|
+
this._working = false;
|
|
413
|
+
/* istanbul ignore next */
|
|
414
|
+
}
|
|
415
|
+
catch (err) {
|
|
416
|
+
this._working = false;
|
|
417
|
+
this.emit('error', err);
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* Setup a consumer
|
|
422
|
+
* This consumer will be reconnected on cancellation and channel errors.
|
|
423
|
+
*/
|
|
424
|
+
async consume(queue, onMessage, options = {}) {
|
|
425
|
+
const consumer = {
|
|
426
|
+
consumerTag: null,
|
|
427
|
+
queue,
|
|
428
|
+
onMessage,
|
|
429
|
+
options,
|
|
430
|
+
};
|
|
431
|
+
this._consumers.push(consumer);
|
|
432
|
+
await this._consume(consumer);
|
|
433
|
+
}
|
|
434
|
+
async _consume(consumer) {
|
|
435
|
+
if (!this._channel) {
|
|
436
|
+
return;
|
|
399
437
|
}
|
|
438
|
+
const { prefetch, ...options } = consumer.options;
|
|
439
|
+
if (typeof prefetch === 'number') {
|
|
440
|
+
this._channel.prefetch(prefetch, false);
|
|
441
|
+
}
|
|
442
|
+
const { consumerTag } = await this._channel.consume(consumer.queue, (msg) => {
|
|
443
|
+
if (!msg) {
|
|
444
|
+
consumer.consumerTag = null;
|
|
445
|
+
this._reconnectConsumer(consumer).catch((err) => {
|
|
446
|
+
if (err.isOperational && err.message.includes('BasicConsume; 404')) {
|
|
447
|
+
// Ignore errors caused by queue not declared. In
|
|
448
|
+
// those cases the connection will reconnect and
|
|
449
|
+
// then consumers reestablished. The full reconnect
|
|
450
|
+
// might be avoided if we assert the queue again
|
|
451
|
+
// before starting to consume.
|
|
452
|
+
return;
|
|
453
|
+
}
|
|
454
|
+
throw err;
|
|
455
|
+
});
|
|
456
|
+
return;
|
|
457
|
+
}
|
|
458
|
+
consumer.onMessage(msg);
|
|
459
|
+
}, options);
|
|
460
|
+
consumer.consumerTag = consumerTag;
|
|
461
|
+
}
|
|
462
|
+
async _reconnectConsumer(consumer) {
|
|
463
|
+
if (!this._consumers.includes(consumer)) {
|
|
464
|
+
// Intentionally canceled
|
|
465
|
+
return;
|
|
466
|
+
}
|
|
467
|
+
await this._consume(consumer);
|
|
468
|
+
}
|
|
469
|
+
/**
|
|
470
|
+
* Cancel all consumers
|
|
471
|
+
*/
|
|
472
|
+
async cancelAll() {
|
|
473
|
+
const consumers = this._consumers;
|
|
474
|
+
this._consumers = [];
|
|
475
|
+
if (!this._channel) {
|
|
476
|
+
return;
|
|
477
|
+
}
|
|
478
|
+
const channel = this._channel;
|
|
479
|
+
await Promise.all(consumers.reduce((acc, consumer) => {
|
|
480
|
+
if (consumer.consumerTag) {
|
|
481
|
+
acc.push(channel.cancel(consumer.consumerTag));
|
|
482
|
+
}
|
|
483
|
+
return acc;
|
|
484
|
+
}, []));
|
|
400
485
|
}
|
|
401
486
|
/** Send an `ack` to the underlying channel. */
|
|
402
487
|
ack(message, allUpTo) {
|
|
@@ -151,6 +151,8 @@ export default class AmqpConnectionManager extends EventEmitter implements IAmqp
|
|
|
151
151
|
createChannel(options?: CreateChannelOpts): ChannelWrapper;
|
|
152
152
|
close(): Promise<void>;
|
|
153
153
|
isConnected(): boolean;
|
|
154
|
+
/** Force reconnect - noop unless connected */
|
|
155
|
+
reconnect(): void;
|
|
154
156
|
/** The current connection. */
|
|
155
157
|
get connection(): Connection | undefined;
|
|
156
158
|
/** Returns the number of registered channels. */
|
|
@@ -110,6 +110,29 @@ export default class AmqpConnectionManager extends EventEmitter {
|
|
|
110
110
|
isConnected() {
|
|
111
111
|
return !!this._currentConnection;
|
|
112
112
|
}
|
|
113
|
+
/** Force reconnect - noop unless connected */
|
|
114
|
+
reconnect() {
|
|
115
|
+
if (this._closed) {
|
|
116
|
+
throw new Error('cannot reconnect after close');
|
|
117
|
+
}
|
|
118
|
+
// If we have a connection, close it and immediately connect again.
|
|
119
|
+
// Wait for ordinary reconnect otherwise.
|
|
120
|
+
if (this._currentConnection) {
|
|
121
|
+
this._currentConnection.removeAllListeners();
|
|
122
|
+
this._currentConnection
|
|
123
|
+
.close()
|
|
124
|
+
.catch(() => {
|
|
125
|
+
// noop
|
|
126
|
+
})
|
|
127
|
+
.then(() => {
|
|
128
|
+
this._currentConnection = undefined;
|
|
129
|
+
this._disconnectSent = true;
|
|
130
|
+
this.emit('disconnect', { err: new Error('forced reconnect') });
|
|
131
|
+
return this._connect();
|
|
132
|
+
})
|
|
133
|
+
.catch(neverThrows);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
113
136
|
/** The current connection. */
|
|
114
137
|
get connection() {
|
|
115
138
|
return this._currentConnection;
|
|
@@ -149,12 +172,15 @@ export default class AmqpConnectionManager extends EventEmitter {
|
|
|
149
172
|
// Round robin between brokers
|
|
150
173
|
const url = this._urls[this._currentUrl];
|
|
151
174
|
this._currentUrl++;
|
|
152
|
-
|
|
175
|
+
// Set connectionOptions to the setting in the class instance (which came via the constructor)
|
|
176
|
+
let connectionOptions = this.connectionOptions;
|
|
153
177
|
let originalUrl;
|
|
154
178
|
let connect;
|
|
155
179
|
if (typeof url === 'object' && 'url' in url) {
|
|
156
180
|
originalUrl = connect = url.url;
|
|
157
|
-
|
|
181
|
+
// If URL is an object, pull out any specific URL connectionOptions for it or use the
|
|
182
|
+
// instance connectionOptions if none were provided for this specific URL.
|
|
183
|
+
connectionOptions = url.connectionOptions || this.connectionOptions;
|
|
158
184
|
}
|
|
159
185
|
else if (typeof url === 'string') {
|
|
160
186
|
originalUrl = connect = url;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AmqpConnectionManager.js","sourceRoot":"","sources":["../../src/AmqpConnectionManager.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"AmqpConnectionManager.js","sourceRoot":"","sources":["../../src/AmqpConnectionManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,15 @@ export interface CreateChannelOpts {
|
|
|
19
19
|
*/
|
|
20
20
|
json?: boolean;
|
|
21
21
|
}
|
|
22
|
+
interface ConsumerOptions extends amqplib.Options.Consume {
|
|
23
|
+
prefetch?: number;
|
|
24
|
+
}
|
|
25
|
+
interface Consumer {
|
|
26
|
+
consumerTag: string | null;
|
|
27
|
+
queue: string;
|
|
28
|
+
onMessage: (msg: amqplib.ConsumeMessage) => void;
|
|
29
|
+
options: ConsumerOptions;
|
|
30
|
+
}
|
|
22
31
|
/**
|
|
23
32
|
* Calls to `publish()` or `sendToQueue()` work just like in amqplib, but messages are queued internally and
|
|
24
33
|
* are guaranteed to be delivered. If the underlying connection drops, ChannelWrapper will wait for a new
|
|
@@ -45,6 +54,8 @@ export default class ChannelWrapper extends EventEmitter {
|
|
|
45
54
|
private _unconfirmedMessages;
|
|
46
55
|
/** Reason code during publish or sendtoqueue messages. */
|
|
47
56
|
private _irrecoverableCode;
|
|
57
|
+
/** Consumers which will be reconnected on channel errors etc. */
|
|
58
|
+
private _consumers;
|
|
48
59
|
/**
|
|
49
60
|
* The currently connected channel. Note that not all setup functions
|
|
50
61
|
* have been run on this channel until `@_settingUp` is either null or
|
|
@@ -62,6 +73,10 @@ export default class ChannelWrapper extends EventEmitter {
|
|
|
62
73
|
* workers ever do wake up, they'll know to stop working.
|
|
63
74
|
*/
|
|
64
75
|
private _workerNumber;
|
|
76
|
+
/**
|
|
77
|
+
* True if the underlying channel has room for more messages.
|
|
78
|
+
*/
|
|
79
|
+
private _channelHasRoom;
|
|
65
80
|
name?: string;
|
|
66
81
|
addListener(event: string, listener: (...args: any[]) => void): this;
|
|
67
82
|
addListener(event: 'connect', listener: () => void): this;
|
|
@@ -153,17 +168,29 @@ export default class ChannelWrapper extends EventEmitter {
|
|
|
153
168
|
constructor(connectionManager: IAmqpConnectionManager, options?: CreateChannelOpts);
|
|
154
169
|
private _onConnect;
|
|
155
170
|
private _onChannelClose;
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
};
|
|
160
|
-
}): void;
|
|
171
|
+
/** Called whenever the channel drains. */
|
|
172
|
+
private _onChannelDrain;
|
|
173
|
+
private _onDisconnect;
|
|
161
174
|
queueLength(): number;
|
|
162
175
|
close(): Promise<void>;
|
|
163
|
-
_shouldPublish
|
|
164
|
-
_startWorker
|
|
165
|
-
_canWaitReconnection
|
|
166
|
-
|
|
176
|
+
private _shouldPublish;
|
|
177
|
+
private _startWorker;
|
|
178
|
+
private _canWaitReconnection;
|
|
179
|
+
private _messageResolved;
|
|
180
|
+
private _messageRejected;
|
|
181
|
+
private _getEncodedMessage;
|
|
182
|
+
private _publishQueuedMessages;
|
|
183
|
+
/**
|
|
184
|
+
* Setup a consumer
|
|
185
|
+
* This consumer will be reconnected on cancellation and channel errors.
|
|
186
|
+
*/
|
|
187
|
+
consume(queue: string, onMessage: Consumer['onMessage'], options?: ConsumerOptions): Promise<void>;
|
|
188
|
+
private _consume;
|
|
189
|
+
private _reconnectConsumer;
|
|
190
|
+
/**
|
|
191
|
+
* Cancel all consumers
|
|
192
|
+
*/
|
|
193
|
+
cancelAll(): Promise<void>;
|
|
167
194
|
/** Send an `ack` to the underlying channel. */
|
|
168
195
|
ack(message: amqplib.Message, allUpTo?: boolean): void;
|
|
169
196
|
/** Send an `ackAll` to the underlying channel. */
|
|
@@ -187,3 +214,4 @@ export default class ChannelWrapper extends EventEmitter {
|
|
|
187
214
|
/** Send a `get` to the underlying channel. */
|
|
188
215
|
get(queue: string, options?: Options.Get): Promise<amqplib.GetMessage | false>;
|
|
189
216
|
}
|
|
217
|
+
export {};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { EventEmitter } from 'events';
|
|
2
2
|
import pb from 'promise-breaker';
|
|
3
|
+
const MAX_MESSAGES_PER_BATCH = 1000;
|
|
3
4
|
const IRRECOVERABLE_ERRORS = [
|
|
4
5
|
403,
|
|
5
6
|
404,
|
|
@@ -51,6 +52,8 @@ export default class ChannelWrapper extends EventEmitter {
|
|
|
51
52
|
this._messages = [];
|
|
52
53
|
/** Oublished, but not yet confirmed messages. */
|
|
53
54
|
this._unconfirmedMessages = [];
|
|
55
|
+
/** Consumers which will be reconnected on channel errors etc. */
|
|
56
|
+
this._consumers = [];
|
|
54
57
|
/**
|
|
55
58
|
* True if the "worker" is busy sending messages. False if we need to
|
|
56
59
|
* start the worker to get stuff done.
|
|
@@ -62,6 +65,10 @@ export default class ChannelWrapper extends EventEmitter {
|
|
|
62
65
|
* workers ever do wake up, they'll know to stop working.
|
|
63
66
|
*/
|
|
64
67
|
this._workerNumber = 0;
|
|
68
|
+
/**
|
|
69
|
+
* True if the underlying channel has room for more messages.
|
|
70
|
+
*/
|
|
71
|
+
this._channelHasRoom = true;
|
|
65
72
|
this._onConnect = this._onConnect.bind(this);
|
|
66
73
|
this._onDisconnect = this._onDisconnect.bind(this);
|
|
67
74
|
this._connectionManager = connectionManager;
|
|
@@ -69,6 +76,7 @@ export default class ChannelWrapper extends EventEmitter {
|
|
|
69
76
|
this._json = (_a = options.json) !== null && _a !== void 0 ? _a : false;
|
|
70
77
|
// Array of setup functions to call.
|
|
71
78
|
this._setups = [];
|
|
79
|
+
this._consumers = [];
|
|
72
80
|
if (options.setup) {
|
|
73
81
|
this._setups.push(options.setup);
|
|
74
82
|
}
|
|
@@ -207,7 +215,9 @@ export default class ChannelWrapper extends EventEmitter {
|
|
|
207
215
|
try {
|
|
208
216
|
const channel = await connection.createConfirmChannel();
|
|
209
217
|
this._channel = channel;
|
|
218
|
+
this._channelHasRoom = true;
|
|
210
219
|
channel.on('close', () => this._onChannelClose(channel));
|
|
220
|
+
channel.on('drain', () => this._onChannelDrain());
|
|
211
221
|
this._settingUp = Promise.all(this._setups.map((setupFn) =>
|
|
212
222
|
// TODO: Use a timeout here to guard against setupFns that never resolve?
|
|
213
223
|
pb.call(setupFn, this, channel).catch((err) => {
|
|
@@ -216,7 +226,11 @@ export default class ChannelWrapper extends EventEmitter {
|
|
|
216
226
|
return;
|
|
217
227
|
}
|
|
218
228
|
this.emit('error', err, { name: this.name });
|
|
219
|
-
})))
|
|
229
|
+
})))
|
|
230
|
+
.then(() => {
|
|
231
|
+
return Promise.all(this._consumers.map((c) => this._reconnectConsumer(c)));
|
|
232
|
+
})
|
|
233
|
+
.then(() => {
|
|
220
234
|
this._settingUp = undefined;
|
|
221
235
|
});
|
|
222
236
|
await this._settingUp;
|
|
@@ -224,13 +238,6 @@ export default class ChannelWrapper extends EventEmitter {
|
|
|
224
238
|
// Can happen if channel closes while we're setting up.
|
|
225
239
|
return;
|
|
226
240
|
}
|
|
227
|
-
if (this._unconfirmedMessages.length > 0) {
|
|
228
|
-
// requeue any messages that were left unconfirmed when connection was lost
|
|
229
|
-
let message;
|
|
230
|
-
while ((message = this._unconfirmedMessages.shift())) {
|
|
231
|
-
this._messages.push(message);
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
241
|
// Since we just connected, publish any queued messages
|
|
235
242
|
this._startWorker();
|
|
236
243
|
this.emit('connect');
|
|
@@ -248,6 +255,11 @@ export default class ChannelWrapper extends EventEmitter {
|
|
|
248
255
|
}
|
|
249
256
|
// Wait for another reconnect to create a new channel.
|
|
250
257
|
}
|
|
258
|
+
/** Called whenever the channel drains. */
|
|
259
|
+
_onChannelDrain() {
|
|
260
|
+
this._channelHasRoom = true;
|
|
261
|
+
this._startWorker();
|
|
262
|
+
}
|
|
251
263
|
// Called whenever we disconnect from the AMQP server.
|
|
252
264
|
_onDisconnect(ex) {
|
|
253
265
|
this._irrecoverableCode = ex.err instanceof Error ? ex.err.code : undefined;
|
|
@@ -285,7 +297,7 @@ export default class ChannelWrapper extends EventEmitter {
|
|
|
285
297
|
});
|
|
286
298
|
}
|
|
287
299
|
_shouldPublish() {
|
|
288
|
-
return this._messages.length > 0 && !this._settingUp && !!this._channel;
|
|
300
|
+
return (this._messages.length > 0 && !this._settingUp && !!this._channel && this._channelHasRoom);
|
|
289
301
|
}
|
|
290
302
|
// Start publishing queued messages, if there isn't already a worker doing this.
|
|
291
303
|
_startWorker() {
|
|
@@ -299,6 +311,44 @@ export default class ChannelWrapper extends EventEmitter {
|
|
|
299
311
|
_canWaitReconnection() {
|
|
300
312
|
return !this._irrecoverableCode || !IRRECOVERABLE_ERRORS.includes(this._irrecoverableCode);
|
|
301
313
|
}
|
|
314
|
+
_messageResolved(message, result) {
|
|
315
|
+
removeUnconfirmedMessage(this._unconfirmedMessages, message);
|
|
316
|
+
message.resolve(result);
|
|
317
|
+
}
|
|
318
|
+
_messageRejected(message, err) {
|
|
319
|
+
if (!this._channel && this._canWaitReconnection()) {
|
|
320
|
+
// Tried to write to a closed channel. Leave the message in the queue and we'll try again when
|
|
321
|
+
// we reconnect.
|
|
322
|
+
removeUnconfirmedMessage(this._unconfirmedMessages, message);
|
|
323
|
+
this._messages.push(message);
|
|
324
|
+
}
|
|
325
|
+
else {
|
|
326
|
+
// Something went wrong trying to send this message - could be JSON.stringify failed, could be
|
|
327
|
+
// the broker rejected the message. Either way, reject it back
|
|
328
|
+
removeUnconfirmedMessage(this._unconfirmedMessages, message);
|
|
329
|
+
message.reject(err);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
_getEncodedMessage(content) {
|
|
333
|
+
let encodedMessage;
|
|
334
|
+
if (this._json) {
|
|
335
|
+
encodedMessage = Buffer.from(JSON.stringify(content));
|
|
336
|
+
}
|
|
337
|
+
else if (typeof content === 'string') {
|
|
338
|
+
encodedMessage = Buffer.from(content);
|
|
339
|
+
}
|
|
340
|
+
else if (content instanceof Buffer) {
|
|
341
|
+
encodedMessage = content;
|
|
342
|
+
}
|
|
343
|
+
else if (typeof content === 'object' && typeof content.toString === 'function') {
|
|
344
|
+
encodedMessage = Buffer.from(content.toString());
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
console.warn('amqp-connection-manager: Sending JSON message, but json option not speicifed');
|
|
348
|
+
encodedMessage = Buffer.from(JSON.stringify(content));
|
|
349
|
+
}
|
|
350
|
+
return encodedMessage;
|
|
351
|
+
}
|
|
302
352
|
_publishQueuedMessages(workerNumber) {
|
|
303
353
|
const channel = this._channel;
|
|
304
354
|
if (!channel ||
|
|
@@ -309,89 +359,124 @@ export default class ChannelWrapper extends EventEmitter {
|
|
|
309
359
|
this._working = false;
|
|
310
360
|
return;
|
|
311
361
|
}
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
if (
|
|
319
|
-
|
|
320
|
-
}
|
|
321
|
-
else if (typeof message.content === 'string') {
|
|
322
|
-
encodedMessage = Buffer.from(message.content);
|
|
323
|
-
}
|
|
324
|
-
else if (message.content instanceof Buffer) {
|
|
325
|
-
encodedMessage = message.content;
|
|
326
|
-
}
|
|
327
|
-
else if (typeof message.content === 'object' &&
|
|
328
|
-
typeof message.content.toString === 'function') {
|
|
329
|
-
encodedMessage = Buffer.from(message.content.toString());
|
|
330
|
-
}
|
|
331
|
-
else {
|
|
332
|
-
throw new Error('Invalid message content');
|
|
362
|
+
try {
|
|
363
|
+
// Send messages in batches of 1000 - don't want to starve the event loop.
|
|
364
|
+
let sendsLeft = MAX_MESSAGES_PER_BATCH;
|
|
365
|
+
while (this._channelHasRoom && this._messages.length > 0 && sendsLeft > 0) {
|
|
366
|
+
sendsLeft--;
|
|
367
|
+
const message = this._messages.shift();
|
|
368
|
+
if (!message) {
|
|
369
|
+
break;
|
|
333
370
|
}
|
|
334
|
-
|
|
335
|
-
const
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
case 'sendToQueue':
|
|
349
|
-
return new Promise(function (resolve, reject) {
|
|
350
|
-
result = channel.sendToQueue(message.queue, encodedMessage, message.options, (err) => {
|
|
351
|
-
if (err) {
|
|
352
|
-
reject(err);
|
|
353
|
-
}
|
|
354
|
-
else {
|
|
355
|
-
resolve(result);
|
|
356
|
-
}
|
|
357
|
-
});
|
|
358
|
-
});
|
|
359
|
-
/* istanbul ignore next */
|
|
360
|
-
default:
|
|
361
|
-
throw new Error(`Unhandled message type ${message.type}`);
|
|
371
|
+
this._unconfirmedMessages.push(message);
|
|
372
|
+
const encodedMessage = this._getEncodedMessage(message.content);
|
|
373
|
+
switch (message.type) {
|
|
374
|
+
case 'publish': {
|
|
375
|
+
let thisCanSend = true;
|
|
376
|
+
thisCanSend = this._channelHasRoom = channel.publish(message.exchange, message.routingKey, encodedMessage, message.options, (err) => {
|
|
377
|
+
if (err) {
|
|
378
|
+
this._messageRejected(message, err);
|
|
379
|
+
}
|
|
380
|
+
else {
|
|
381
|
+
this._messageResolved(message, thisCanSend);
|
|
382
|
+
}
|
|
383
|
+
});
|
|
384
|
+
break;
|
|
362
385
|
}
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
// we reconnect.
|
|
379
|
-
removeUnconfirmedMessage(this._unconfirmedMessages, message);
|
|
380
|
-
this._messages.push(message);
|
|
381
|
-
}
|
|
382
|
-
else {
|
|
383
|
-
// Something went wrong trying to send this message - could be JSON.stringify failed, could be
|
|
384
|
-
// the broker rejected the message. Either way, reject it back
|
|
385
|
-
removeUnconfirmedMessage(this._unconfirmedMessages, message);
|
|
386
|
-
message.reject(err);
|
|
386
|
+
case 'sendToQueue': {
|
|
387
|
+
let thisCanSend = true;
|
|
388
|
+
thisCanSend = this._channelHasRoom = channel.sendToQueue(message.queue, encodedMessage, message.options, (err) => {
|
|
389
|
+
if (err) {
|
|
390
|
+
this._messageRejected(message, err);
|
|
391
|
+
}
|
|
392
|
+
else {
|
|
393
|
+
this._messageResolved(message, thisCanSend);
|
|
394
|
+
}
|
|
395
|
+
});
|
|
396
|
+
break;
|
|
397
|
+
}
|
|
398
|
+
/* istanbul ignore next */
|
|
399
|
+
default:
|
|
400
|
+
throw new Error(`Unhandled message type ${message.type}`);
|
|
387
401
|
}
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
this.
|
|
392
|
-
|
|
393
|
-
|
|
402
|
+
}
|
|
403
|
+
// If we didn't send all the messages, send some more...
|
|
404
|
+
if (this._channelHasRoom && this._messages.length > 0) {
|
|
405
|
+
setImmediate(() => this._publishQueuedMessages(workerNumber));
|
|
406
|
+
}
|
|
407
|
+
this._working = false;
|
|
408
|
+
/* istanbul ignore next */
|
|
409
|
+
}
|
|
410
|
+
catch (err) {
|
|
411
|
+
this._working = false;
|
|
412
|
+
this.emit('error', err);
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* Setup a consumer
|
|
417
|
+
* This consumer will be reconnected on cancellation and channel errors.
|
|
418
|
+
*/
|
|
419
|
+
async consume(queue, onMessage, options = {}) {
|
|
420
|
+
const consumer = {
|
|
421
|
+
consumerTag: null,
|
|
422
|
+
queue,
|
|
423
|
+
onMessage,
|
|
424
|
+
options,
|
|
425
|
+
};
|
|
426
|
+
this._consumers.push(consumer);
|
|
427
|
+
await this._consume(consumer);
|
|
428
|
+
}
|
|
429
|
+
async _consume(consumer) {
|
|
430
|
+
if (!this._channel) {
|
|
431
|
+
return;
|
|
394
432
|
}
|
|
433
|
+
const { prefetch, ...options } = consumer.options;
|
|
434
|
+
if (typeof prefetch === 'number') {
|
|
435
|
+
this._channel.prefetch(prefetch, false);
|
|
436
|
+
}
|
|
437
|
+
const { consumerTag } = await this._channel.consume(consumer.queue, (msg) => {
|
|
438
|
+
if (!msg) {
|
|
439
|
+
consumer.consumerTag = null;
|
|
440
|
+
this._reconnectConsumer(consumer).catch((err) => {
|
|
441
|
+
if (err.isOperational && err.message.includes('BasicConsume; 404')) {
|
|
442
|
+
// Ignore errors caused by queue not declared. In
|
|
443
|
+
// those cases the connection will reconnect and
|
|
444
|
+
// then consumers reestablished. The full reconnect
|
|
445
|
+
// might be avoided if we assert the queue again
|
|
446
|
+
// before starting to consume.
|
|
447
|
+
return;
|
|
448
|
+
}
|
|
449
|
+
throw err;
|
|
450
|
+
});
|
|
451
|
+
return;
|
|
452
|
+
}
|
|
453
|
+
consumer.onMessage(msg);
|
|
454
|
+
}, options);
|
|
455
|
+
consumer.consumerTag = consumerTag;
|
|
456
|
+
}
|
|
457
|
+
async _reconnectConsumer(consumer) {
|
|
458
|
+
if (!this._consumers.includes(consumer)) {
|
|
459
|
+
// Intentionally canceled
|
|
460
|
+
return;
|
|
461
|
+
}
|
|
462
|
+
await this._consume(consumer);
|
|
463
|
+
}
|
|
464
|
+
/**
|
|
465
|
+
* Cancel all consumers
|
|
466
|
+
*/
|
|
467
|
+
async cancelAll() {
|
|
468
|
+
const consumers = this._consumers;
|
|
469
|
+
this._consumers = [];
|
|
470
|
+
if (!this._channel) {
|
|
471
|
+
return;
|
|
472
|
+
}
|
|
473
|
+
const channel = this._channel;
|
|
474
|
+
await Promise.all(consumers.reduce((acc, consumer) => {
|
|
475
|
+
if (consumer.consumerTag) {
|
|
476
|
+
acc.push(channel.cancel(consumer.consumerTag));
|
|
477
|
+
}
|
|
478
|
+
return acc;
|
|
479
|
+
}, []));
|
|
395
480
|
}
|
|
396
481
|
/** Send an `ack` to the underlying channel. */
|
|
397
482
|
ack(message, allUpTo) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChannelWrapper.js","sourceRoot":"","sources":["../../src/ChannelWrapper.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ChannelWrapper.js","sourceRoot":"","sources":["../../src/ChannelWrapper.ts"],"names":[],"mappings":"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"}
|