From cdb638097252c6c51ff29730c49ee282f53701b3 Mon Sep 17 00:00:00 2001 From: intech Date: Sun, 5 Jul 2026 06:52:10 +0400 Subject: [PATCH] =?UTF-8?q?docs(events-amqp):=20treatTopologyErrorAsFatal?= =?UTF-8?q?=20=E2=80=94=20option=20row,=20reconnect-failed=20dual=20trigge?= =?UTF-8?q?r,=20drift=20bullet=20+=20API=20regen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Companion: Connectum-Framework/connectum#218 (closes connectum#201) Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_015Sp8jYmRXyvUmsErDuNJvt --- .../events-amqp/functions/AmqpAdapter.md | 2 +- .../types/interfaces/AmqpAdapterOptions.md | 51 ++++++++++++++++++- .../interfaces/AmqpBindingDeclaration.md | 12 ++--- .../types/interfaces/AmqpConsumerOptions.md | 6 +-- .../interfaces/AmqpExchangeDeclaration.md | 12 ++--- .../types/interfaces/AmqpExchangeOptions.md | 6 +-- .../interfaces/AmqpLifecycleCallbacks.md | 20 ++++---- .../types/interfaces/AmqpPublisherOptions.md | 10 ++-- .../types/interfaces/AmqpQueueDeclaration.md | 12 ++--- .../types/interfaces/AmqpQueueOptions.md | 12 ++--- .../types/interfaces/AmqpQueueOverride.md | 8 +-- .../types/interfaces/AmqpRecoveryOptions.md | 12 ++--- .../interfaces/AmqpSerializationOptions.md | 8 +-- .../types/interfaces/AmqpTopology.md | 8 +-- .../types/type-aliases/AmqpLifecycleEvent.md | 6 ++- .../types/type-aliases/AmqpTopologyMode.md | 2 +- .../types/variables/AmqpTopologyMode.md | 2 +- en/packages/events-amqp.md | 4 +- 18 files changed, 123 insertions(+), 70 deletions(-) diff --git a/en/api/@connectum/events-amqp/functions/AmqpAdapter.md b/en/api/@connectum/events-amqp/functions/AmqpAdapter.md index 4b084c0..96ca05a 100644 --- a/en/api/@connectum/events-amqp/functions/AmqpAdapter.md +++ b/en/api/@connectum/events-amqp/functions/AmqpAdapter.md @@ -4,7 +4,7 @@ > **AmqpAdapter**(`options`): `EventAdapter` -Defined in: [packages/events-amqp/src/AmqpAdapter.ts:336](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/AmqpAdapter.ts#L336) +Defined in: [packages/events-amqp/src/AmqpAdapter.ts:401](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/AmqpAdapter.ts#L401) Create an AMQP/RabbitMQ adapter for @connectum/events. diff --git a/en/api/@connectum/events-amqp/types/interfaces/AmqpAdapterOptions.md b/en/api/@connectum/events-amqp/types/interfaces/AmqpAdapterOptions.md index 9b55a5e..6c88313 100644 --- a/en/api/@connectum/events-amqp/types/interfaces/AmqpAdapterOptions.md +++ b/en/api/@connectum/events-amqp/types/interfaces/AmqpAdapterOptions.md @@ -103,7 +103,7 @@ false > `readonly` `optional` **lifecycle?**: [`AmqpLifecycleCallbacks`](AmqpLifecycleCallbacks.md) -Defined in: [packages/events-amqp/src/types.ts:158](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L158) +Defined in: [packages/events-amqp/src/types.ts:196](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L196) Connection lifecycle callbacks. Connection errors are surfaced here — not just logged. @@ -124,7 +124,7 @@ Publisher options. > `readonly` `optional` **publishTimeoutMs?**: `number` -Defined in: [packages/events-amqp/src/types.ts:168](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L168) +Defined in: [packages/events-amqp/src/types.ts:206](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L206) Per-publish broker-outcome deadline in milliseconds. A publish whose ack/nack/return/connection-loss outcome does not arrive in time @@ -259,6 +259,53 @@ How topology is established: *** +### treatTopologyErrorAsFatal? + +> `readonly` `optional` **treatTopologyErrorAsFatal?**: `boolean` + +Defined in: [packages/events-amqp/src/types.ts:190](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L190) + +Treat DETERMINISTIC topology drift during steady-state recovery as +fatal: stop the reconnect cycle instead of retrying forever against a +misconfigured broker. + +Under the default `maxRetries: Infinity`, a queue/exchange deleted or +redeclared incompatibly while the adapter is reconnecting makes every +recovery attempt fail deterministically — the adapter would retry +forever, reporting `setup-failed` on each attempt but never giving up. +With this flag the adapter stops the cycle on the first such failure +and reports the terminal `reconnect-failed` lifecycle event (after the +`setup-failed` event for the same attempt); subsequent publishes fail +fast with `AmqpConnectionError`. + +The gate is the AMQP reply code of the failure cause — `404` +(NOT_FOUND) or `406` (PRECONDITION_FAILED) — NOT the error class: +transient causes wrapped into `AmqpTopologyError` during a setup pass +(broker restarting `320`, internal error `541`, resource locked `405`, +a mid-setup connection drop) stay in normal recovery. One known +transient 404 is excluded explicitly: a RabbitMQ cluster classic queue +whose home node is down ("... down or inaccessible") stays in recovery. + +After the fatal stop the adapter is fully torn down: consumers are dead +(subscription records are cleared, mirroring `disconnect()`), publishes +fail fast, and a later `connect()` starts from a clean slate — +re-subscribe explicitly. + +Scope: steady-state recovery only. Boot-time drift is the startup +probe's job — see [failFastOnInitialSetupError](#failfastoninitialsetuperror). Setting both +covers boot and steady state; the remaining gap — broker unreachable at +`connect()` time with drift surfacing before the first successful +connect — is covered by neither flag until the bounded initial phase +lands ([https://github.com/Connectum-Framework/connectum/issues/198](https://github.com/Connectum-Framework/connectum/issues/198)). + +#### Default + +```ts +false +``` + +*** + ### url > `readonly` **url**: `string` diff --git a/en/api/@connectum/events-amqp/types/interfaces/AmqpBindingDeclaration.md b/en/api/@connectum/events-amqp/types/interfaces/AmqpBindingDeclaration.md index bd778d6..be9c125 100644 --- a/en/api/@connectum/events-amqp/types/interfaces/AmqpBindingDeclaration.md +++ b/en/api/@connectum/events-amqp/types/interfaces/AmqpBindingDeclaration.md @@ -2,7 +2,7 @@ # Interface: AmqpBindingDeclaration -Defined in: [packages/events-amqp/src/types.ts:228](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L228) +Defined in: [packages/events-amqp/src/types.ts:266](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L266) ## Properties @@ -10,7 +10,7 @@ Defined in: [packages/events-amqp/src/types.ts:228](https://github.com/Connectum > `readonly` `optional` **arguments?**: `Record`\<`string`, `unknown`\> -Defined in: [packages/events-amqp/src/types.ts:236](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L236) +Defined in: [packages/events-amqp/src/types.ts:274](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L274) *** @@ -18,7 +18,7 @@ Defined in: [packages/events-amqp/src/types.ts:236](https://github.com/Connectum > `readonly` `optional` **exchange?**: `string` -Defined in: [packages/events-amqp/src/types.ts:232](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L232) +Defined in: [packages/events-amqp/src/types.ts:270](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L270) Destination exchange name (exchange-to-exchange binding). @@ -28,7 +28,7 @@ Destination exchange name (exchange-to-exchange binding). > `readonly` `optional` **queue?**: `string` -Defined in: [packages/events-amqp/src/types.ts:230](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L230) +Defined in: [packages/events-amqp/src/types.ts:268](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L268) Destination queue name (queue binding) — mutually exclusive with `exchange`. @@ -38,7 +38,7 @@ Destination queue name (queue binding) — mutually exclusive with `exchange`. > `readonly` **routingKey**: `string` -Defined in: [packages/events-amqp/src/types.ts:235](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L235) +Defined in: [packages/events-amqp/src/types.ts:273](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L273) *** @@ -46,6 +46,6 @@ Defined in: [packages/events-amqp/src/types.ts:235](https://github.com/Connectum > `readonly` **source**: `string` -Defined in: [packages/events-amqp/src/types.ts:234](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L234) +Defined in: [packages/events-amqp/src/types.ts:272](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L272) Source exchange. diff --git a/en/api/@connectum/events-amqp/types/interfaces/AmqpConsumerOptions.md b/en/api/@connectum/events-amqp/types/interfaces/AmqpConsumerOptions.md index 3b24608..cd54c23 100644 --- a/en/api/@connectum/events-amqp/types/interfaces/AmqpConsumerOptions.md +++ b/en/api/@connectum/events-amqp/types/interfaces/AmqpConsumerOptions.md @@ -2,7 +2,7 @@ # Interface: AmqpConsumerOptions -Defined in: [packages/events-amqp/src/types.ts:436](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L436) +Defined in: [packages/events-amqp/src/types.ts:478](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L478) Consumer options. @@ -12,7 +12,7 @@ Consumer options. > `readonly` `optional` **exclusive?**: `boolean` -Defined in: [packages/events-amqp/src/types.ts:450](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L450) +Defined in: [packages/events-amqp/src/types.ts:492](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L492) Whether the consumer is exclusive to this connection. @@ -28,7 +28,7 @@ false > `readonly` `optional` **prefetch?**: `number` -Defined in: [packages/events-amqp/src/types.ts:443](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L443) +Defined in: [packages/events-amqp/src/types.ts:485](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L485) Prefetch count (QoS) — how many unacknowledged messages a consumer can have at a time. diff --git a/en/api/@connectum/events-amqp/types/interfaces/AmqpExchangeDeclaration.md b/en/api/@connectum/events-amqp/types/interfaces/AmqpExchangeDeclaration.md index a21c090..3e42c26 100644 --- a/en/api/@connectum/events-amqp/types/interfaces/AmqpExchangeDeclaration.md +++ b/en/api/@connectum/events-amqp/types/interfaces/AmqpExchangeDeclaration.md @@ -2,7 +2,7 @@ # Interface: AmqpExchangeDeclaration -Defined in: [packages/events-amqp/src/types.ts:210](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L210) +Defined in: [packages/events-amqp/src/types.ts:248](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L248) ## Properties @@ -10,7 +10,7 @@ Defined in: [packages/events-amqp/src/types.ts:210](https://github.com/Connectum > `readonly` `optional` **arguments?**: `Record`\<`string`, `unknown`\> -Defined in: [packages/events-amqp/src/types.ts:216](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L216) +Defined in: [packages/events-amqp/src/types.ts:254](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L254) Raw AMQP arguments passthrough. @@ -20,7 +20,7 @@ Raw AMQP arguments passthrough. > `readonly` `optional` **autoDelete?**: `boolean` -Defined in: [packages/events-amqp/src/types.ts:214](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L214) +Defined in: [packages/events-amqp/src/types.ts:252](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L252) *** @@ -28,7 +28,7 @@ Defined in: [packages/events-amqp/src/types.ts:214](https://github.com/Connectum > `readonly` `optional` **durable?**: `boolean` -Defined in: [packages/events-amqp/src/types.ts:213](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L213) +Defined in: [packages/events-amqp/src/types.ts:251](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L251) *** @@ -36,7 +36,7 @@ Defined in: [packages/events-amqp/src/types.ts:213](https://github.com/Connectum > `readonly` **name**: `string` -Defined in: [packages/events-amqp/src/types.ts:211](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L211) +Defined in: [packages/events-amqp/src/types.ts:249](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L249) *** @@ -44,4 +44,4 @@ Defined in: [packages/events-amqp/src/types.ts:211](https://github.com/Connectum > `readonly` **type**: `"headers"` \| `"topic"` \| `"direct"` \| `"fanout"` -Defined in: [packages/events-amqp/src/types.ts:212](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L212) +Defined in: [packages/events-amqp/src/types.ts:250](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L250) diff --git a/en/api/@connectum/events-amqp/types/interfaces/AmqpExchangeOptions.md b/en/api/@connectum/events-amqp/types/interfaces/AmqpExchangeOptions.md index 8900ce6..833422f 100644 --- a/en/api/@connectum/events-amqp/types/interfaces/AmqpExchangeOptions.md +++ b/en/api/@connectum/events-amqp/types/interfaces/AmqpExchangeOptions.md @@ -2,7 +2,7 @@ # Interface: AmqpExchangeOptions -Defined in: [packages/events-amqp/src/types.ts:385](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L385) +Defined in: [packages/events-amqp/src/types.ts:427](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L427) Exchange assertion options. @@ -12,7 +12,7 @@ Exchange assertion options. > `readonly` `optional` **autoDelete?**: `boolean` -Defined in: [packages/events-amqp/src/types.ts:398](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L398) +Defined in: [packages/events-amqp/src/types.ts:440](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L440) Whether the exchange is deleted when the last queue unbinds. @@ -28,7 +28,7 @@ false > `readonly` `optional` **durable?**: `boolean` -Defined in: [packages/events-amqp/src/types.ts:391](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L391) +Defined in: [packages/events-amqp/src/types.ts:433](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L433) Whether the exchange should survive broker restarts. diff --git a/en/api/@connectum/events-amqp/types/interfaces/AmqpLifecycleCallbacks.md b/en/api/@connectum/events-amqp/types/interfaces/AmqpLifecycleCallbacks.md index 304c554..89f0302 100644 --- a/en/api/@connectum/events-amqp/types/interfaces/AmqpLifecycleCallbacks.md +++ b/en/api/@connectum/events-amqp/types/interfaces/AmqpLifecycleCallbacks.md @@ -2,7 +2,7 @@ # Interface: AmqpLifecycleCallbacks -Defined in: [packages/events-amqp/src/types.ts:331](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L331) +Defined in: [packages/events-amqp/src/types.ts:371](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L371) Connection lifecycle callbacks. @@ -16,7 +16,7 @@ deprecated since 1.3.0 (removal not before 2.0). > `readonly` `optional` **onConnected?**: () => `void` -Defined in: [packages/events-amqp/src/types.ts:351](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L351) +Defined in: [packages/events-amqp/src/types.ts:391](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L391) #### Returns @@ -32,7 +32,7 @@ Since 1.3.0 — use [onLifecycle](#onlifecycle) (`type: "connected"`). Kept unti > `readonly` `optional` **onDisconnected?**: (`cause`) => `void` -Defined in: [packages/events-amqp/src/types.ts:353](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L353) +Defined in: [packages/events-amqp/src/types.ts:393](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L393) #### Parameters @@ -54,7 +54,7 @@ Since 1.3.0 — use [onLifecycle](#onlifecycle) (`type: "disconnected"`). Kept u > `readonly` `optional` **onLifecycle?**: (`event`) => `void` -Defined in: [packages/events-amqp/src/types.ts:349](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L349) +Defined in: [packages/events-amqp/src/types.ts:389](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L389) Single discriminated-union lifecycle callback — the preferred surface. Receives every [AmqpLifecycleEvent](../type-aliases/AmqpLifecycleEvent.md), including `blocked`/`unblocked`, @@ -88,7 +88,7 @@ deterministic misconfiguration at boot. > `readonly` `optional` **onReconnectFailed?**: (`cause`) => `void` -Defined in: [packages/events-amqp/src/types.ts:364](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L364) +Defined in: [packages/events-amqp/src/types.ts:406](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L406) #### Parameters @@ -110,12 +110,14 @@ Since 1.3.0 — use [onLifecycle](#onlifecycle) (`type: "reconnect-failed"`). Ke > `readonly` `optional` **onReconnecting?**: (`info`) => `void` -Defined in: [packages/events-amqp/src/types.ts:362](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L362) +Defined in: [packages/events-amqp/src/types.ts:404](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L404) A reconnect attempt has been scheduled. Fires exactly ONCE per scheduled retry (amqplib's `reconnect-scheduled`). A failed attempt that also emits -`connect-failed` does NOT double-invoke this; the terminal, retries-exhausted -case is reported via [onReconnectFailed](#onreconnectfailed), not here. +`connect-failed` does NOT double-invoke this; the terminal case (retry +budget exhausted, or a fatal topology stop under +`treatTopologyErrorAsFatal`) is reported via [onReconnectFailed](#onreconnectfailed), +not here. #### Parameters @@ -147,7 +149,7 @@ Since 1.3.0 — use [onLifecycle](#onlifecycle) (`type: "reconnecting"`). Kept u > `readonly` `optional` **onSetupFailed?**: (`error`, `ctx`) => `void` -Defined in: [packages/events-amqp/src/types.ts:379](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L379) +Defined in: [packages/events-amqp/src/types.ts:421](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L421) A setup/topology failure occurred while (re)applying the declarative topology — on the initial connect's validation probe (`ctx.initial: true`, diff --git a/en/api/@connectum/events-amqp/types/interfaces/AmqpPublisherOptions.md b/en/api/@connectum/events-amqp/types/interfaces/AmqpPublisherOptions.md index f8d7751..35e465d 100644 --- a/en/api/@connectum/events-amqp/types/interfaces/AmqpPublisherOptions.md +++ b/en/api/@connectum/events-amqp/types/interfaces/AmqpPublisherOptions.md @@ -2,7 +2,7 @@ # Interface: AmqpPublisherOptions -Defined in: [packages/events-amqp/src/types.ts:456](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L456) +Defined in: [packages/events-amqp/src/types.ts:498](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L498) Publisher options. @@ -12,7 +12,7 @@ Publisher options. > `readonly` `optional` **correlationHeader?**: `boolean` -Defined in: [packages/events-amqp/src/types.ts:485](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L485) +Defined in: [packages/events-amqp/src/types.ts:527](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L527) How `basic.return` frames are correlated to publishes when `mandatory: true`. The return frame carries no deliveryTag, so: @@ -36,7 +36,7 @@ true > `readonly` `optional` **externalContract?**: `boolean` -Defined in: [packages/events-amqp/src/types.ts:514](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L514) +Defined in: [packages/events-amqp/src/types.ts:556](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L556) Publish against an EXTERNAL (non-EventBus) message contract: suppress the EventBus envelope so the wire frame carries ONLY contract-specified @@ -74,7 +74,7 @@ false > `readonly` `optional` **mandatory?**: `boolean` -Defined in: [packages/events-amqp/src/types.ts:470](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L470) +Defined in: [packages/events-amqp/src/types.ts:512](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L512) Whether the message should be returned if it cannot be routed. Unroutable messages reject the publish with `AmqpUnroutableError`. @@ -91,7 +91,7 @@ false > `readonly` `optional` **persistent?**: `boolean` -Defined in: [packages/events-amqp/src/types.ts:462](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L462) +Defined in: [packages/events-amqp/src/types.ts:504](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L504) Whether messages should be persisted to disk (deliveryMode=2). diff --git a/en/api/@connectum/events-amqp/types/interfaces/AmqpQueueDeclaration.md b/en/api/@connectum/events-amqp/types/interfaces/AmqpQueueDeclaration.md index 64810f3..038b389 100644 --- a/en/api/@connectum/events-amqp/types/interfaces/AmqpQueueDeclaration.md +++ b/en/api/@connectum/events-amqp/types/interfaces/AmqpQueueDeclaration.md @@ -2,7 +2,7 @@ # Interface: AmqpQueueDeclaration -Defined in: [packages/events-amqp/src/types.ts:219](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L219) +Defined in: [packages/events-amqp/src/types.ts:257](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L257) ## Properties @@ -10,7 +10,7 @@ Defined in: [packages/events-amqp/src/types.ts:219](https://github.com/Connectum > `readonly` `optional` **arguments?**: `Record`\<`string`, `unknown`\> -Defined in: [packages/events-amqp/src/types.ts:225](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L225) +Defined in: [packages/events-amqp/src/types.ts:263](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L263) Raw AMQP arguments passthrough (e.g. x-dead-letter-exchange). @@ -20,7 +20,7 @@ Raw AMQP arguments passthrough (e.g. x-dead-letter-exchange). > `readonly` `optional` **autoDelete?**: `boolean` -Defined in: [packages/events-amqp/src/types.ts:222](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L222) +Defined in: [packages/events-amqp/src/types.ts:260](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L260) *** @@ -28,7 +28,7 @@ Defined in: [packages/events-amqp/src/types.ts:222](https://github.com/Connectum > `readonly` `optional` **durable?**: `boolean` -Defined in: [packages/events-amqp/src/types.ts:221](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L221) +Defined in: [packages/events-amqp/src/types.ts:259](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L259) *** @@ -36,7 +36,7 @@ Defined in: [packages/events-amqp/src/types.ts:221](https://github.com/Connectum > `readonly` `optional` **exclusive?**: `boolean` -Defined in: [packages/events-amqp/src/types.ts:223](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L223) +Defined in: [packages/events-amqp/src/types.ts:261](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L261) *** @@ -44,4 +44,4 @@ Defined in: [packages/events-amqp/src/types.ts:223](https://github.com/Connectum > `readonly` **name**: `string` -Defined in: [packages/events-amqp/src/types.ts:220](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L220) +Defined in: [packages/events-amqp/src/types.ts:258](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L258) diff --git a/en/api/@connectum/events-amqp/types/interfaces/AmqpQueueOptions.md b/en/api/@connectum/events-amqp/types/interfaces/AmqpQueueOptions.md index 144919e..181fd2a 100644 --- a/en/api/@connectum/events-amqp/types/interfaces/AmqpQueueOptions.md +++ b/en/api/@connectum/events-amqp/types/interfaces/AmqpQueueOptions.md @@ -2,7 +2,7 @@ # Interface: AmqpQueueOptions -Defined in: [packages/events-amqp/src/types.ts:404](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L404) +Defined in: [packages/events-amqp/src/types.ts:446](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L446) Queue assertion options. @@ -12,7 +12,7 @@ Queue assertion options. > `readonly` `optional` **deadLetterExchange?**: `string` -Defined in: [packages/events-amqp/src/types.ts:425](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L425) +Defined in: [packages/events-amqp/src/types.ts:467](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L467) Dead letter exchange name for rejected messages. @@ -22,7 +22,7 @@ Dead letter exchange name for rejected messages. > `readonly` `optional` **deadLetterRoutingKey?**: `string` -Defined in: [packages/events-amqp/src/types.ts:430](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L430) +Defined in: [packages/events-amqp/src/types.ts:472](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L472) Dead letter routing key for rejected messages. @@ -32,7 +32,7 @@ Dead letter routing key for rejected messages. > `readonly` `optional` **durable?**: `boolean` -Defined in: [packages/events-amqp/src/types.ts:410](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L410) +Defined in: [packages/events-amqp/src/types.ts:452](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L452) Whether the queue should survive broker restarts. @@ -48,7 +48,7 @@ true > `readonly` `optional` **maxLength?**: `number` -Defined in: [packages/events-amqp/src/types.ts:420](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L420) +Defined in: [packages/events-amqp/src/types.ts:462](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L462) Maximum number of messages in the queue. @@ -58,6 +58,6 @@ Maximum number of messages in the queue. > `readonly` `optional` **messageTtl?**: `number` -Defined in: [packages/events-amqp/src/types.ts:415](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L415) +Defined in: [packages/events-amqp/src/types.ts:457](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L457) Per-message TTL in milliseconds. diff --git a/en/api/@connectum/events-amqp/types/interfaces/AmqpQueueOverride.md b/en/api/@connectum/events-amqp/types/interfaces/AmqpQueueOverride.md index 22ceb88..3e1b143 100644 --- a/en/api/@connectum/events-amqp/types/interfaces/AmqpQueueOverride.md +++ b/en/api/@connectum/events-amqp/types/interfaces/AmqpQueueOverride.md @@ -2,7 +2,7 @@ # Interface: AmqpQueueOverride -Defined in: [packages/events-amqp/src/types.ts:240](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L240) +Defined in: [packages/events-amqp/src/types.ts:278](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L278) External queue override for a consumer group. @@ -12,7 +12,7 @@ External queue override for a consumer group. > `readonly` `optional` **arguments?**: `Record`\<`string`, `unknown`\> -Defined in: [packages/events-amqp/src/types.ts:244](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L244) +Defined in: [packages/events-amqp/src/types.ts:282](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L282) Raw AMQP arguments used when asserting the queue (assert mode only). @@ -22,7 +22,7 @@ Raw AMQP arguments used when asserting the queue (assert mode only). > `readonly` `optional` **durable?**: `boolean` -Defined in: [packages/events-amqp/src/types.ts:246](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L246) +Defined in: [packages/events-amqp/src/types.ts:284](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L284) #### Default @@ -36,6 +36,6 @@ true > `readonly` **queue**: `string` -Defined in: [packages/events-amqp/src/types.ts:242](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L242) +Defined in: [packages/events-amqp/src/types.ts:280](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L280) Externally-defined queue name to consume from. diff --git a/en/api/@connectum/events-amqp/types/interfaces/AmqpRecoveryOptions.md b/en/api/@connectum/events-amqp/types/interfaces/AmqpRecoveryOptions.md index bbe9519..1f2a94e 100644 --- a/en/api/@connectum/events-amqp/types/interfaces/AmqpRecoveryOptions.md +++ b/en/api/@connectum/events-amqp/types/interfaces/AmqpRecoveryOptions.md @@ -2,7 +2,7 @@ # Interface: AmqpRecoveryOptions -Defined in: [packages/events-amqp/src/types.ts:273](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L273) +Defined in: [packages/events-amqp/src/types.ts:311](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L311) Recovery knobs (passed through to amqplib's opt-in recovery). @@ -33,7 +33,7 @@ pluggable backoff hook, are tracked as future options — see > `readonly` `optional` **factor?**: `number` -Defined in: [packages/events-amqp/src/types.ts:279](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L279) +Defined in: [packages/events-amqp/src/types.ts:317](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L317) #### Default @@ -47,7 +47,7 @@ Defined in: [packages/events-amqp/src/types.ts:279](https://github.com/Connectum > `readonly` `optional` **initialDelay?**: `number` -Defined in: [packages/events-amqp/src/types.ts:275](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L275) +Defined in: [packages/events-amqp/src/types.ts:313](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L313) #### Default @@ -61,7 +61,7 @@ Defined in: [packages/events-amqp/src/types.ts:275](https://github.com/Connectum > `readonly` `optional` **jitter?**: `number` -Defined in: [packages/events-amqp/src/types.ts:281](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L281) +Defined in: [packages/events-amqp/src/types.ts:319](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L319) Symmetric jitter factor (0..1): the delay is uniform in `[base × (1 − jitter), base × (1 + jitter)]`. @@ -77,7 +77,7 @@ Symmetric jitter factor (0..1): the delay is uniform in `[base × (1 − jitter) > `readonly` `optional` **maxDelay?**: `number` -Defined in: [packages/events-amqp/src/types.ts:277](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L277) +Defined in: [packages/events-amqp/src/types.ts:315](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L315) Base delay cap in ms; jitter is applied on top of the capped base, so the effective wait can exceed it. @@ -93,7 +93,7 @@ Base delay cap in ms; jitter is applied on top of the capped base, so the effect > `readonly` `optional` **maxRetries?**: `number` -Defined in: [packages/events-amqp/src/types.ts:283](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L283) +Defined in: [packages/events-amqp/src/types.ts:321](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L321) Attempts per series (initial connect and each recovery series); resets on success. diff --git a/en/api/@connectum/events-amqp/types/interfaces/AmqpSerializationOptions.md b/en/api/@connectum/events-amqp/types/interfaces/AmqpSerializationOptions.md index 70de1cc..0e06619 100644 --- a/en/api/@connectum/events-amqp/types/interfaces/AmqpSerializationOptions.md +++ b/en/api/@connectum/events-amqp/types/interfaces/AmqpSerializationOptions.md @@ -2,7 +2,7 @@ # Interface: AmqpSerializationOptions -Defined in: [packages/events-amqp/src/types.ts:181](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L181) +Defined in: [packages/events-amqp/src/types.ts:219](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L219) Serialization metadata and optional wire transcoding. @@ -12,7 +12,7 @@ Serialization metadata and optional wire transcoding. > `readonly` `optional` **contentType?**: `string` -Defined in: [packages/events-amqp/src/types.ts:187](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L187) +Defined in: [packages/events-amqp/src/types.ts:225](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L225) AMQP `contentType` message property. @@ -28,7 +28,7 @@ AMQP `contentType` message property. > `readonly` `optional` **decode?**: (`content`) => `Uint8Array` -Defined in: [packages/events-amqp/src/types.ts:200](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L200) +Defined in: [packages/events-amqp/src/types.ts:238](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L238) Transform the incoming wire body before it reaches the event handler. Failures nack the message (requeue per consumer policy). @@ -49,7 +49,7 @@ Failures nack the message (requeue per consumer policy). > `readonly` `optional` **encode?**: (`payload`) => `Uint8Array` -Defined in: [packages/events-amqp/src/types.ts:194](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L194) +Defined in: [packages/events-amqp/src/types.ts:232](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L232) Transform the outgoing wire body. Receives the payload bytes the EventBus (or the application) produced. Failures reject the publish diff --git a/en/api/@connectum/events-amqp/types/interfaces/AmqpTopology.md b/en/api/@connectum/events-amqp/types/interfaces/AmqpTopology.md index 8a1679d..e9f4705 100644 --- a/en/api/@connectum/events-amqp/types/interfaces/AmqpTopology.md +++ b/en/api/@connectum/events-amqp/types/interfaces/AmqpTopology.md @@ -2,7 +2,7 @@ # Interface: AmqpTopology -Defined in: [packages/events-amqp/src/types.ts:204](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L204) +Defined in: [packages/events-amqp/src/types.ts:242](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L242) Declarative topology. @@ -12,7 +12,7 @@ Declarative topology. > `readonly` `optional` **bindings?**: readonly [`AmqpBindingDeclaration`](AmqpBindingDeclaration.md)[] -Defined in: [packages/events-amqp/src/types.ts:207](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L207) +Defined in: [packages/events-amqp/src/types.ts:245](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L245) *** @@ -20,7 +20,7 @@ Defined in: [packages/events-amqp/src/types.ts:207](https://github.com/Connectum > `readonly` `optional` **exchanges?**: readonly [`AmqpExchangeDeclaration`](AmqpExchangeDeclaration.md)[] -Defined in: [packages/events-amqp/src/types.ts:205](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L205) +Defined in: [packages/events-amqp/src/types.ts:243](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L243) *** @@ -28,4 +28,4 @@ Defined in: [packages/events-amqp/src/types.ts:205](https://github.com/Connectum > `readonly` `optional` **queues?**: readonly [`AmqpQueueDeclaration`](AmqpQueueDeclaration.md)[] -Defined in: [packages/events-amqp/src/types.ts:206](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L206) +Defined in: [packages/events-amqp/src/types.ts:244](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L244) diff --git a/en/api/@connectum/events-amqp/types/type-aliases/AmqpLifecycleEvent.md b/en/api/@connectum/events-amqp/types/type-aliases/AmqpLifecycleEvent.md index a84de03..6ff13a6 100644 --- a/en/api/@connectum/events-amqp/types/type-aliases/AmqpLifecycleEvent.md +++ b/en/api/@connectum/events-amqp/types/type-aliases/AmqpLifecycleEvent.md @@ -4,7 +4,7 @@ > **AmqpLifecycleEvent** = \{ `reconnected`: `boolean`; `type`: `"connected"`; \} \| \{ `error`: `Error`; `type`: `"disconnected"`; \} \| \{ `attempt`: `number`; `delay`: `number`; `error`: `Error`; `type`: `"reconnecting"`; \} \| \{ `error`: `Error`; `type`: `"reconnect-failed"`; \} \| \{ `attempt`: `number`; `error`: `Error`; `initial`: `boolean`; `type`: `"setup-failed"`; \} \| \{ `reason`: `string`; `type`: `"blocked"`; \} \| \{ `type`: `"unblocked"`; \} -Defined in: [packages/events-amqp/src/types.ts:315](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L315) +Defined in: [packages/events-amqp/src/types.ts:355](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L355) Discriminated connection lifecycle event, delivered to [AmqpLifecycleCallbacks.onLifecycle](../interfaces/AmqpLifecycleCallbacks.md#onlifecycle). @@ -15,7 +15,9 @@ Exactly-once guarantees (pinned by integration tests): - `disconnected` fires once per connection loss (a socket-level cut no longer double-fires via the raw `error` event — fixed in 1.3.0). - `reconnecting` fires once per scheduled retry AFTER the connection has been - established once; the terminal retries-exhausted case is `reconnect-failed`. + established once. `reconnect-failed` is terminal and fires for either of + its two triggers: the retry budget is exhausted (`maxRetries`), or the + fatal topology policy stopped the cycle (`treatTopologyErrorAsFatal`). - `setup-failed` reports a topology/setup failure on the initial validation probe (`initial: true`, `attempt: 0`) or a reconnect re-assert (`initial: false`, `attempt` >= 1). diff --git a/en/api/@connectum/events-amqp/types/type-aliases/AmqpTopologyMode.md b/en/api/@connectum/events-amqp/types/type-aliases/AmqpTopologyMode.md index a1d7854..53a6aff 100644 --- a/en/api/@connectum/events-amqp/types/type-aliases/AmqpTopologyMode.md +++ b/en/api/@connectum/events-amqp/types/type-aliases/AmqpTopologyMode.md @@ -4,6 +4,6 @@ > **AmqpTopologyMode** = *typeof* [`AmqpTopologyMode`](../variables/AmqpTopologyMode.md)\[keyof *typeof* [`AmqpTopologyMode`](../variables/AmqpTopologyMode.md)\] -Defined in: [packages/events-amqp/src/types.ts:172](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L172) +Defined in: [packages/events-amqp/src/types.ts:210](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L210) Topology establishment mode. diff --git a/en/api/@connectum/events-amqp/types/variables/AmqpTopologyMode.md b/en/api/@connectum/events-amqp/types/variables/AmqpTopologyMode.md index dabe6fb..7b6c8f8 100644 --- a/en/api/@connectum/events-amqp/types/variables/AmqpTopologyMode.md +++ b/en/api/@connectum/events-amqp/types/variables/AmqpTopologyMode.md @@ -4,7 +4,7 @@ > `const` **AmqpTopologyMode**: `object` -Defined in: [packages/events-amqp/src/types.ts:172](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L172) +Defined in: [packages/events-amqp/src/types.ts:210](https://github.com/Connectum-Framework/connectum/blob/main/packages/events-amqp/src/types.ts#L210) Topology establishment mode. diff --git a/en/packages/events-amqp.md b/en/packages/events-amqp.md index 66c7e3d..449cb1c 100644 --- a/en/packages/events-amqp.md +++ b/en/packages/events-amqp.md @@ -84,6 +84,7 @@ Pass the result to `createEventBus({ adapter })`. | `queueOverrides` | `Record` | `undefined` | Map a consumer group to an externally named queue | | `recovery` | `boolean \| AmqpRecoveryOptions` | `true` | Automatic connection recovery (amqplib native); `false` disables | | `failFastOnInitialSetupError` | `boolean` | `false` | Reject `connect()` with the typed `AmqpTopologyError` on a deterministic setup/topology error at the **first** connect, instead of hanging in infinite recovery. Transient broker-unreachable still blocks-and-retries. Available since 1.2.0 | +| `treatTopologyErrorAsFatal` | `boolean` | `false` | Stop the reconnect cycle on **deterministic** topology drift during steady-state recovery (AMQP reply code `404`/`406` on the cause) instead of retrying forever; reports terminal `reconnect-failed` after `setup-failed` and tears down fully. Transient causes stay in recovery. Available since 1.3.0 | | `lifecycle` | `AmqpLifecycleCallbacks` | `undefined` | Connection lifecycle callbacks | | `publishTimeoutMs` | `number` | `30000` | Per-publish broker-outcome deadline in milliseconds | @@ -209,7 +210,7 @@ lifecycle: { | `connected` | `reconnected: boolean` | Connection established -- exactly once per (re)connect; `false` for the initial connect, `true` after a recovery | | `disconnected` | `error: Error` | Connection lost -- exactly once per drop | | `reconnecting` | `attempt, delay, error` | A reconnect attempt is scheduled (exactly once per scheduled retry) | -| `reconnect-failed` | `error: Error` | Recovery exhausted (`maxRetries` reached) | +| `reconnect-failed` | `error: Error` | Terminal: retry budget exhausted (`maxRetries`), or the cycle was stopped by the fatal topology policy (`treatTopologyErrorAsFatal`) | | `setup-failed` | `initial, attempt, error` | Topology/setup failed on the initial validation probe (`initial: true`) or a reconnect re-assert (`initial: false`) | | `blocked` | `reason: string` | Broker flow control (`connection.blocked`, e.g. a memory/disk alarm). Union-only -- no flat equivalent | | `unblocked` | -- | Broker resumed after flow control. Union-only -- no flat equivalent | @@ -431,6 +432,7 @@ Connection behavior: - **With recovery enabled**, `connect()` retries with backoff until the broker becomes reachable -- convenient for `docker-compose` startup ordering where the broker may not be up yet. Under the default `maxRetries: Infinity`, `connect()` blocks rather than failing fast; set `failFastOnInitialSetupError: true` to reject `connect()` with a typed `AmqpTopologyError` on a **permanent** setup/topology error at startup while still recovering from transient broker outages. - **`maxRetries` scope.** The retry budget governs **both** the initial connect and every later recovery series, with the counter reset on each success. A finite value chosen only to bound startup therefore also caps steady-state recovery: a transient blip of that many consecutive failures in any single series permanently stops recovery. - **Reconnect delay.** The effective delay is symmetric jitter around the exponential base -- uniform in `[base × (1 − jitter), base × (1 + jitter)]` with `base = min(maxDelay, initialDelay × factor^(attempt − 1))`. The cap applies to the base **before** jitter, so the wait can overshoot `maxDelay` (~20% at the default `jitter: 0.2`, up to ~2x at `jitter: 1`). +- **Topology drift during recovery.** Under the default policy, a queue/exchange deleted or incompatibly redeclared while the adapter reconnects makes every recovery attempt fail deterministically -- the cycle retries forever, reporting `setup-failed` per attempt (and heals if the topology is restored). Set `treatTopologyErrorAsFatal: true` to stop the cycle on the first such failure instead: the adapter reports `setup-failed` then the terminal `reconnect-failed`, tears down fully (consumers are dead; a later `connect()` starts from a clean slate), and subsequent publishes fail fast with `AmqpConnectionError`. The gate is the AMQP reply code of the cause (`404`/`406` = deterministic; transient causes -- including the cluster classic-queue "home node ... down or inaccessible" 404 -- stay in recovery). Boot-time drift is `failFastOnInitialSetupError`'s job; the broker-unreachable-at-boot window is covered by neither flag until [connectum#198](https://github.com/Connectum-Framework/connectum/issues/198). - **With `recovery: false`**, `connect()` rejects immediately if the broker is unreachable, and a lost connection is not restored. Observe connection state through `lifecycle.onLifecycle` (discriminated union; preferred since 1.3.0) or the deprecated flat callbacks (`onConnected`, `onDisconnected`, `onReconnecting`, `onReconnectFailed`, `onSetupFailed`).