Rabbit Relay

Lifecycle Hooks

Expose broker operational events for logging, metrics, and production visibility

Lifecycle hooks expose Rabbit Relay operational events.

They are useful for logging, metrics, OpenTelemetry, debugging, and production visibility.


Basic usage

const broker = new RabbitMQBroker("orders-service");

broker.on("consumer.started", (event) => {
  console.log("consumer started", event.queue);
});

broker.on("retry.scheduled", (event) => {
  console.log("retry scheduled", event.retryCount, event.delayMs);
});

Returned broker interfaces also support lifecycle hooks:

const sub = await broker.queue("orders.q").exchange("orders.ex");

sub.on("consumer.started", (event) => {
  console.log(event.queue);
});

Supported events

EventMeaning
reconnectBroker reconnected
topology.assertedExchange/queue/binding topology was asserted
topology.failedTopology assert or passive check failed
topology.restoredTopology and consumers restored after reconnect
consumer.startedConsumer started
consumer.stoppedConsumer stopped
publish.failedPublish failed after retry attempt
retry.scheduledA retry was scheduled
broker.closedBroker was closed
handler.completedA handler finished (success or error), with duration
message.dead-letteredA message was sent to the dead-letter queue
message.droppedA message was dropped (acked) after retry exhaustion or onError: "ack"

Retry scheduled example

broker.on("retry.scheduled", (event) => {
  console.log({
    queue: event.queue,
    exchange: event.exchange,
    routingKey: event.routingKey,
    retryCount: event.retryCount,
    attempts: event.attempts,
    delayMs: event.delayMs,
  });
});

Publish failed example

broker.on("publish.failed", (event) => {
  console.error("publish failed", {
    exchange: event.exchange,
    routingKey: event.routingKey,
    eventName: event.eventName,
    error: event.error,
  });
});

Lifecycle hooks vs plugins

FeatureLifecycle HooksPlugins
ScopeBroker instanceProcess-wide
FocusOperations eventsMessage lifecycle
APIbroker.on(...)pluginManager.register(...)
Best forlogging, metrics, tracing, operationscross-cutting message behavior

Error behavior

Note

If a lifecycle hook throws, the error is caught and logged. Rabbit Relay continues running and the broker operation is not blocked. Keep hooks lightweight and non-blocking.


Summary

  • Lifecycle hooks expose broker operations
  • Useful for logging, metrics, and tracing
  • Local to a broker instance
  • Safe failure behavior
  • Foundation for the OpenTelemetry adapter

On this page