Redrive

The error queue, handled.

Redrive is a workbench for RabbitMQ that reads MassTransit natively. Peek at messages without consuming them, see faults as exceptions instead of JSON, fix the payload, and put it back on the right queue.

Download$ docker run redrive/redrive
prod-eu-west · vhost / · order-submitted_error
2 selected·42 in snapshot · captured 14:12:04
Redrive 2Discard 2
0198a3e2-41bc-7f2e-9c1a-8842f0a1b3c4redelivered2 h 14 m
0198a3e2-3d02-7b1a-b2f4-1076c2e9d5a1redelivered2 h 09 m
0198a3e1-f6c8-7e55-8d3b-4420a9b1c7e2redelivered1 h 51 m
0198a3e1-b214-70c9-a1e7-9f53d8e0b6f3redelivered1 h 12 m
0198a3e1-7a90-7f38-c4d2-2b81f7a3e9c4redelivered44 m
OrderSubmittedMassTransit
HttpRequestException · RETRY 3Connection refused (payments.internal:443)
"orderId": "8842-1042",
"total": 129.90,
"currency": "EUR"
Redrive to order-submitted

Features

Peek

Read a queue without consuming it

Up to 100 messages over AMQP, returned with an explicit nack. Results are a stamped snapshot with a refresh, not a fake live view. On quorum queues, Redrive resolves the effective delivery limit and warns per message before peeking costs anything.

Parse

Envelopes as envelopes

Identity, routing, types, payload, and the host that produced it — plus MT-Fault-* headers as a fault panel with the exception, stack trace and retry count. One parser covers System.Text.Json and Newtonsoft, and it never throws.

Redrive

Put messages back, safely

Each message publishes to the target with confirms and the mandatory flag, and is acked off the error queue only after the broker accepts it. Direct to the queue, never back through the exchange — nothing gets re-broadcast.

Envelope parsing

Every field MassTransit sets, where you expect it.

Identity and routing fields, the message type URNs, the payload, and the host block that produced it. MT-Fault-* headers become a fault panel with the exception, its stack trace, and the retry count.

One parser covers System.Text.Json and Newtonsoft apps, and it never throws: results are parsed, partial or none, with diagnostics. Non-MassTransit messages still get decoded x-death history and delivery counts.

Fault<ShipmentDispatched>RETRY 3 OF 5
HttpRequestException · carrier API timed out after 30 s
messageId9f2c41e8-7b3a-4d10-a55f-2c81ee0a3b47
conversationId4a71dd02-1f9c-4c8e-9b32-88ad10c4e001
correlationIdord_88213
sourceAddressrabbitmq://prod-eu-west/orders
faultAddressrabbitmq://prod-eu-west/shipping_error
messageTypeurn:message:Contracts:ShipmentDispatched
sentTime2026-08-10T14:09:11.482Z
x-delivery-count3 · limit default (20)
Topology

Your broker, laid out as services instead of plumbing.

Exchanges, queues and bindings in one layered left-to-right graph. The default exchange and amq.* stay hidden until you want them; queue depths and consumer counts sit on the nodes, and error queues light up when they hold messages.

Turn on the MassTransit lens and each service's queue, error queue and skipped queue collapse into one cluster.

orders12 consumers
ordersorders_error · 94orders_skipped
shipping2 consumers
shippingshipping_error · 218
payments8 consumers
paymentspayments_error

Native MassTransit

Envelope parsing, fault panels, per-service topology clusters, and redrive targets resolved from the _error naming convention — cross-checked against envelope addresses.

Safe by construction

Peek returns messages with an explicit nack. Redrive acks the original only after the broker confirms the copy. Whole-queue operations demand a typed count.

Two protocols, split by job

Stats come over the management API. Everything that touches a message goes over AMQP.

Nothing in your services

No agent, no MassTransit configuration change. A single self-contained binary or a Docker image.

Get the latest release

Self-hosted and self-contained: no agent in your services, no MassTransit configuration to change.

win-x64 · linux-x64 · osx-arm64·Docker on GHCR
$docker run -p 8080:8080 \
-v redrive:/data \
ghcr.io/redrive/redrive:1