MassTransit pour C# (.NET) : guide complet avec exemples
1. Qu'est-ce que MassTransit et pourquoi l'utiliser ?
MassTransit est une bibliothèque open-source puissante et largement adoptée pour créer des applications distribuées sur la plateforme .NET. Elle offre une abstraction de haut niveau par-dessus différents systèmes de messagerie (message brokers) tels que RabbitMQ, Azure Service Bus, Amazon SQS/SNS, ActiveMQ et Kafka (via des connecteurs). L'objectif principal de MassTransit est de simplifier le développement de services communiquant via des messages asynchrones, en épargnant au développeur la complexité des détails de bas niveau propres à chaque broker.
Pourquoi utiliser MassTransit ? Dans une architecture microservices moderne, les services doivent communiquer de manière fiable et asynchrone. Au lieu d'appels HTTP directs (qui peuvent entraîner des défaillances en cascade et un couplage fort), on utilise l'échange de messages. MassTransit prend en charge des tâches complexes telles que : la gestion des connexions et des canaux, les tentatives de renvoi en cas d'échec, la gestion des erreurs, les transactions distribuées (via les sagas), la gestion des files d'attente et des topics, la sérialisation/désérialisation des messages, et fournit une API pratique pour envoyer, publier et consommer des messages.
La bibliothèque implémente plusieurs modèles clés : Command-Query Separation (via l'envoi de commandes), Publish-Subscribe (via la publication d'événements), Request-Response (pour un échange synchrone via des messages asynchrones) et le Saga Pattern (pour gérer des processus métier de longue durée). Grâce à cela, MassTransit est devenu le standard de facto pour la construction de systèmes distribués fiables, évolutifs et testables sur .NET.
2. Installation
MassTransit s'installe via NuGet. Selon le broker de messages utilisé, vous devrez installer le package de base ainsi que le package pour le transport spécifique.
Installation de base (sans transport) :
dotnet add package MassTransit
Pour RabbitMQ :
dotnet add package MassTransit.RabbitMQ
Pour Azure Service Bus :
dotnet add package MassTransit.Azure.ServiceBus.Core
Pour Amazon SQS :
dotnet add package MassTransit.AmazonSQS
Pour Kafka :
dotnet add package MassTransit.Kafka
3. Démarrage rapide — exemple minimal fonctionnel
Voici un exemple simple d'envoi et de réception d'un message avec RabbitMQ. Assurez-vous que RabbitMQ est en cours d'exécution (par exemple, via Docker : docker run -d --hostname my-rabbit --name some-rabbit -p 5672:5672 -p 15672:15672 rabbitmq:3-management).
using System;
using System.Threading.Tasks;
using MassTransit;
// 1. Définir le contrat du message
public record OrderSubmitted
{
public Guid OrderId { get; init; }
public string CustomerName { get; init; }
}
// 2. Définir le consommateur (Consumer)
public class OrderSubmittedConsumer : IConsumer<OrderSubmitted>
{
public async Task Consume(ConsumeContext<OrderSubmitted> context)
{
var message = context.Message;
Console.WriteLine($"[Consumer] Commande reçue : {message.OrderId} de {message.CustomerName}");
await Task.CompletedTask;
}
}
// 3. Configurer et démarrer le bus
public class Program
{
public static async Task Main()
{
var busControl = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
cfg.Host("localhost", "/", h =>
{
h.Username("guest");
h.Password("guest");
});
cfg.ReceiveEndpoint("order-queue", e =>
{
e.Consumer<OrderSubmittedC Aussi dans la bibliothèque
GraphQL Java — bibliothèque serveur pour implémenter une API GraphQL en Java
Composer pour PHP : guide complet avec exemples
Surveillance des applications Kotlin : bibliothèques et outils de suivi des performances
Symfony/Validator PHP : guide complet avec exemples