@autofleet/rabbit 3.1.1 → 3.1.2
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/index.js +32 -9
- package/dist/lib/consts.d.ts +1 -0
- package/dist/lib/consts.js +2 -1
- package/package.json +1 -1
- package/src/index.ts +35 -9
- package/src/lib/consts.ts +1 -0
package/dist/index.js
CHANGED
|
@@ -139,7 +139,7 @@ class RabbitMq {
|
|
|
139
139
|
};
|
|
140
140
|
}
|
|
141
141
|
async getConnection() {
|
|
142
|
-
return new Promise(async (resolve) => {
|
|
142
|
+
return new Promise(async (resolve, reject) => {
|
|
143
143
|
if (this.blockReconnect) {
|
|
144
144
|
debug('rabbit: block reconnect');
|
|
145
145
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
@@ -158,12 +158,30 @@ class RabbitMq {
|
|
|
158
158
|
if (this.creatingConnection) {
|
|
159
159
|
debug('rabbit: creating connection emi');
|
|
160
160
|
this.em.once(consts_1.CONNECTION_CREATED_CONST, resolve);
|
|
161
|
+
this.em.once(consts_1.CONNECTION_FAILED_CONST, reject);
|
|
161
162
|
return;
|
|
162
163
|
}
|
|
163
164
|
this.creatingConnection = true;
|
|
165
|
+
let isResolved = false;
|
|
164
166
|
debug('rabbit: creating connection', { HOST, USERNAME, HEARTBEAT });
|
|
165
167
|
const connection = await amqp_connection_manager_1.connect([`amqp://${USERNAME}:${PASSWORD}@${HOST}?heartbeat=${HEARTBEAT}}`]);
|
|
166
168
|
this.connection = connection;
|
|
169
|
+
this.connection.on('error', (err) => {
|
|
170
|
+
logger_1.default.error('rabbit: connection error', { err });
|
|
171
|
+
if (!isResolved) {
|
|
172
|
+
isResolved = true;
|
|
173
|
+
reject(err);
|
|
174
|
+
this.em.emit(consts_1.CONNECTION_FAILED_CONST, err);
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
this.connection.on('connectFailed', (err) => {
|
|
178
|
+
logger_1.default.error('rabbit: connection connectFailed', { err });
|
|
179
|
+
if (!isResolved) {
|
|
180
|
+
isResolved = true;
|
|
181
|
+
reject(err);
|
|
182
|
+
this.em.emit(consts_1.CONNECTION_FAILED_CONST, err);
|
|
183
|
+
}
|
|
184
|
+
});
|
|
167
185
|
this.connection.on('disconnect', ({ err }) => {
|
|
168
186
|
debug('rabbit: connection closed');
|
|
169
187
|
this.exchanges = {};
|
|
@@ -183,6 +201,7 @@ class RabbitMq {
|
|
|
183
201
|
await this.loadConsumers();
|
|
184
202
|
this.creatingConnection = false;
|
|
185
203
|
this.em.emit(consts_1.CONNECTION_CREATED_CONST, connection);
|
|
204
|
+
isResolved = true;
|
|
186
205
|
resolve(connection);
|
|
187
206
|
});
|
|
188
207
|
});
|
|
@@ -191,8 +210,13 @@ class RabbitMq {
|
|
|
191
210
|
return new Promise(async (resolve, reject) => {
|
|
192
211
|
const connection = await this.getConnection();
|
|
193
212
|
const channel = connection.createChannel({});
|
|
213
|
+
let isResolved = false;
|
|
194
214
|
channel.on('error', (err) => {
|
|
195
215
|
logger_1.default.error(`rabbit: channel ${name} error`, { err });
|
|
216
|
+
if (!isResolved) {
|
|
217
|
+
isResolved = true;
|
|
218
|
+
reject(err);
|
|
219
|
+
}
|
|
196
220
|
});
|
|
197
221
|
channel.on('close', (...args) => {
|
|
198
222
|
logger_1.default.error(`rabbit: channel ${name} closed`, { args });
|
|
@@ -202,6 +226,7 @@ class RabbitMq {
|
|
|
202
226
|
});
|
|
203
227
|
channel.once('connect', () => {
|
|
204
228
|
debug(`rabbit: channel ${name} CONNECTED`);
|
|
229
|
+
isResolved = true;
|
|
205
230
|
resolve(channel);
|
|
206
231
|
});
|
|
207
232
|
});
|
|
@@ -241,14 +266,12 @@ class RabbitMq {
|
|
|
241
266
|
return channel.checkQueue(queue);
|
|
242
267
|
}
|
|
243
268
|
async deleteQueue(queue) {
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
resolve(deleteQueueRes);
|
|
251
|
-
});
|
|
269
|
+
RabbitMq.validateName('queue', queue);
|
|
270
|
+
const channel = await this.assertChannel();
|
|
271
|
+
logger_1.default.info('rabbit: deleting queue', { queue });
|
|
272
|
+
const deleteQueueRes = await channel.deleteQueue(queue);
|
|
273
|
+
debug('queue deleted', deleteQueueRes);
|
|
274
|
+
return deleteQueueRes;
|
|
252
275
|
}
|
|
253
276
|
async bindQueue(queue, exchange) {
|
|
254
277
|
const channel = await this.assertChannel();
|
package/dist/lib/consts.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ export declare const USER_TRACING_HEADER = "x-af-user-id";
|
|
|
6
6
|
export declare const USER_OBJECT = "userObject";
|
|
7
7
|
export declare const DEFAULT_USE_CONSUME_WITH_LOCK = false;
|
|
8
8
|
export declare const CONNECTION_CREATED_CONST = "connectionCreated";
|
|
9
|
+
export declare const CONNECTION_FAILED_CONST = "connectionFailed";
|
|
9
10
|
export declare const DEFAULT_OPTIONS: {
|
|
10
11
|
limit: number;
|
|
11
12
|
retries: number;
|
package/dist/lib/consts.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DEFAULT_OPTIONS = exports.CONNECTION_CREATED_CONST = exports.DEFAULT_USE_CONSUME_WITH_LOCK = exports.USER_OBJECT = exports.USER_TRACING_HEADER = exports.TRACING_HEADER = exports.RETRY_HEADER = exports.DEFAULT_LOCK_TIMEOUT = exports.DEFAULT_DEAD_TTL_TWO_DAYS = void 0;
|
|
3
|
+
exports.DEFAULT_OPTIONS = exports.CONNECTION_FAILED_CONST = exports.CONNECTION_CREATED_CONST = exports.DEFAULT_USE_CONSUME_WITH_LOCK = exports.USER_OBJECT = exports.USER_TRACING_HEADER = exports.TRACING_HEADER = exports.RETRY_HEADER = exports.DEFAULT_LOCK_TIMEOUT = exports.DEFAULT_DEAD_TTL_TWO_DAYS = void 0;
|
|
4
4
|
exports.DEFAULT_DEAD_TTL_TWO_DAYS = 60000 * 60 * 12;
|
|
5
5
|
exports.DEFAULT_LOCK_TIMEOUT = 1000 * 5;
|
|
6
6
|
exports.RETRY_HEADER = 'x-retry-count';
|
|
@@ -9,6 +9,7 @@ exports.USER_TRACING_HEADER = 'x-af-user-id';
|
|
|
9
9
|
exports.USER_OBJECT = 'userObject';
|
|
10
10
|
exports.DEFAULT_USE_CONSUME_WITH_LOCK = false;
|
|
11
11
|
exports.CONNECTION_CREATED_CONST = 'connectionCreated';
|
|
12
|
+
exports.CONNECTION_FAILED_CONST = 'connectionFailed';
|
|
12
13
|
exports.DEFAULT_OPTIONS = {
|
|
13
14
|
limit: 1,
|
|
14
15
|
retries: 1,
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -17,6 +17,7 @@ import getRedisInstance, { RedisConfig } from './lib/redis';
|
|
|
17
17
|
import { assertExchangeFanout, rand, wrapSetImmediate } from './lib/utils';
|
|
18
18
|
import {
|
|
19
19
|
CONNECTION_CREATED_CONST,
|
|
20
|
+
CONNECTION_FAILED_CONST,
|
|
20
21
|
DEFAULT_LOCK_TIMEOUT,
|
|
21
22
|
DEFAULT_OPTIONS,
|
|
22
23
|
RETRY_HEADER,
|
|
@@ -259,7 +260,7 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
259
260
|
}
|
|
260
261
|
|
|
261
262
|
async getConnection() {
|
|
262
|
-
return new Promise<AmqpConnectionManager>(async (resolve) => {
|
|
263
|
+
return new Promise<AmqpConnectionManager>(async (resolve, reject) => {
|
|
263
264
|
if (this.blockReconnect) {
|
|
264
265
|
debug('rabbit: block reconnect');
|
|
265
266
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
@@ -278,12 +279,32 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
278
279
|
if (this.creatingConnection) {
|
|
279
280
|
debug('rabbit: creating connection emi');
|
|
280
281
|
this.em.once(CONNECTION_CREATED_CONST, resolve);
|
|
282
|
+
this.em.once(CONNECTION_FAILED_CONST, reject);
|
|
281
283
|
return;
|
|
282
284
|
}
|
|
283
285
|
this.creatingConnection = true;
|
|
286
|
+
let isResolved = false;
|
|
284
287
|
debug('rabbit: creating connection', { HOST, USERNAME, HEARTBEAT });
|
|
285
288
|
const connection: AmqpConnectionManager = await connect([`amqp://${USERNAME}:${PASSWORD}@${HOST}?heartbeat=${HEARTBEAT}}`]);
|
|
286
289
|
this.connection = connection;
|
|
290
|
+
this.connection.on('error', (err) => {
|
|
291
|
+
logger.error('rabbit: connection error', { err });
|
|
292
|
+
if (!isResolved) {
|
|
293
|
+
isResolved = true;
|
|
294
|
+
reject(err);
|
|
295
|
+
this.em.emit(CONNECTION_FAILED_CONST, err);
|
|
296
|
+
}
|
|
297
|
+
});
|
|
298
|
+
|
|
299
|
+
this.connection.on('connectFailed', (err) => {
|
|
300
|
+
logger.error('rabbit: connection connectFailed', { err });
|
|
301
|
+
if (!isResolved) {
|
|
302
|
+
isResolved = true;
|
|
303
|
+
reject(err);
|
|
304
|
+
this.em.emit(CONNECTION_FAILED_CONST, err);
|
|
305
|
+
}
|
|
306
|
+
});
|
|
307
|
+
|
|
287
308
|
this.connection.on('disconnect', ({ err }) => {
|
|
288
309
|
debug('rabbit: connection closed');
|
|
289
310
|
this.exchanges = {};
|
|
@@ -302,6 +323,7 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
302
323
|
await this.loadConsumers();
|
|
303
324
|
this.creatingConnection = false;
|
|
304
325
|
this.em.emit(CONNECTION_CREATED_CONST, connection);
|
|
326
|
+
isResolved = true;
|
|
305
327
|
resolve(connection);
|
|
306
328
|
});
|
|
307
329
|
});
|
|
@@ -312,8 +334,13 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
312
334
|
const connection: AmqpConnectionManager = await this.getConnection();
|
|
313
335
|
const channel = connection.createChannel({});
|
|
314
336
|
|
|
337
|
+
let isResolved = false;
|
|
315
338
|
channel.on('error', (err) => {
|
|
316
339
|
logger.error(`rabbit: channel ${name} error`, { err });
|
|
340
|
+
if (!isResolved) {
|
|
341
|
+
isResolved = true;
|
|
342
|
+
reject(err);
|
|
343
|
+
}
|
|
317
344
|
});
|
|
318
345
|
channel.on('close', (...args) => {
|
|
319
346
|
logger.error(`rabbit: channel ${name} closed`, { args });
|
|
@@ -323,6 +350,7 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
323
350
|
});
|
|
324
351
|
channel.once('connect', () => {
|
|
325
352
|
debug(`rabbit: channel ${name} CONNECTED`);
|
|
353
|
+
isResolved = true;
|
|
326
354
|
resolve(channel);
|
|
327
355
|
});
|
|
328
356
|
});
|
|
@@ -366,14 +394,12 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
366
394
|
}
|
|
367
395
|
|
|
368
396
|
private async deleteQueue(queue: string) {
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
resolve(deleteQueueRes);
|
|
376
|
-
});
|
|
397
|
+
RabbitMq.validateName('queue', queue);
|
|
398
|
+
const channel: ChannelWrapper = await this.assertChannel();
|
|
399
|
+
logger.info('rabbit: deleting queue', { queue });
|
|
400
|
+
const deleteQueueRes = await channel.deleteQueue(queue);
|
|
401
|
+
debug('queue deleted', deleteQueueRes);
|
|
402
|
+
return deleteQueueRes;
|
|
377
403
|
}
|
|
378
404
|
|
|
379
405
|
async bindQueue(queue: string, exchange: string) {
|
package/src/lib/consts.ts
CHANGED
|
@@ -6,6 +6,7 @@ export const USER_TRACING_HEADER = 'x-af-user-id';
|
|
|
6
6
|
export const USER_OBJECT = 'userObject';
|
|
7
7
|
export const DEFAULT_USE_CONSUME_WITH_LOCK = false;
|
|
8
8
|
export const CONNECTION_CREATED_CONST = 'connectionCreated';
|
|
9
|
+
export const CONNECTION_FAILED_CONST = 'connectionFailed';
|
|
9
10
|
export const DEFAULT_OPTIONS = {
|
|
10
11
|
limit: 1,
|
|
11
12
|
retries: 1,
|