Skip to content
Kumar Chandrachooda
Series

Microservices with Convey

In reading order.

  • 22 parts
  • ≈ 120 min total
  • 22 published
Part 1 13 Aug 2025 6 min read

The Microservices Chassis You Were Going to Write Anyway

Every team's fifth microservice ships with the same four hundred lines of bootstrap code as the first four. Opening a deep-dive series on Convey, the open-source .NET toolkit that turned that boilerplate into thirty composable packages.

Part 2 02 Sep 2025 5 min read

One Builder, Thirty Packages: Inside IConveyBuilder

The hundred lines of code that let an entire microservices toolkit compose from one fluent chain — a named registry, a list of build actions, and two hard lessons about doing work at startup.

Part 3 02 Oct 2025 5 min read

Three Marker Interfaces and a Service Scope

Convey's CQRS layer is small enough to read in one sitting — commands, queries and events as empty interfaces, Scrutor scans to find handlers, and a scope-per-dispatch decision with consequences worth knowing before production.

Part 4 09 Nov 2025 5 min read

The Decorator Seam: Logging Handlers You Didn't Write

How Convey wraps every command and event handler with template-driven logging using one attribute, a Scrutor decoration — and a reflection trick against Scrutor itself that I admire and would never ship.

Part 5 17 Dec 2025 6 min read

Minimal APIs Before Minimal APIs Existed

Convey.WebApi threw away controllers, replaced every MVC formatter with its own, and bound route values into immutable commands by writing to compiler-generated backing fields. A source read of a routing layer built years before .NET shipped the same idea.

Part 6 23 Jan 2026 6 min read

From Route to Handler with No Controller in Between

Convey.WebApi.CQRS wires HTTP verbs straight to command and query dispatchers - one line per endpoint - and publishes your message catalog at /_contracts. A source read of the thinnest HTTP layer I've shipped to production.

Part 7 26 Feb 2026 6 min read

Documenting an API That Has No Controllers

Delete your controllers and Swashbuckle goes blind. Convey rebuilds the OpenAPI document by hand from its endpoint registry - a document filter, a naming convention, and a few spec violations it hopes you won't notice.

Part 8 23 Mar 2026 5 min read

A Message Broker Behind an Interface

Convey's messaging abstraction is two interfaces and an attribute - and the naming conventions underneath them quietly turn your C# class names into a public wire contract.

Part 9 09 Apr 2026 6 min read

RabbitMQ by Convention

How Convey's RabbitMQ package turns a class name into an exchange, a routing key and a queue - two eager connections, a channel per thread, and a topology you never declare by hand.

Part 10 19 Apr 2026 6 min read

Retries, Dead Letters, and the Plugin Chain

What Convey's RabbitMQ subscriber actually does when your handler throws - fixed-interval retries, an exception-to-message escape hatch, a dlx- safety net, and one plugin that can quietly defeat all of it.

Part 11 26 Apr 2026 6 min read

Commands and Events on the Wire

Convey's broker-CQRS bridge is seventy lines of code that make the same handler serve local dispatch and RabbitMQ delivery — one line per subscription, correlation context riding along for free.

Part 12 04 May 2026 5 min read

The Outbox That Keeps Your Events Honest

Save the order, publish the event, crash in between - the dual-write problem, and how Convey's outbox and inbox turn at-least-once messaging into something you can build a business on.

Part 13 09 May 2026 6 min read

Persistence as a Registration: Mongo and Redis

What you get when a chassis reduces MongoDB to one builder call and a named collection - a generic repository, paging, camelCase conventions, a seeding hook - and the transactions and indexes it deliberately leaves on your desk.

Part 14 14 May 2026 4 min read

Typed Clients Over One HTTP Door

Convey's HTTP story in two layers - a hardened IHttpClient with retries, masking and correlation headers, and RestEase interfaces on top that turn a service name in config into a typed client.

Part 15 18 May 2026 5 min read

Discovery and Load Balancing Before the Mesh

How Convey wires Consul registration, health-gated deregistration and client-side balancing - and why Fabio exists to take the balancing decision back out of your process.

Part 16 22 May 2026 5 min read

Secrets Before Configuration: Convey and Vault

How Convey's Vault package loads secrets into IConfiguration before the container exists, turns dynamic database credentials into ordinary config keys, and renews leases in the background - plus the secret-zero problem it cannot solve.

Part 17 25 May 2026 5 min read

JWTs and the Blacklist Problem

Convey's auth packages in two acts - a JWT layer that turns one config section into token issuing and validation, and the uncomfortable question every stateless system meets on logout day.

Part 18 29 May 2026 6 min read

Service-to-Service Trust: mTLS in the Chassis

Convey's certificate middleware authenticates machines instead of users - a forwarded-cert header, a subject ACL, and two defaults that look like security and aren't.

Part 19 01 Jun 2026 5 min read

The Logger You Configure Once

Convey's logging package turns a config section into a fully enriched Serilog pipeline - console, file, Seq, ELK and Loki sinks, a live log-level switch, and one middleware with a typo in its name.

Part 20 05 Jun 2026 5 min read

Metrics Two Ways: AppMetrics and Prometheus

Convey ships two metrics packages that answer the same question from different eras - a push-flavored App.Metrics stack and a lean prometheus-net scrape endpoint - and the choice between them is a history lesson.

Part 21 09 Jun 2026 6 min read

Tracing a Message Through the Chassis

How Convey stitched one Jaeger trace across HTTP, a command handler and a RabbitMQ hop years before OpenTelemetry - and the six-line catch block in its tracing plugin that can silently eat your failures.

Part 22 12 Jun 2026 6 min read

What Convey Got Right — and What Modern .NET Ate

Closing the series with an honest audit of the chassis - which of Convey's ideas still earn their keep in 2026, which ones the platform absorbed, and what I would build differently today.