MassTransit vs Wolverine vs Raw RabbitMQ.Client After the License Change MassTransit v9 (9.2.3 on NuGet) now requires a commercial license with a runtime key on every machine running MassTransit code, including developer laptops, while v8 and earlier remain free under Apache 2.0 but unsupported under the commercial agreement, according to a Softinbit Technology comparison of MassTransit, Wolverine 6 and RabbitMQ.Client 7. The article benchmarks three paths for the same order-processing flow — staying on MassTransit v8 (8.5.11) or licensing v9, migrating to MIT-licensed Wolverine 6 (6.50.0, .NET 9 and 10 only), or writing async consumers directly against RabbitMQ.Client 7 (7.2.2, dual-licensed Apache 2.0 and MPL 2.0) — with retries, error queues and idempotent handling. It recommends MassTransit v9 with a license for teams using sagas, routing slips, the transactional outbox or several transports, and raw RabbitMQ.Client for one or two message types where the team accepts owning retries, error queues, serialization and topology. Decide whether to license MassTransit v9, stay on v8 for now, move to Wolverine, or write the RabbitMQ code yourself. Note: this article was drafted with AI assistance and reviewed by Softinbit Technology before publishing. It is part of the series The .NET Field Guide. TL;DR — MassTransit v9 moved to a commercial license requiring runtime keys. If you only publish and consume events, you do not need to blindly pay or panic. — Compare three real paths for the same order-processing flow: keep MassTransit v8 open source or v9 licensed , migrate to MIT-licensed Wolverine 6, or write lightweight async consumers with RabbitMQ.Client 7. — Complete benchmarks, topology setups, retry/dead-letter policies, and an outbox comparison to pick the right option for your team. Level: Intermediate · Prerequisites: Basic understanding of message queues and RabbitMQ, ASP.NET Core dependency injection · Reading time: 14 min Dependabot opened a pull request this morning: MassTransit.RabbitMQ 8.5.11 to 9.2.3. The build is green, but the MassTransit docs now say v9 is a commercial product and that the license key must be available at runtime on every machine that runs MassTransit code, developer laptops included. Your Store.Api uses MassTransit for exactly one flow: when an order is placed, publish OrderPlaced, and a consumer reserves stock. You can keep MassTransit v8 for now, or v9 with a license , move to Wolverine, or use RabbitMQ.Client directly. This article builds the same flow in all three, with retries, an error queue, and idempotent handling. The short answer Choose MassTransit v9 with a license when you use sagas, routing slips, the transactional outbox, or several transports, and the subscription cost is smaller than the rewrite. Small organizations should check whether they qualify for the full discount. Choose MassTransit v8 when you need the current code to keep running this quarter, and you put a dated migration or licensing decision on the roadmap. Choose Wolverine when you want an MIT-licensed framework with retries, dead-letter queues, an inbox and outbox, and convention-based handlers, and you run on .NET 9 or 10. Choose raw RabbitMQ.Client when you have one or two message types, want no framework dependency, and accept that you own retries, error queues, serialization, and topology. What is being compared MassTransit is a message bus framework for .NET with consumers, sagas, retries, an outbox, and testing helpers. The current major version is 9 9.2.3 on NuGet in October 2026 , sold by Massient, Inc., the company created by founder Chris Patterson. Version 9 needs a license; the license terms say v8 and earlier “remain free and open source under their original licenses” Apache 2.0 but are unsupported under the commercial agreement. Version 8 still ships patch releases 8.5.11 at the end of September 2026 . Wolverine WolverineFx is a messaging and command-handling framework from JasperFx Software, the team behind Marten. The current major is 6 6.50.0 , released under the MIT license. Wolverine 6 targets .NET 9 and .NET 10 only; teams on .NET 8 must stay on 5.x. RabbitMQ.Client is the official .NET client for RabbitMQ, maintained by the RabbitMQ core team. The current major is 7 7.2.2 , dual-licensed under Apache 2.0 and the Mozilla Public License 2.0. Version 7 made the API fully asynchronous. The same task in each option The task: POST /api/orders/{id}/placed-event publishes OrderPlaced. A consumer reserves stock for each line. Transient failures retry three times with a delay. Permanent failures a product that does not exist go straight to an error queue. A redelivered message never reserves stock twice. Start RabbitMQ locally: docker run -d --name store-rabbit -p 5672:5672 -p 15672:15672 rabbitmq:4-management Add the settings to appsettings.Development.json: { "RabbitMq": { "Host": "localhost", "Username": "guest", "Password": "guest" }} Shared code used by all three options The contract, the idempotency table, and the business logic are identical everywhere. // File: Orders/Messaging/OrderPlaced.csnamespace Store.Api.Orders.Messaging; public sealed record OrderPlaced int OrderId, string UserId, DateTime PlacedAtUtc, IReadOnlyList