@bgaldino/nestjs-rabbitmq 2.0.0-beta.6 → 2.0.0-beta.7
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/README.md +32 -1
- package/dist/amqp-connection-manager.js +2 -1
- package/dist/amqp-connection-manager.js.map +1 -1
- package/dist/helper.d.ts +12 -0
- package/dist/helper.js +22 -0
- package/dist/helper.js.map +1 -1
- package/dist/rabbitmq-consumer.d.ts +6 -3
- package/dist/rabbitmq-consumer.js +31 -31
- package/dist/rabbitmq-consumer.js.map +1 -1
- package/dist/rabbitmq-retry-handler.js +16 -7
- package/dist/rabbitmq-retry-handler.js.map +1 -1
- package/dist/rabbitmq-service.js +14 -16
- package/dist/rabbitmq-service.js.map +1 -1
- package/dist/rabbitmq.interfaces.d.ts +4 -0
- package/dist/rabbitmq.types.d.ts +5 -0
- package/dist/rabbitmq.types.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -308,6 +308,8 @@ type MessageParams = {
|
|
|
308
308
|
channel: ConfirmChannel;
|
|
309
309
|
queue: string;
|
|
310
310
|
originalRoutingKey?: string;
|
|
311
|
+
correlationId?: string | null; // AMQP correlationId (or x-correlation-id header)
|
|
312
|
+
retryCount?: number; // retry attempts already performed for this message
|
|
311
313
|
};
|
|
312
314
|
```
|
|
313
315
|
|
|
@@ -490,9 +492,25 @@ before the next retry. The return value controls the behavior:
|
|
|
490
492
|
**Defaults** (when `retryStrategy` is not specified):
|
|
491
493
|
|
|
492
494
|
- `enabled`: true
|
|
493
|
-
- `maxAttempts`: 5
|
|
495
|
+
- `maxAttempts`: 5 (or `extraOptions.defaultMaxRetry` when set)
|
|
494
496
|
- `retryFn`: () => 5000
|
|
495
497
|
|
|
498
|
+
You can set a global default for the maximum retry attempts with
|
|
499
|
+
`extraOptions.defaultMaxRetry`. It applies to every consumer that does not
|
|
500
|
+
declare its own `retryStrategy.maxAttempts`:
|
|
501
|
+
|
|
502
|
+
```typescript
|
|
503
|
+
RabbitMQModule.forRoot({
|
|
504
|
+
connectionString: 'amqp://...',
|
|
505
|
+
extraOptions: {
|
|
506
|
+
defaultMaxRetry: 10,
|
|
507
|
+
},
|
|
508
|
+
});
|
|
509
|
+
```
|
|
510
|
+
|
|
511
|
+
Precedence (highest to lowest): `consumer.retryStrategy.maxAttempts` →
|
|
512
|
+
`extraOptions.defaultMaxRetry` → `5`.
|
|
513
|
+
|
|
496
514
|
You can also give a "string" value referring a method of the same class,
|
|
497
515
|
following the interface:
|
|
498
516
|
|
|
@@ -548,6 +566,7 @@ Every published message includes the following custom headers automatically:
|
|
|
548
566
|
|
|
549
567
|
```json
|
|
550
568
|
{
|
|
569
|
+
"x-correlation-id": "uuid (mirrors the AMQP correlationId property)",
|
|
551
570
|
"x-original-exchange": "exchange_name",
|
|
552
571
|
"x-original-routing-key": "routing.key",
|
|
553
572
|
"x-published-at": "2026-01-01T00:00:00.000Z"
|
|
@@ -558,6 +577,12 @@ These headers preserve the original exchange and routing key references, which
|
|
|
558
577
|
would otherwise be lost when a message is routed through retry queues or the
|
|
559
578
|
DLQ.
|
|
560
579
|
|
|
580
|
+
A `correlationId` is generated automatically (or taken from
|
|
581
|
+
`options.correlationId` if you pass one) and survives retry hops: when a
|
|
582
|
+
message fails and is republished to the retry queue, all original AMQP
|
|
583
|
+
properties (`correlationId`, `contentType`, `messageId`, ...) are preserved and
|
|
584
|
+
an `x-last-retry-at` timestamp is stamped alongside `x-retries-count`.
|
|
585
|
+
|
|
561
586
|
The `originalRoutingKey` field in `MessageParams` is derived from these headers
|
|
562
587
|
when available, falling back to the message's current routing key.
|
|
563
588
|
|
|
@@ -577,6 +602,12 @@ The environment variable takes precedence over the config value.
|
|
|
577
602
|
|
|
578
603
|
Consumer errors are always logged regardless of this setting.
|
|
579
604
|
|
|
605
|
+
Each log entry is a structured object containing the binding, duration,
|
|
606
|
+
`correlationId`, retry metadata (`retryCount`, `publishedAt`) and — when the
|
|
607
|
+
message carries W3C trace context headers (`traceparent`/`tracestate`, e.g.
|
|
608
|
+
injected by OpenTelemetry auto-instrumentation) — a `traceContext` field, so
|
|
609
|
+
log entries can be correlated with distributed traces.
|
|
610
|
+
|
|
580
611
|
### Health check
|
|
581
612
|
|
|
582
613
|
You can check the connection status of both the consumer and publisher
|
|
@@ -28,6 +28,7 @@ let AMQPConnectionManager = AMQPConnectionManager_1 = class AMQPConnectionManage
|
|
|
28
28
|
logType: "none",
|
|
29
29
|
heartbeatIntervalInSeconds: 0,
|
|
30
30
|
reconnectTimeInSeconds: 5,
|
|
31
|
+
defaultMaxRetry: 5
|
|
31
32
|
},
|
|
32
33
|
};
|
|
33
34
|
this.connections = new Map();
|
|
@@ -118,7 +119,7 @@ let AMQPConnectionManager = AMQPConnectionManager_1 = class AMQPConnectionManage
|
|
|
118
119
|
}
|
|
119
120
|
buildConsumer(connectionName = "default") {
|
|
120
121
|
const holder = this.getConnectionHolder(connectionName);
|
|
121
|
-
return new rabbitmq_consumer_1.RabbitMQConsumer(holder.consumerConn, this.opts.extraOptions.logType, holder.publisherWrapper);
|
|
122
|
+
return new rabbitmq_consumer_1.RabbitMQConsumer(holder.consumerConn, this.opts.extraOptions.logType, holder.publisherWrapper, this.opts.extraOptions.defaultMaxRetry);
|
|
122
123
|
}
|
|
123
124
|
};
|
|
124
125
|
exports.AMQPConnectionManager = AMQPConnectionManager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"amqp-connection-manager.js","sourceRoot":"","sources":["../src/amqp-connection-manager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAMwB;AACxB,qCAAiC;AACjC,2DAAuD;AAOvD,6DAAsD;AACtD,6DAA2E;AAGpE,IAAM,qBAAqB,6BAA3B,MAAM,qBAAqB;
|
|
1
|
+
{"version":3,"file":"amqp-connection-manager.js","sourceRoot":"","sources":["../src/amqp-connection-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/helper.d.ts
CHANGED
|
@@ -1,2 +1,14 @@
|
|
|
1
1
|
export declare function tryParseJson(content: string): any;
|
|
2
2
|
export declare function merge<T = Record<string, any>>(source: Record<string, any>, target: Record<string, any>): T;
|
|
3
|
+
export declare function generateRandomChars(length?: number): string;
|
|
4
|
+
/** Extracts tracing-related metadata from AMQP message headers.
|
|
5
|
+
* traceparent/tracestate are injected by OTel auto-instrumentation when present. */
|
|
6
|
+
export declare function extractTraceContext(headers?: Record<string, any>): {
|
|
7
|
+
traceContext?: {
|
|
8
|
+
traceparent?: string;
|
|
9
|
+
tracestate?: string;
|
|
10
|
+
};
|
|
11
|
+
retryCount?: number;
|
|
12
|
+
publishedAt?: string;
|
|
13
|
+
correlationId?: string;
|
|
14
|
+
};
|
package/dist/helper.js
CHANGED
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.tryParseJson = tryParseJson;
|
|
4
4
|
exports.merge = merge;
|
|
5
|
+
exports.generateRandomChars = generateRandomChars;
|
|
6
|
+
exports.extractTraceContext = extractTraceContext;
|
|
7
|
+
const crypto_1 = require("crypto");
|
|
5
8
|
function tryParseJson(content) {
|
|
6
9
|
try {
|
|
7
10
|
return !!content && JSON.parse(content);
|
|
@@ -25,4 +28,23 @@ function merge(source, target) {
|
|
|
25
28
|
}
|
|
26
29
|
return merged;
|
|
27
30
|
}
|
|
31
|
+
function generateRandomChars(length = 4) {
|
|
32
|
+
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
|
33
|
+
return Array.from({ length }, () => chars[(0, crypto_1.randomInt)(0, chars.length)]).join('');
|
|
34
|
+
}
|
|
35
|
+
/** Extracts tracing-related metadata from AMQP message headers.
|
|
36
|
+
* traceparent/tracestate are injected by OTel auto-instrumentation when present. */
|
|
37
|
+
function extractTraceContext(headers = {}) {
|
|
38
|
+
const result = {};
|
|
39
|
+
if (headers.traceparent || headers.tracestate) {
|
|
40
|
+
result.traceContext = Object.assign(Object.assign({}, (headers.traceparent && { traceparent: headers.traceparent })), (headers.tracestate && { tracestate: headers.tracestate }));
|
|
41
|
+
}
|
|
42
|
+
if (headers["x-retries-count"] != null)
|
|
43
|
+
result.retryCount = headers["x-retries-count"];
|
|
44
|
+
if (headers["x-published-at"] != null)
|
|
45
|
+
result.publishedAt = headers["x-published-at"];
|
|
46
|
+
if (headers["x-correlation-id"] != null)
|
|
47
|
+
result.correlationId = headers["x-correlation-id"];
|
|
48
|
+
return result;
|
|
49
|
+
}
|
|
28
50
|
//# sourceMappingURL=helper.js.map
|
package/dist/helper.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helper.js","sourceRoot":"","sources":["../src/helper.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"helper.js","sourceRoot":"","sources":["../src/helper.ts"],"names":[],"mappings":";;AAEA,oCAMC;AAED,sBAcC;AAED,kDAGC;AAID,kDAoBC;AArDD,mCAAmC;AAEnC,SAAgB,YAAY,CAAC,OAAe;IAC1C,IAAI,CAAC;QACH,OAAO,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,SAAgB,KAAK,CAA0B,MAA2B,EAAE,MAA2B;;IACrG,MAAM,MAAM,qBAAQ,MAAM,CAAE,CAAC;IAE7B,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI;YAAE,SAAS;QAElC,IAAI,GAAG,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACpF,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,GAAG,MAAA,MAAM,CAAC,GAAG,CAAC,mCAAI,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,OAAO,MAAW,CAAC;AACrB,CAAC;AAED,SAAgB,mBAAmB,CAAC,MAAM,GAAG,CAAC;IAC5C,MAAM,KAAK,GAAG,gEAAgE,CAAC;IAC/E,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,IAAA,kBAAS,EAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAClF,CAAC;AAED;oFACoF;AACpF,SAAgB,mBAAmB,CAAC,UAA+B,EAAE;IAMnE,MAAM,MAAM,GAA2C,EAAE,CAAC;IAE1D,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QAC9C,MAAM,CAAC,YAAY,mCACd,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,GAC7D,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAC9D,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,iBAAiB,CAAC,IAAI,IAAI;QAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACvF,IAAI,OAAO,CAAC,gBAAgB,CAAC,IAAI,IAAI;QAAE,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACtF,IAAI,OAAO,CAAC,kBAAkB,CAAC,IAAI,IAAI;QAAE,MAAM,CAAC,aAAa,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAE5F,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import { AmqpConnectionManager, ChannelWrapper } from "amqp-connection-manager";
|
|
2
2
|
import { IRabbitMQHandler } from "./rabbitmq.interfaces";
|
|
3
|
-
import { LogType, ConsumerOptions } from "./rabbitmq.types";
|
|
3
|
+
import { LogType, ConsumerOptions, ResolvedConsumerOptions } from "./rabbitmq.types";
|
|
4
|
+
export declare function resolveConsumerOptions(consumer: ConsumerOptions, defaults: {
|
|
5
|
+
defaultMaxRetry: number;
|
|
6
|
+
}): ResolvedConsumerOptions;
|
|
4
7
|
export declare class RabbitMQConsumer {
|
|
5
8
|
private logger;
|
|
6
9
|
private readonly connection;
|
|
7
10
|
private readonly logType;
|
|
8
|
-
private
|
|
11
|
+
private readonly defaultMaxRetry;
|
|
9
12
|
private readonly retryHandler;
|
|
10
|
-
constructor(connection: AmqpConnectionManager, logType: LogType, publishChannelWrapper: ChannelWrapper);
|
|
13
|
+
constructor(connection: AmqpConnectionManager, logType: LogType, publishChannelWrapper: ChannelWrapper, defaultMaxRetry?: number);
|
|
11
14
|
createConsumer(consumer: ConsumerOptions, handler: IRabbitMQHandler): Promise<ChannelWrapper>;
|
|
12
15
|
private setupChannel;
|
|
13
16
|
private bindRoutingKeys;
|
|
@@ -1,32 +1,35 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.RabbitMQConsumer = void 0;
|
|
4
|
+
exports.resolveConsumerOptions = resolveConsumerOptions;
|
|
4
5
|
const common_1 = require("@nestjs/common");
|
|
5
6
|
const helper_1 = require("./helper");
|
|
6
7
|
const rabbitmq_retry_handler_1 = require("./rabbitmq-retry-handler");
|
|
8
|
+
const node_os_1 = require("node:os");
|
|
9
|
+
function resolveConsumerOptions(consumer, defaults) {
|
|
10
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
11
|
+
return Object.assign(Object.assign({}, consumer), { durable: (_a = consumer.durable) !== null && _a !== void 0 ? _a : true, prefetch: (_b = consumer.prefetch) !== null && _b !== void 0 ? _b : 10, autoDelete: (_c = consumer.autoDelete) !== null && _c !== void 0 ? _c : false, retryStrategy: {
|
|
12
|
+
enabled: (_e = (_d = consumer.retryStrategy) === null || _d === void 0 ? void 0 : _d.enabled) !== null && _e !== void 0 ? _e : true,
|
|
13
|
+
maxAttempts: (_g = (_f = consumer.retryStrategy) === null || _f === void 0 ? void 0 : _f.maxAttempts) !== null && _g !== void 0 ? _g : defaults.defaultMaxRetry,
|
|
14
|
+
// retryFn/dlqFn given as strings are resolved to bound methods at discovery time
|
|
15
|
+
retryFn: (_j = (_h = consumer.retryStrategy) === null || _h === void 0 ? void 0 : _h.retryFn) !== null && _j !== void 0 ? _j : (() => 5000),
|
|
16
|
+
}, dlqStrategy: {
|
|
17
|
+
dlqFn: (_l = (_k = consumer.dlqStrategy) === null || _k === void 0 ? void 0 : _k.dlqFn) !== null && _l !== void 0 ? _l : (async () => true),
|
|
18
|
+
suffix: (_o = (_m = consumer.dlqStrategy) === null || _m === void 0 ? void 0 : _m.suffix) !== null && _o !== void 0 ? _o : ".dlq",
|
|
19
|
+
} });
|
|
20
|
+
}
|
|
7
21
|
class RabbitMQConsumer {
|
|
8
|
-
constructor(connection, logType, publishChannelWrapper) {
|
|
22
|
+
constructor(connection, logType, publishChannelWrapper, defaultMaxRetry = 5) {
|
|
9
23
|
this.logger = new common_1.Logger(RabbitMQConsumer.name);
|
|
10
|
-
this.defaultConsumerOptions = {
|
|
11
|
-
durable: true,
|
|
12
|
-
prefetch: 10,
|
|
13
|
-
autoDelete: false,
|
|
14
|
-
retryStrategy: {
|
|
15
|
-
enabled: true,
|
|
16
|
-
maxAttempts: 5,
|
|
17
|
-
retryFn: () => 5000,
|
|
18
|
-
},
|
|
19
|
-
dlqStrategy: {
|
|
20
|
-
dlqFn: async () => true,
|
|
21
|
-
suffix: ".dlq",
|
|
22
|
-
},
|
|
23
|
-
};
|
|
24
24
|
this.connection = connection;
|
|
25
25
|
this.logType = logType;
|
|
26
|
+
this.defaultMaxRetry = defaultMaxRetry;
|
|
26
27
|
this.retryHandler = new rabbitmq_retry_handler_1.RetryHandler(publishChannelWrapper);
|
|
27
28
|
}
|
|
28
29
|
async createConsumer(consumer, handler) {
|
|
29
|
-
const resolved = (
|
|
30
|
+
const resolved = resolveConsumerOptions(consumer, {
|
|
31
|
+
defaultMaxRetry: this.defaultMaxRetry,
|
|
32
|
+
});
|
|
30
33
|
const consumerChannel = this.connection.createChannel({
|
|
31
34
|
confirm: true,
|
|
32
35
|
name: resolved.queue,
|
|
@@ -47,7 +50,9 @@ class RabbitMQConsumer {
|
|
|
47
50
|
});
|
|
48
51
|
await this.bindRoutingKeys(channel, consumer);
|
|
49
52
|
await this.attachRetryAndDLQ(channel, consumer);
|
|
50
|
-
channel.consume(consumer.queue, async (message) => await this.consume(message, channel, consumer, handler)
|
|
53
|
+
channel.consume(consumer.queue, async (message) => await this.consume(message, channel, consumer, handler), {
|
|
54
|
+
consumerTag: `${(0, node_os_1.hostname)()}:${(0, helper_1.generateRandomChars)(8)}`
|
|
55
|
+
});
|
|
51
56
|
}
|
|
52
57
|
async bindRoutingKeys(channel, consumer) {
|
|
53
58
|
const keys = Array.isArray(consumer.routingKey) ? consumer.routingKey : [consumer.routingKey];
|
|
@@ -77,7 +82,7 @@ class RabbitMQConsumer {
|
|
|
77
82
|
});
|
|
78
83
|
}
|
|
79
84
|
async consume(message, channel, consumer, callback) {
|
|
80
|
-
var _a, _b;
|
|
85
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
81
86
|
let hasErrors = null;
|
|
82
87
|
let hasRetried = false;
|
|
83
88
|
const start = process.hrtime.bigint();
|
|
@@ -85,7 +90,9 @@ class RabbitMQConsumer {
|
|
|
85
90
|
await callback((0, helper_1.tryParseJson)(message.content.toString("utf8")), {
|
|
86
91
|
message,
|
|
87
92
|
queue: consumer.queue,
|
|
88
|
-
originalRoutingKey: (_b = (_a = message.properties.headers["x-original-routing-key"]) !== null && _a !== void 0 ? _a : message.fields.routingKey) !== null && _b !== void 0 ? _b : null
|
|
93
|
+
originalRoutingKey: (_b = (_a = message.properties.headers["x-original-routing-key"]) !== null && _a !== void 0 ? _a : message.fields.routingKey) !== null && _b !== void 0 ? _b : null,
|
|
94
|
+
correlationId: (_e = (_c = message.properties.correlationId) !== null && _c !== void 0 ? _c : (_d = message.properties.headers) === null || _d === void 0 ? void 0 : _d["x-correlation-id"]) !== null && _e !== void 0 ? _e : null,
|
|
95
|
+
retryCount: (_g = (_f = message.properties.headers) === null || _f === void 0 ? void 0 : _f["x-retries-count"]) !== null && _g !== void 0 ? _g : 0,
|
|
89
96
|
});
|
|
90
97
|
}
|
|
91
98
|
catch (e) {
|
|
@@ -97,7 +104,7 @@ class RabbitMQConsumer {
|
|
|
97
104
|
this.inspectConsumer({
|
|
98
105
|
binding: {
|
|
99
106
|
queue: consumer.queue,
|
|
100
|
-
routingKey: message.fields.routingKey,
|
|
107
|
+
routingKey: (_h = message.properties.headers["x-original-routing-key"]) !== null && _h !== void 0 ? _h : message.fields.routingKey,
|
|
101
108
|
exchange: consumer.exchangeName,
|
|
102
109
|
},
|
|
103
110
|
consumeMessage: message,
|
|
@@ -144,25 +151,18 @@ class RabbitMQConsumer {
|
|
|
144
151
|
}
|
|
145
152
|
}
|
|
146
153
|
inspectConsumer(args) {
|
|
154
|
+
var _a;
|
|
147
155
|
const { binding, consumeMessage, data, error } = args;
|
|
148
156
|
const { exchange, routingKey, queue } = binding;
|
|
149
157
|
const { content, fields, properties } = consumeMessage;
|
|
150
158
|
const message = `[AMQP] [CONSUMER] [${exchange}] [${routingKey}] [${queue}]`;
|
|
151
159
|
const logLevel = error ? "error" : "log";
|
|
152
|
-
const
|
|
153
|
-
|
|
154
|
-
type: "consumer",
|
|
155
|
-
duration: args.elapsedTime.toString(),
|
|
156
|
-
correlationId: args.consumeMessage.properties.correlationId,
|
|
157
|
-
binding,
|
|
158
|
-
title: message,
|
|
159
|
-
isDead: args.isDead,
|
|
160
|
-
consumedMessage: {
|
|
160
|
+
const headerContext = (0, helper_1.extractTraceContext)(properties === null || properties === void 0 ? void 0 : properties.headers);
|
|
161
|
+
const logData = Object.assign(Object.assign(Object.assign(Object.assign({ logLevel, type: "consumer", duration: args.elapsedTime.toString(), correlationId: (_a = consumeMessage.properties.correlationId) !== null && _a !== void 0 ? _a : headerContext.correlationId }, (headerContext.traceContext && { traceContext: headerContext.traceContext })), (headerContext.retryCount != null && { retryCount: headerContext.retryCount })), (headerContext.publishedAt && { publishedAt: headerContext.publishedAt })), { binding, title: message, isDead: args.isDead, consumedMessage: {
|
|
161
162
|
fields,
|
|
162
163
|
properties,
|
|
163
164
|
content: data !== null && data !== void 0 ? data : (0, helper_1.tryParseJson)(content.toString("utf8")),
|
|
164
|
-
}
|
|
165
|
-
};
|
|
165
|
+
} });
|
|
166
166
|
if (error) {
|
|
167
167
|
logData["error"] = {
|
|
168
168
|
stack: error === null || error === void 0 ? void 0 : error.stack,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rabbitmq-consumer.js","sourceRoot":"","sources":["../src/rabbitmq-consumer.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"rabbitmq-consumer.js","sourceRoot":"","sources":["../src/rabbitmq-consumer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
|
+
var t = {};
|
|
4
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
5
|
+
t[p] = s[p];
|
|
6
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
7
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
8
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
9
|
+
t[p[i]] = s[p[i]];
|
|
10
|
+
}
|
|
11
|
+
return t;
|
|
12
|
+
};
|
|
2
13
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
14
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
15
|
};
|
|
@@ -13,7 +24,7 @@ class RetryHandler {
|
|
|
13
24
|
this.logger = new common_1.Logger(RetryHandler.name);
|
|
14
25
|
}
|
|
15
26
|
async execute(consumer, message, error) {
|
|
16
|
-
var _a, _b, _c, _d;
|
|
27
|
+
var _a, _b, _c, _d, _e;
|
|
17
28
|
if (!consumer.retryStrategy.enabled) {
|
|
18
29
|
return false;
|
|
19
30
|
}
|
|
@@ -28,13 +39,11 @@ class RetryHandler {
|
|
|
28
39
|
return false;
|
|
29
40
|
}
|
|
30
41
|
const retryQueue = `${consumer.queue}.retry`;
|
|
42
|
+
// Preserve original AMQP properties (correlationId, contentType, messageId, ...)
|
|
43
|
+
// so the trace chain survives retry hops.
|
|
44
|
+
const _f = (_e = message.properties) !== null && _e !== void 0 ? _e : {}, { headers: _headers, expiration: _expiration } = _f, originalProperties = __rest(_f, ["headers", "expiration"]);
|
|
31
45
|
try {
|
|
32
|
-
return await this.publishChannel.publish("", retryQueue, (0, faster_stable_stringify_1.default)((0, helper_1.tryParseJson)(message.content.toString("utf8"))), {
|
|
33
|
-
headers: Object.assign(Object.assign({}, message.properties.headers), { "x-retries-count": retryCount + 1, "x-original-routing-key": originalRoutingKey }),
|
|
34
|
-
expiration: retryDelay,
|
|
35
|
-
deliveryMode: 2,
|
|
36
|
-
persistent: true,
|
|
37
|
-
});
|
|
46
|
+
return await this.publishChannel.publish("", retryQueue, (0, faster_stable_stringify_1.default)((0, helper_1.tryParseJson)(message.content.toString("utf8"))), Object.assign(Object.assign({}, originalProperties), { headers: Object.assign(Object.assign({}, message.properties.headers), { "x-retries-count": retryCount + 1, "x-original-routing-key": originalRoutingKey, "x-last-retry-at": new Date().toISOString() }), expiration: retryDelay, deliveryMode: 2, persistent: true }));
|
|
38
47
|
}
|
|
39
48
|
catch (e) {
|
|
40
49
|
this.logger.error({ message: "could_not_retry", error: e });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rabbitmq-retry-handler.js","sourceRoot":"","sources":["../src/rabbitmq-retry-handler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rabbitmq-retry-handler.js","sourceRoot":"","sources":["../src/rabbitmq-retry-handler.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,2CAAwC;AAIxC,qCAAwC;AACxC,sFAAgD;AAEhD,MAAa,YAAY;IAGvB,YACmB,cAA8B;QAA9B,mBAAc,GAAd,cAAc,CAAgB;QAHzC,WAAM,GAAG,IAAI,eAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;IAI1C,CAAC;IAEL,KAAK,CAAC,OAAO,CACX,QAAiC,EACjC,OAAuB,EACvB,KAAY;;QAEZ,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;YACpC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,UAAU,GAAG,MAAA,MAAA,OAAO,CAAC,UAAU,CAAC,OAAO,0CAAG,iBAAiB,CAAC,mCAAI,CAAC,CAAC;QACxE,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC;QACpD,MAAM,kBAAkB,GACtB,MAAA,MAAA,OAAO,CAAC,UAAU,CAAC,OAAO,0CAAG,wBAAwB,CAAC,mCACtD,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;QAE5B,IAAI,UAAU,GAAG,QAAQ,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,OAAO,CACrD,IAAA,qBAAY,EAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAC9C,UAAU,EACV,KAAK,CACN,CAAC;QAEF,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACnB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,UAAU,GAAG,GAAG,QAAQ,CAAC,KAAK,QAAQ,CAAC;QAC7C,iFAAiF;QACjF,0CAA0C;QAC1C,MAAM,KAIF,MAAA,OAAO,CAAC,UAAU,mCAAI,EAAE,EAJtB,EACJ,OAAO,EAAE,QAAQ,EACjB,UAAU,EAAE,WAAW,OAEG,EADvB,kBAAkB,cAHjB,yBAIL,CAA2B,CAAC;QAE7B,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CACtC,EAAE,EACF,UAAU,EACV,IAAA,iCAAS,EAAC,IAAA,qBAAY,EAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,kCAEpD,kBAAkB,KACrB,OAAO,kCACF,OAAO,CAAC,UAAU,CAAC,OAAO,KAC7B,iBAAiB,EAAE,UAAU,GAAG,CAAC,EACjC,wBAAwB,EAAE,kBAAkB,EAC5C,iBAAiB,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,KAE7C,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,CAAC,EACf,UAAU,EAAE,IAAI,IAEnB,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YAC5D,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF;AApED,oCAoEC"}
|
package/dist/rabbitmq-service.js
CHANGED
|
@@ -69,12 +69,14 @@ let RabbitMQService = RabbitMQService_1 = class RabbitMQService {
|
|
|
69
69
|
* If **FALSE** or an error is thrown, the message was not published !
|
|
70
70
|
*/
|
|
71
71
|
async publish(exchangeName, routingKey, message, options) {
|
|
72
|
-
var _a;
|
|
72
|
+
var _a, _b;
|
|
73
73
|
let hasErrors = null;
|
|
74
74
|
const start = process.hrtime.bigint();
|
|
75
|
+
const correlationId = (_a = options === null || options === void 0 ? void 0 : options.correlationId) !== null && _a !== void 0 ? _a : (0, node_crypto_1.randomUUID)();
|
|
75
76
|
const defaultHeaders = {
|
|
76
|
-
correlationId
|
|
77
|
+
correlationId,
|
|
77
78
|
headers: {
|
|
79
|
+
"x-correlation-id": correlationId,
|
|
78
80
|
"x-original-exchange": exchangeName,
|
|
79
81
|
"x-original-routing-key": routingKey,
|
|
80
82
|
"x-published-at": new Date().toISOString(),
|
|
@@ -82,37 +84,33 @@ let RabbitMQService = RabbitMQService_1 = class RabbitMQService {
|
|
|
82
84
|
persistent: true,
|
|
83
85
|
deliveryMode: 2,
|
|
84
86
|
};
|
|
87
|
+
let effectiveOptions = defaultHeaders;
|
|
85
88
|
try {
|
|
86
89
|
await this.AMQPConn.ensureConnected();
|
|
87
|
-
const connectionName = (
|
|
90
|
+
const connectionName = (_b = options === null || options === void 0 ? void 0 : options.connection) !== null && _b !== void 0 ? _b : "default";
|
|
88
91
|
const holder = this.AMQPConn.getConnectionHolder(connectionName);
|
|
89
|
-
const
|
|
90
|
-
|
|
92
|
+
const _c = options !== null && options !== void 0 ? options : {}, { connection: _conn } = _c, publishOptions = __rest(_c, ["connection"]);
|
|
93
|
+
effectiveOptions = (0, helper_1.merge)(defaultHeaders, publishOptions);
|
|
94
|
+
await holder.publisherWrapper.publish(exchangeName, routingKey, (0, faster_stable_stringify_1.default)(message), effectiveOptions);
|
|
91
95
|
}
|
|
92
96
|
catch (e) {
|
|
93
97
|
hasErrors = e;
|
|
94
98
|
}
|
|
95
99
|
finally {
|
|
96
|
-
this.inspectPublisher(exchangeName, routingKey, message, process.hrtime.bigint() - start,
|
|
100
|
+
this.inspectPublisher(exchangeName, routingKey, message, process.hrtime.bigint() - start, effectiveOptions, hasErrors);
|
|
97
101
|
}
|
|
98
102
|
return !hasErrors;
|
|
99
103
|
}
|
|
100
104
|
inspectPublisher(exchange, routingKey, content, elapsedTime, properties, error) {
|
|
105
|
+
var _a;
|
|
101
106
|
if (!["publisher", "all"].includes(this.AMQPConn.getLogType()) && !error)
|
|
102
107
|
return;
|
|
103
108
|
const logLevel = error ? "error" : "log";
|
|
104
|
-
const
|
|
105
|
-
|
|
106
|
-
type: "publisher",
|
|
107
|
-
duration: elapsedTime.toString(),
|
|
108
|
-
correlationId: properties === null || properties === void 0 ? void 0 : properties.correlationId,
|
|
109
|
-
title: `[AMQP] [PUBLISH] [${exchange}] [${routingKey}]`,
|
|
110
|
-
binding: { exchange, routingKey },
|
|
111
|
-
publishedMessage: {
|
|
109
|
+
const headerContext = (0, helper_1.extractTraceContext)(properties === null || properties === void 0 ? void 0 : properties.headers);
|
|
110
|
+
const logData = Object.assign(Object.assign(Object.assign({ logLevel, type: "publisher", duration: elapsedTime.toString(), correlationId: (_a = properties === null || properties === void 0 ? void 0 : properties.correlationId) !== null && _a !== void 0 ? _a : headerContext.correlationId }, (headerContext.traceContext && { traceContext: headerContext.traceContext })), (headerContext.publishedAt && { publishedAt: headerContext.publishedAt })), { title: `[AMQP] [PUBLISH] [${exchange}] [${routingKey}]`, binding: { exchange, routingKey }, publishedMessage: {
|
|
112
111
|
content,
|
|
113
112
|
properties,
|
|
114
|
-
}
|
|
115
|
-
};
|
|
113
|
+
} });
|
|
116
114
|
if (error)
|
|
117
115
|
logData["error"] = error;
|
|
118
116
|
this.logger[logLevel](logData);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rabbitmq-service.js","sourceRoot":"","sources":["../src/rabbitmq-service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAoD;AACpD,6CAAyC;AACzC,uEAAkE;AAClE,sFAAgD;AAEhD,
|
|
1
|
+
{"version":3,"file":"rabbitmq-service.js","sourceRoot":"","sources":["../src/rabbitmq-service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAoD;AACpD,6CAAyC;AACzC,uEAAkE;AAClE,sFAAgD;AAEhD,qCAAsD;AAG/C,IAAM,eAAe,uBAArB,MAAM,eAAe;IAG1B,YAA6B,QAA+B;QAA/B,aAAQ,GAAR,QAAQ,CAAuB;QAFpD,WAAM,GAAW,IAAI,eAAM,CAAC,iBAAe,CAAC,IAAI,CAAC,CAAC;IAEM,CAAC;IAEjE;;;;;OAKG;IACI,KAAK,CAAC,WAAW,CAAC,cAAuB;;QAC9C,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;QAEtC,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;YACjE,MAAM,WAAW,GAAG,MAAA,MAAM,CAAC,aAAa,0CAAE,WAAW,EAAE,CAAC;YACxD,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAClF,OAAO,WAAW,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC;QAED,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,EAAE,CAAC;YACvD,MAAM,WAAW,GAAG,MAAA,MAAM,CAAC,aAAa,0CAAE,WAAW,EAAE,CAAC;YACxD,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAClF,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU;gBAAE,OAAO,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,OAAO,CACX,YAAoB,EACpB,UAAkB,EAClB,OAAU,EACV,OAAkD;;QAElD,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACtC,MAAM,aAAa,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,mCAAI,IAAA,wBAAU,GAAE,CAAC;QAC7D,MAAM,cAAc,GAAG;YACrB,aAAa;YACb,OAAO,EAAE;gBACP,kBAAkB,EAAE,aAAa;gBACjC,qBAAqB,EAAE,YAAY;gBACnC,wBAAwB,EAAE,UAAU;gBACpC,gBAAgB,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aAC3C;YACD,UAAU,EAAE,IAAI;YAChB,YAAY,EAAE,CAAC;SAChB,CAAC;QAEF,IAAI,gBAAgB,GAAmB,cAAc,CAAC;QAEtD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;YACtC,MAAM,cAAc,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,mCAAI,SAAS,CAAC;YACxD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;YACjE,MAAM,KAA2C,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,EAAxD,EAAE,UAAU,EAAE,KAAK,OAAqC,EAAhC,cAAc,cAAtC,cAAwC,CAAgB,CAAC;YAC/D,gBAAgB,GAAG,IAAA,cAAK,EAAC,cAAc,EAAE,cAAc,CAAC,CAAC;YAEzD,MAAM,MAAM,CAAC,gBAAgB,CAAC,OAAO,CACnC,YAAY,EACZ,UAAU,EACV,IAAA,iCAAS,EAAC,OAAO,CAAC,EAClB,gBAAgB,CACjB,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,SAAS,GAAG,CAAC,CAAC;QAChB,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,gBAAgB,CACnB,YAAY,EACZ,UAAU,EACV,OAAO,EACP,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,KAAK,EAC/B,gBAAgB,EAChB,SAAS,CACV,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,SAAS,CAAC;IACpB,CAAC;IAEO,gBAAgB,CACtB,QAAgB,EAChB,UAAkB,EAClB,OAAY,EACZ,WAAmB,EACnB,UAA2B,EAC3B,KAAW;;QAEX,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO;QAEjF,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;QACzC,MAAM,aAAa,GAAG,IAAA,4BAAmB,EAAC,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,OAAO,CAAC,CAAC;QAC/D,MAAM,OAAO,+CACX,QAAQ,EACR,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAAE,EAChC,aAAa,EAAE,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,aAAa,mCAAI,aAAa,CAAC,aAAa,IACpE,CAAC,aAAa,CAAC,YAAY,IAAI,EAAE,YAAY,EAAE,aAAa,CAAC,YAAY,EAAE,CAAC,GAC5E,CAAC,aAAa,CAAC,WAAW,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC,WAAW,EAAE,CAAC,KAC5E,KAAK,EAAE,qBAAqB,QAAQ,MAAM,UAAU,GAAG,EACvD,OAAO,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,EACjC,gBAAgB,EAAE;gBAChB,OAAO;gBACP,UAAU;aACX,GACF,CAAC;QAEF,IAAI,KAAK;YAAE,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;CACF,CAAA;AAzHY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,mBAAU,GAAE;qCAI4B,+CAAqB;GAHjD,eAAe,CAyH3B"}
|
|
@@ -6,6 +6,10 @@ export type MessageParams = {
|
|
|
6
6
|
message: ConsumeMessage;
|
|
7
7
|
queue: string;
|
|
8
8
|
originalRoutingKey?: string;
|
|
9
|
+
/** Correlation id from AMQP properties (or x-correlation-id header) */
|
|
10
|
+
correlationId?: string | null;
|
|
11
|
+
/** Number of retry attempts already performed for this message */
|
|
12
|
+
retryCount?: number;
|
|
9
13
|
};
|
|
10
14
|
export interface IRabbitMQHandler<T = any> {
|
|
11
15
|
(content: T, parameters?: MessageParams): Promise<void>;
|
package/dist/rabbitmq.types.d.ts
CHANGED
|
@@ -134,6 +134,11 @@ export type ModuleOptions = {
|
|
|
134
134
|
* Time between reconnection attempts when a channel/broker connection fails
|
|
135
135
|
* @default 5 seconds */
|
|
136
136
|
reconnectTimeInSeconds?: number;
|
|
137
|
+
/**
|
|
138
|
+
* Maximum amount of retries that will be used if none is given to the consumer.retryStrategy.maxAttempts
|
|
139
|
+
* @default 5
|
|
140
|
+
*/
|
|
141
|
+
defaultMaxRetry?: number;
|
|
137
142
|
};
|
|
138
143
|
/** Used for multi-vhost connections. If your application needs to publish and consume from
|
|
139
144
|
* different rabbit brokers or different instances, you can drop the passage of options and instead
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rabbitmq.types.js","sourceRoot":"","sources":["../src/rabbitmq.types.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"rabbitmq.types.js","sourceRoot":"","sources":["../src/rabbitmq.types.ts"],"names":[],"mappings":";;AA0MA,oDAIC;AAJD,SAAgB,oBAAoB,CAClC,MAA0B;IAE1B,OAAO,MAAM,CAAC;AAChB,CAAC"}
|