@cargolift-cdi/util-rabbitmq 0.2.12 → 0.2.14
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 +18 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/rabbitmq-connection.manager.d.ts +5 -0
- package/dist/rabbitmq-connection.manager.d.ts.map +1 -1
- package/dist/rabbitmq-connection.manager.js +9 -0
- package/dist/rabbitmq-connection.manager.js.map +1 -1
- package/dist/rabbitmq-publisher-dlq.service.d.ts +8 -2
- package/dist/rabbitmq-publisher-dlq.service.d.ts.map +1 -1
- package/dist/rabbitmq-publisher-dlq.service.js +2 -2
- package/dist/rabbitmq-publisher-dlq.service.js.map +1 -1
- package/dist/rabbitmq-topology.service.d.ts +17 -0
- package/dist/rabbitmq-topology.service.d.ts.map +1 -0
- package/dist/rabbitmq-topology.service.js +136 -0
- package/dist/rabbitmq-topology.service.js.map +1 -0
- package/dist/rabbitmq.constants.d.ts.map +1 -1
- package/dist/rabbitmq.constants.js +5 -0
- package/dist/rabbitmq.constants.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -8,6 +8,7 @@ Utilitários para publicação de mensagens RabbitMQ com confirmação (publishe
|
|
|
8
8
|
- `IntegrationEventPublisher`: fachada de alto nível para eventos de integração HTTP → RabbitMQ.
|
|
9
9
|
- `publishToDlqAndAck`: envia mensagem original (enriquecida) para DLQ e faz ack.
|
|
10
10
|
- `RabbitMQConnectionManager`: reutiliza conexão evitando overhead de conexão por mensagem.
|
|
11
|
+
- `RabbitMQTopologyService`: criação padronizada de exchanges (AE, DLX, retries) e filas dinâmicas por sistema.
|
|
11
12
|
|
|
12
13
|
## Exemplo Rápido (NestJS)
|
|
13
14
|
|
|
@@ -91,6 +92,23 @@ Header `x-dlq-enriched` indica `1` (sucesso) ou `0` (fallback raw).
|
|
|
91
92
|
| `RABBITMQ_EXCHANGE_TYPE` | Tipo do exchange | `topic` |
|
|
92
93
|
| `RABBITMQ_PUBLISH_TIMEOUT_MS` | Timeout confirmação | `5000` |
|
|
93
94
|
|
|
95
|
+
### Topologia (opcional)
|
|
96
|
+
| Nome | Descrição | Default |
|
|
97
|
+
|------|-----------|---------|
|
|
98
|
+
| `RABBITMQ_EXCHANGE_INBOUND` | Exchange inbound (preferencial) | `integration.inbound` |
|
|
99
|
+
| `RABBITMQ_EXCHANGE_OUTBOUND` | Exchange outbound (preferencial) | `integration.outbound` |
|
|
100
|
+
| `RABBITMQ_AE_EXCHANGE` | Sufixo da AE (compat) | `ae` |
|
|
101
|
+
| `RABBITMQ_EXCHANGE_AE` | Sufixo da AE (preferencial) | `ae` |
|
|
102
|
+
| `RABBITMQ_DLX` | Sufixo da DLX (preferencial) | `dlx` |
|
|
103
|
+
| `RABBITMQ_DLX_NAME` | Sufixo da DLX (compat) | `dlx` |
|
|
104
|
+
| `RABBITMQ_UNROUTABLE_QUEUE` | Nome da fila de unroutable (sem prefixo) | `unroutable` |
|
|
105
|
+
| `RABBITMQ_RETRY_POLICY_SHORT_MS` | TTL retry curto | `120000` |
|
|
106
|
+
| `RABBITMQ_RETRY_POLICY_LONG_MS` | TTL retry longo | `3600000` |
|
|
107
|
+
|
|
108
|
+
Notas:
|
|
109
|
+
- As variáveis com sufixo “preferencial” são a convenção nova. As chaves “compat” continuam funcionais para serviços existentes.
|
|
110
|
+
- `RabbitMQTopologyService` usa estas variáveis para criar: AE (fanout), DLX (topic), retries (topic) e filas `integration.<system>.*` com DLQ e binds.
|
|
111
|
+
|
|
94
112
|
## Boas Práticas
|
|
95
113
|
- Reutilize a instância injetada (não crie manualmente o publisher baixo nível).
|
|
96
114
|
- Evite payloads muito grandes (considerar compressão se `sizeBytes > ~256KB`).
|
package/dist/index.d.ts
CHANGED
|
@@ -5,7 +5,9 @@
|
|
|
5
5
|
export * from './rabbitmq.constants.js';
|
|
6
6
|
export * from './rabbitmq-connection.manager.js';
|
|
7
7
|
export * from './rabbitmq-publisher.service.js';
|
|
8
|
+
export { RabbitMQPublisherService as RmqPublisherService } from './rabbitmq-publisher.service.js';
|
|
8
9
|
export * from './rabbitmq-publisher-dlq.service.js';
|
|
9
10
|
export * from './integration-event.publisher.js';
|
|
10
11
|
export * from './rabbitmq.module.js';
|
|
12
|
+
export * from './rabbitmq-topology.service.js';
|
|
11
13
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,yBAAyB,CAAC;AACxC,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,qCAAqC,CAAC;AACpD,cAAc,kCAAkC,CAAC;AACjD,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,yBAAyB,CAAC;AACxC,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,OAAO,EAAE,wBAAwB,IAAI,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAClG,cAAc,qCAAqC,CAAC;AACpD,cAAc,kCAAkC,CAAC;AACjD,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -5,7 +5,9 @@
|
|
|
5
5
|
export * from './rabbitmq.constants.js';
|
|
6
6
|
export * from './rabbitmq-connection.manager.js';
|
|
7
7
|
export * from './rabbitmq-publisher.service.js';
|
|
8
|
+
export { RabbitMQPublisherService as RmqPublisherService } from './rabbitmq-publisher.service.js';
|
|
8
9
|
export * from './rabbitmq-publisher-dlq.service.js';
|
|
9
10
|
export * from './integration-event.publisher.js';
|
|
10
11
|
export * from './rabbitmq.module.js';
|
|
12
|
+
export * from './rabbitmq-topology.service.js';
|
|
11
13
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,yBAAyB,CAAC;AACxC,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,qCAAqC,CAAC;AACpD,cAAc,kCAAkC,CAAC;AACjD,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,yBAAyB,CAAC;AACxC,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,OAAO,EAAE,wBAAwB,IAAI,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAClG,cAAc,qCAAqC,CAAC;AACpD,cAAc,kCAAkC,CAAC;AACjD,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC"}
|
|
@@ -13,6 +13,11 @@ export declare class RabbitMQConnectionManager {
|
|
|
13
13
|
static get(url: string, logger?: LoggerContextService): RabbitMQConnectionManager;
|
|
14
14
|
getConnection(): Promise<any>;
|
|
15
15
|
createConfirmChannel(): Promise<any>;
|
|
16
|
+
/**
|
|
17
|
+
* Cria um canal simples (não-confirmável) para operações administrativas/topologia
|
|
18
|
+
* como assertExchange/assertQueue/bind. Use canais confirmáveis apenas para publicação.
|
|
19
|
+
*/
|
|
20
|
+
createChannel(): Promise<any>;
|
|
16
21
|
close(force?: boolean): Promise<void>;
|
|
17
22
|
}
|
|
18
23
|
export declare function getRabbitConnectionManager(logger?: LoggerContextService): RabbitMQConnectionManager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rabbitmq-connection.manager.d.ts","sourceRoot":"","sources":["../src/rabbitmq-connection.manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAG7D;;;GAGG;AACH,qBAAa,yBAAyB;IAOhB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAAU,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAN1E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA4B;IAGnD,OAAO,CAAC,UAAU,CAAC,CAAM;IACzB,OAAO,CAAC,UAAU,CAAC,CAAe;IAElC,OAAO;IAEP,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,oBAAoB;IAK/C,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC;IAkB7B,oBAAoB,IAAI,OAAO,CAAC,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"rabbitmq-connection.manager.d.ts","sourceRoot":"","sources":["../src/rabbitmq-connection.manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAG7D;;;GAGG;AACH,qBAAa,yBAAyB;IAOhB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAAU,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAN1E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA4B;IAGnD,OAAO,CAAC,UAAU,CAAC,CAAM;IACzB,OAAO,CAAC,UAAU,CAAC,CAAe;IAElC,OAAO;IAEP,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,oBAAoB;IAK/C,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC;IAkB7B,oBAAoB,IAAI,OAAO,CAAC,GAAG,CAAC;IAM1C;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC;IAM7B,KAAK,CAAC,KAAK,UAAQ;CAM1B;AAED,wBAAgB,0BAA0B,CAAC,MAAM,CAAC,EAAE,oBAAoB,6BAIvE"}
|
|
@@ -39,6 +39,15 @@ export class RabbitMQConnectionManager {
|
|
|
39
39
|
const channel = await conn.createConfirmChannel();
|
|
40
40
|
return channel;
|
|
41
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Cria um canal simples (não-confirmável) para operações administrativas/topologia
|
|
44
|
+
* como assertExchange/assertQueue/bind. Use canais confirmáveis apenas para publicação.
|
|
45
|
+
*/
|
|
46
|
+
async createChannel() {
|
|
47
|
+
const conn = await this.getConnection();
|
|
48
|
+
const channel = await conn.createChannel();
|
|
49
|
+
return channel;
|
|
50
|
+
}
|
|
42
51
|
async close(force = false) {
|
|
43
52
|
if (force && this.connection) {
|
|
44
53
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rabbitmq-connection.manager.js","sourceRoot":"","sources":["../src/rabbitmq-connection.manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAEnC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D;;;GAGG;AACH,MAAM,OAAO,yBAAyB;IAOpC,YAAqC,GAAW,EAAmB,MAA6B;QAA3D,QAAG,GAAH,GAAG,CAAQ;QAAmB,WAAM,GAAN,MAAM,CAAuB;IAAG,CAAC;IAEpG,MAAM,CAAC,GAAG,CAAC,GAAW,EAAE,MAA6B;QACnD,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,yBAAyB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC/E,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC,UAAU,CAAC;QAC5C,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC,UAAU,CAAC;QAE5C,IAAI,CAAC,UAAU,GAAI,OAAe,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAS,EAAE,EAAE;YACtE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAQ,EAAE,EAAE;gBACxB,IAAI,CAAC;oBAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,2BAA2B,EAAE,GAAU,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,2BAA2B,EAAE,EAAE,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YAClK,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACpB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;YAC9B,CAAC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnD,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,oBAAoB;QACxB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAClD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK;QACvB,IAAI,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAC7B,IAAI,CAAC;gBAAC,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YAC/C,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC9B,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,0BAA0B,CAAC,MAA6B;IACtE,eAAe,CAAC,MAAM,CAAC,CAAC;IACxB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,YAAa,CAAC;IACtC,OAAO,yBAAyB,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC"}
|
|
1
|
+
{"version":3,"file":"rabbitmq-connection.manager.js","sourceRoot":"","sources":["../src/rabbitmq-connection.manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAEnC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D;;;GAGG;AACH,MAAM,OAAO,yBAAyB;IAOpC,YAAqC,GAAW,EAAmB,MAA6B;QAA3D,QAAG,GAAH,GAAG,CAAQ;QAAmB,WAAM,GAAN,MAAM,CAAuB;IAAG,CAAC;IAEpG,MAAM,CAAC,GAAG,CAAC,GAAW,EAAE,MAA6B;QACnD,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,yBAAyB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC/E,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC,UAAU,CAAC;QAC5C,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC,UAAU,CAAC;QAE5C,IAAI,CAAC,UAAU,GAAI,OAAe,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAS,EAAE,EAAE;YACtE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAQ,EAAE,EAAE;gBACxB,IAAI,CAAC;oBAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,2BAA2B,EAAE,GAAU,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,2BAA2B,EAAE,EAAE,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YAClK,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACpB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;YAC9B,CAAC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnD,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,oBAAoB;QACxB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAClD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,aAAa;QACjB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3C,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK;QACvB,IAAI,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAC7B,IAAI,CAAC;gBAAC,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YAC/C,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC9B,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,0BAA0B,CAAC,MAA6B;IACtE,eAAe,CAAC,MAAM,CAAC,CAAC;IACxB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,YAAa,CAAC;IACtC,OAAO,yBAAyB,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import type { RabbitMQChannel, RabbitMQMessage } from "@cargolift-cdi/types";
|
|
2
|
-
|
|
2
|
+
type LoggerLike = {
|
|
3
|
+
getContext: () => any;
|
|
4
|
+
error: (message: any, meta?: any) => any;
|
|
5
|
+
businessError?: (message: any, meta?: any) => any;
|
|
6
|
+
warn?: (message: any, meta?: any) => any;
|
|
7
|
+
};
|
|
3
8
|
/**
|
|
4
9
|
* Publica mensagens com erro na Dead Letter Queue (DLQ) do RabbitMQ e faz ack da mensagem original.
|
|
5
10
|
* @param channel Canal do RabbitMQ
|
|
@@ -8,7 +13,8 @@ import { LoggerContextService } from "@cargolift-cdi/common";
|
|
|
8
13
|
* @param dlqExchange Exchange da DLQ (opcional)
|
|
9
14
|
* @param dlqRoutingKey Routing key da DLQ (opcional)
|
|
10
15
|
*/
|
|
11
|
-
export declare function publishToDlqAndAck(channel: RabbitMQChannel, originalMsg: RabbitMQMessage, logger:
|
|
16
|
+
export declare function publishToDlqAndAck(channel: RabbitMQChannel, originalMsg: RabbitMQMessage, logger: LoggerLike, error: unknown, dlqExchange?: string, dlqRoutingKey?: string, options?: {
|
|
12
17
|
noLoggerError: boolean;
|
|
13
18
|
}): void;
|
|
19
|
+
export {};
|
|
14
20
|
//# sourceMappingURL=rabbitmq-publisher-dlq.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rabbitmq-publisher-dlq.service.d.ts","sourceRoot":"","sources":["../src/rabbitmq-publisher-dlq.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"rabbitmq-publisher-dlq.service.d.ts","sourceRoot":"","sources":["../src/rabbitmq-publisher-dlq.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG7E,KAAK,UAAU,GAAG;IAChB,UAAU,EAAE,MAAM,GAAG,CAAC;IACtB,KAAK,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC;IACzC,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC;IAClD,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC;CAC1C,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,eAAe,EACxB,WAAW,EAAE,eAAe,EAC5B,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,OAAO,EACd,WAAW,SAAc,EACzB,aAAa,SAAmB,EAChC,OAAO,CAAC,EAAE;IAAE,aAAa,EAAE,OAAO,CAAA;CAAE,QAqFrC"}
|
|
@@ -34,7 +34,7 @@ export function publishToDlqAndAck(channel, originalMsg, logger, error, dlqExcha
|
|
|
34
34
|
catch { }
|
|
35
35
|
}
|
|
36
36
|
if (options?.noLoggerError === false) {
|
|
37
|
-
if (error instanceof BusinessError) {
|
|
37
|
+
if (error instanceof BusinessError && logger.businessError) {
|
|
38
38
|
logger.businessError(normalized.message, {
|
|
39
39
|
error: normalized.message,
|
|
40
40
|
name: normalized.name,
|
|
@@ -52,7 +52,7 @@ export function publishToDlqAndAck(channel, originalMsg, logger, error, dlqExcha
|
|
|
52
52
|
const originalHeaders = originalMsg.properties.headers || {};
|
|
53
53
|
const headers = {
|
|
54
54
|
...originalHeaders,
|
|
55
|
-
"x-trace": logger.getContext()
|
|
55
|
+
"x-trace": logger.getContext()?.trace ||
|
|
56
56
|
originalHeaders["x-trace"] ||
|
|
57
57
|
`trace-missing:${process.env.npm_package_name}`,
|
|
58
58
|
"x-error-reason": normalized.message,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rabbitmq-publisher-dlq.service.js","sourceRoot":"","sources":["../src/rabbitmq-publisher-dlq.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"rabbitmq-publisher-dlq.service.js","sourceRoot":"","sources":["../src/rabbitmq-publisher-dlq.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RabbitMQTopologyService
|
|
3
|
+
* Padroniza criação de exchanges, DLX, AE e filas dinâmicas por sistema.
|
|
4
|
+
* Compatível com a topologia usada no middleware-esb.
|
|
5
|
+
*/
|
|
6
|
+
export declare class RabbitMQTopologyService {
|
|
7
|
+
private readonly logger;
|
|
8
|
+
/**
|
|
9
|
+
* Cria exchanges base (inbound/outbound), AE (fanout), DLX (topic), unrouteable queue e exchanges de retry (inbound).
|
|
10
|
+
*/
|
|
11
|
+
setupBaseTopology(): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* Cria filas por sistema e faz binds necessários. Para inbound, cria filas de retry com TTLs.
|
|
14
|
+
*/
|
|
15
|
+
setupQueue(system: string, way: 'inbound' | 'outbound'): Promise<string>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=rabbitmq-topology.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rabbitmq-topology.service.d.ts","sourceRoot":"","sources":["../src/rabbitmq-topology.service.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,qBACa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4C;IAEnE;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAwCxC;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;CAoE/E"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var RabbitMQTopologyService_1;
|
|
8
|
+
import { Injectable, Logger } from '@nestjs/common';
|
|
9
|
+
import { getRabbitConnectionManager } from './rabbitmq-connection.manager.js';
|
|
10
|
+
/**
|
|
11
|
+
* RabbitMQTopologyService
|
|
12
|
+
* Padroniza criação de exchanges, DLX, AE e filas dinâmicas por sistema.
|
|
13
|
+
* Compatível com a topologia usada no middleware-esb.
|
|
14
|
+
*/
|
|
15
|
+
let RabbitMQTopologyService = RabbitMQTopologyService_1 = class RabbitMQTopologyService {
|
|
16
|
+
constructor() {
|
|
17
|
+
this.logger = new Logger(RabbitMQTopologyService_1.name);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Cria exchanges base (inbound/outbound), AE (fanout), DLX (topic), unrouteable queue e exchanges de retry (inbound).
|
|
21
|
+
*/
|
|
22
|
+
async setupBaseTopology() {
|
|
23
|
+
const ch = await getRabbitConnectionManager().createChannel();
|
|
24
|
+
try {
|
|
25
|
+
const inbound = getEnv('RABBITMQ_EXCHANGE_INBOUND') || getEnv('RABBITMQ_INBOUND_EXCHANGE') || 'integration.inbound';
|
|
26
|
+
const outbound = getEnv('RABBITMQ_EXCHANGE_OUTBOUND') || getEnv('RABBITMQ_OUTBOUND_EXCHANGE') || 'integration.outbound';
|
|
27
|
+
const ae = getEnv('RABBITMQ_EXCHANGE_AE') || getEnv('RABBITMQ_AE_EXCHANGE') || 'ae';
|
|
28
|
+
const unroutable = getEnv('RABBITMQ_UNROUTABLE_QUEUE') || 'unroutable';
|
|
29
|
+
const dlx = getEnv('RABBITMQ_DLX') || getEnv('RABBITMQ_DLX_NAME') || 'dlx';
|
|
30
|
+
// AE fanout
|
|
31
|
+
await ch.assertExchange(`${inbound}.${ae}`, 'fanout', { durable: true });
|
|
32
|
+
await ch.assertExchange(`${outbound}.${ae}`, 'fanout', { durable: true });
|
|
33
|
+
// DLX topic
|
|
34
|
+
await ch.assertExchange(`${inbound}.${dlx}`, 'topic', { durable: true });
|
|
35
|
+
await ch.assertExchange(`${outbound}.${dlx}`, 'topic', { durable: true });
|
|
36
|
+
// Exchanges de retry (topic) para inbound
|
|
37
|
+
await ch.assertExchange(`${inbound}.retry.short`, 'topic', { durable: true });
|
|
38
|
+
await ch.assertExchange(`${inbound}.retry.long`, 'topic', { durable: true });
|
|
39
|
+
// Exchanges principais (topic) com AE
|
|
40
|
+
await ch.assertExchange(inbound, 'topic', { durable: true, arguments: { 'alternate-exchange': `${inbound}.${ae}` } });
|
|
41
|
+
await ch.assertExchange(outbound, 'topic', { durable: true, arguments: { 'alternate-exchange': `${outbound}.${ae}` } });
|
|
42
|
+
// Unroutable queues bound to AE
|
|
43
|
+
await ch.assertQueue(`${inbound}.${unroutable}`, { durable: true });
|
|
44
|
+
await ch.bindQueue(`${inbound}.${unroutable}`, `${inbound}.${ae}`, '');
|
|
45
|
+
await ch.assertQueue(`${outbound}.${unroutable}`, { durable: true });
|
|
46
|
+
await ch.bindQueue(`${outbound}.${unroutable}`, `${outbound}.${ae}`, '');
|
|
47
|
+
this.logger.log(`Topology ready => inbound: ${inbound} | outbound: ${outbound} | AE: ${ae} | DLX: ${dlx} | retries: [${inbound}.retry.short, ${inbound}.retry.long] | unroutable: ${unroutable}`);
|
|
48
|
+
}
|
|
49
|
+
finally {
|
|
50
|
+
try {
|
|
51
|
+
await ch.close();
|
|
52
|
+
}
|
|
53
|
+
catch { }
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Cria filas por sistema e faz binds necessários. Para inbound, cria filas de retry com TTLs.
|
|
58
|
+
*/
|
|
59
|
+
async setupQueue(system, way) {
|
|
60
|
+
const ch = await getRabbitConnectionManager().createChannel();
|
|
61
|
+
try {
|
|
62
|
+
const exchange = way === 'inbound'
|
|
63
|
+
? (getEnv('RABBITMQ_EXCHANGE_INBOUND') || getEnv('RABBITMQ_INBOUND_EXCHANGE') || 'integration.inbound')
|
|
64
|
+
: (getEnv('RABBITMQ_EXCHANGE_OUTBOUND') || getEnv('RABBITMQ_OUTBOUND_EXCHANGE') || 'integration.outbound');
|
|
65
|
+
const dlx = getEnv('RABBITMQ_DLX') || getEnv('RABBITMQ_DLX_NAME') || 'dlx';
|
|
66
|
+
const retryShortMs = toInt(getEnv('RABBITMQ_RETRY_POLICY_SHORT_MS'), 120_000);
|
|
67
|
+
const retryLongMs = toInt(getEnv('RABBITMQ_RETRY_POLICY_LONG_MS'), 3_600_000);
|
|
68
|
+
const queueName = `${exchange}.${system}`;
|
|
69
|
+
const routing = `integration.${system}.*`;
|
|
70
|
+
await ch.assertQueue(`${exchange}.${system}.dlq`, { durable: true });
|
|
71
|
+
await ch.assertQueue(queueName, {
|
|
72
|
+
durable: true,
|
|
73
|
+
arguments: {
|
|
74
|
+
'x-dead-letter-exchange': `${exchange}.${dlx}`,
|
|
75
|
+
'x-dead-letter-routing-key': `integration.${system}.dead`,
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
await ch.bindQueue(queueName, exchange, routing);
|
|
79
|
+
await ch.bindQueue(`${exchange}.${system}.dlq`, `${exchange}.${dlx}`, `integration.${system}.#`);
|
|
80
|
+
if (way === 'inbound') {
|
|
81
|
+
const retryShortQueue = `${exchange}.${system}.retry.short`;
|
|
82
|
+
const retryLongQueue = `${exchange}.${system}.retry.long`;
|
|
83
|
+
try {
|
|
84
|
+
await ch.assertQueue(retryShortQueue, {
|
|
85
|
+
durable: true,
|
|
86
|
+
arguments: {
|
|
87
|
+
'x-message-ttl': retryShortMs,
|
|
88
|
+
'x-dead-letter-exchange': exchange,
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
await ch.assertQueue(retryLongQueue, {
|
|
92
|
+
durable: true,
|
|
93
|
+
arguments: {
|
|
94
|
+
'x-message-ttl': retryLongMs,
|
|
95
|
+
'x-dead-letter-exchange': exchange,
|
|
96
|
+
},
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
catch (e) {
|
|
100
|
+
const msg = String(e?.message ?? e ?? '');
|
|
101
|
+
if (/PRECONDITION[_-]FAILED|inequivalent arg/i.test(msg)) {
|
|
102
|
+
// Sinaliza claramente drift de topologia
|
|
103
|
+
throw new Error(`RabbitMQ topology drift: ${msg}. Filas de retry existentes para '${system}' com TTL/args diferentes dos configurados. Alinhe variáveis ou remova filas manualmente.`);
|
|
104
|
+
}
|
|
105
|
+
throw e;
|
|
106
|
+
}
|
|
107
|
+
await ch.bindQueue(retryShortQueue, `${exchange}.retry.short`, routing);
|
|
108
|
+
await ch.bindQueue(retryLongQueue, `${exchange}.retry.long`, routing);
|
|
109
|
+
}
|
|
110
|
+
this.logger.log(`Queue ready: ${queueName} | DLQ: ${exchange}.${system}.dlq | exchange: ${exchange} | bind: ${routing}` +
|
|
111
|
+
(way === 'inbound' ? ` | retries: ${exchange}.${system}.retry.short, ${exchange}.${system}.retry.long` : ''));
|
|
112
|
+
return queueName;
|
|
113
|
+
}
|
|
114
|
+
finally {
|
|
115
|
+
try {
|
|
116
|
+
await ch.close();
|
|
117
|
+
}
|
|
118
|
+
catch { }
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
RabbitMQTopologyService = RabbitMQTopologyService_1 = __decorate([
|
|
123
|
+
Injectable()
|
|
124
|
+
], RabbitMQTopologyService);
|
|
125
|
+
export { RabbitMQTopologyService };
|
|
126
|
+
// Backwards-compatible alias for existing code that uses the older naming convention
|
|
127
|
+
// Compat alias removido: use apenas RabbitMQTopologyService diretamente.
|
|
128
|
+
function getEnv(name) {
|
|
129
|
+
const v = process.env[name];
|
|
130
|
+
return v == null ? undefined : String(v);
|
|
131
|
+
}
|
|
132
|
+
function toInt(v, def) {
|
|
133
|
+
const n = Number(v);
|
|
134
|
+
return Number.isFinite(n) && n > 0 ? Math.floor(n) : def;
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=rabbitmq-topology.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rabbitmq-topology.service.js","sourceRoot":"","sources":["../src/rabbitmq-topology.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rabbitmq.constants.d.ts","sourceRoot":"","sources":["../src/rabbitmq.constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"rabbitmq.constants.d.ts","sourceRoot":"","sources":["../src/rabbitmq.constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAG7D,eAAO,MAAM,gBAAgB,QAAyD,CAAC;AACvF,eAAO,MAAM,qBAAqB,QAAgD,CAAC;AACnF,eAAO,MAAM,0BAA0B,QAAsE,CAAC;AAC9G,eAAO,MAAM,0BAA0B,QAA0D,CAAC;AAElG,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,oBAAoB,QAY5D"}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
+
// Defaults para publicação (alto nível pode sobrescrever)
|
|
1
2
|
export const DEFAULT_EXCHANGE = process.env.RABBITMQ_EXCHANGE || 'integration.inbound';
|
|
2
3
|
export const DEFAULT_EXCHANGE_TYPE = process.env.RABBITMQ_EXCHANGE_TYPE || 'topic';
|
|
3
4
|
export const DEFAULT_ALTERNATE_EXCHANGE = process.env.RABBITMQ_ALTERNATE_EXCHANGE || 'integration.inbound.ae';
|
|
4
5
|
export const DEFAULT_PUBLISH_TIMEOUT_MS = Number(process.env.RABBITMQ_PUBLISH_TIMEOUT_MS || 5000);
|
|
5
6
|
export function assertRabbitEnv(logger) {
|
|
7
|
+
// Compat: aceita RABBITMQ_URI e faz fallback para RABBITMQ_URL
|
|
8
|
+
if (!process.env.RABBITMQ_URL && process.env.RABBITMQ_URI) {
|
|
9
|
+
process.env.RABBITMQ_URL = process.env.RABBITMQ_URI;
|
|
10
|
+
}
|
|
6
11
|
const required = ['RABBITMQ_URL'];
|
|
7
12
|
const missing = required.filter((k) => !process.env[k]);
|
|
8
13
|
if (missing.length) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rabbitmq.constants.js","sourceRoot":"","sources":["../src/rabbitmq.constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,qBAAqB,CAAC;AACvF,MAAM,CAAC,MAAM,qBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,OAAO,CAAC;AACnF,MAAM,CAAC,MAAM,0BAA0B,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,wBAAwB,CAAC;AAC9G,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,IAAI,CAAC,CAAC;AAElG,MAAM,UAAU,eAAe,CAAC,MAA6B;IAC3D,MAAM,QAAQ,GAAG,CAAC,cAAc,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,iDAAiD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClF,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,iBAAiB,EAAE,EAAE,CAAC,CAAC;QAC9F,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"rabbitmq.constants.js","sourceRoot":"","sources":["../src/rabbitmq.constants.ts"],"names":[],"mappings":"AAEA,0DAA0D;AAC1D,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,qBAAqB,CAAC;AACvF,MAAM,CAAC,MAAM,qBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,OAAO,CAAC;AACnF,MAAM,CAAC,MAAM,0BAA0B,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,wBAAwB,CAAC;AAC9G,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,IAAI,CAAC,CAAC;AAElG,MAAM,UAAU,eAAe,CAAC,MAA6B;IAC3D,+DAA+D;IAC/D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IACtD,CAAC;IACD,MAAM,QAAQ,GAAG,CAAC,cAAc,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,iDAAiD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClF,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,iBAAiB,EAAE,EAAE,CAAC,CAAC;QAC9F,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
|