Mert Özen Further With Every Line

Blog

Mert Özen's blog posts on software development, backend, frontend, and DevOps.

Series
7 posts found #rabbitmq
Getting Started with Message Queues in .NET: RabbitMQ, Azure Service Bus and Kafka Clients, Which One When
Backend PART 01

Getting Started with Message Queues in .NET: RabbitMQ, Azure Service Bus and Kafka Clients, Which One When

RabbitMQ for flexible routing and per-message ack/retry, Azure Service Bus for a managed service on Azure, Kafka for high volume and replay; the series starts with raw clients and moves on to abstractions. The three brokers' models, a practical comparison table, a program sending and reading the same OrderPlaced with three clients, the Docker Compose environment and a note on Amazon SQS/SNS.

8 Nov 2026 11 min 4
First Producer and Consumer with RabbitMQ.Client 7: Async API, Connection/Channel Lifecycle and Manual Ack
Backend PART 02

First Producer and Consumer with RabbitMQ.Client 7: Async API, Connection/Channel Lifecycle and Manual Ack

Keep one IConnection for the application's lifetime, never share an IChannel across threads, verify publishes with publisher confirmations and mandatory, and run the consumer inside a BackgroundService with autoAck=false and prefetch. Real output shows a prefetch-less consumer pulling 498 messages into memory, autoAck losing 17 messages, automatic recovery and graceful shutdown.

8 Nov 2026 13 min 4
RabbitMQ Topology in Code: Exchange Types, Bindings, Quorum Queues and Streams
Backend PART 03

RabbitMQ Topology in Code: Exchange Types, Bindings, Quorum Queues and Streams

Use quorum queues and topic exchanges for durable business messages, declare the topology idempotently at startup, and leave limits that may change (TTL, max-length, delivery-limit, DLX) to a policy instead of queue arguments. Real output: nine copies from four routing keys, a PRECONDITION_FAILED error, fanout cache invalidation, stream replay and reject-publish.

8 Nov 2026 11 min 2
Messaging with MassTransit: Consumers, Publish/Send and Broker Topology — v9 Licensing and Alternatives
Backend PART 07

Messaging with MassTransit: Consumers, Publish/Send and Broker Topology — v9 Licensing and Alternatives

MassTransit takes over connections, acks, serialization and topology, reducing a consumer to a single IConsumer<T>; the price is its own exchange conventions, an envelope format and, in v9, a commercial licence. We move Billing to MassTransit 8.5.12, show publish vs send, the resulting RabbitMQ topology and the envelope, see v9 refuse to start without a licence, and build a decision table across v8, Wolverine, Rebus, NServiceBus and Brighter.

8 Nov 2026 11 min 4
Retry and Redelivery in Consumers: Immediate, Delayed and Exponential Backoff
Backend PART 08

Retry and Redelivery in Consumers: Immediate, Delayed and Exponential Backoff

Handle transient failures with a short in-memory retry and longer waits through the broker; never retry permanent failures, send them to the DLQ. Real output shows nack-requeue looping 8036 times in 5 seconds on RabbitMQ 4.4, TTL + DLX wait queues, the quorum queue's built-in delayed retry, scheduled retry in Service Bus, Kafka retry topics and MassTransit UseMessageRetry.

8 Nov 2026 17 min 3
Managing Dead-Letter Queues: Finding, Inspecting and Reprocessing Poison Messages
Backend PART 09

Managing Dead-Letter Queues: Finding, Inspecting and Reprocessing Poison Messages

Run the DLQ like a work queue: read why each message failed from its headers, alert on growth, and after the fix send it back with a dry run, filters, a cap and your own replay counter. Real output shows RabbitMQ's x-death count not advancing on a client republish, Service Bus DLQ reason codes, a wrong original-topic bug in a Kafka DLT and MassTransit _error headers.

8 Nov 2026 12 min 3
Client Version Migrations: RabbitMQ.Client 6→7 (IModel to IChannel) and MassTransit 8→9
Backend PART 14

Client Version Migrations: RabbitMQ.Client 6→7 (IModel to IChannel) and MassTransit 8→9

Moving to RabbitMQ.Client 7 gave 5 compiler errors on the first build and 10 more on the second; the real risks are the ones the compiler misses: body lifetime, timeouts becoming cancellations and concurrency. Plus RabbitMQ 4.x rejecting mirroring policies, queue type mismatches, the AMQP 1.0 client, MassTransit 9 refusing to start without a license, v8 support ending on 31 December 2026, and the old Service Bus SDK mapping.

8 Nov 2026 13 min 6
Blog Map