0Pricing
C# Academy · Lezione

Produzione e consumo dei messaggi

Invii e gestisca messaggi con MassTransit.

Produzione e consumo dei messaggi è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C# Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C# Academy include 4 lezioni in totale.

Registrare MassTransit

Configuri MassTransit nella DI: lo registri, lo punti a un transport (in questo caso RabbitMQ) e lasci che individui automaticamente i consumer.

builder.Services.AddMassTransit(x =>
{
    x.AddConsumers(typeof(Program).Assembly);
    x.UsingRabbitMq((context, cfg) =>
    {
        cfg.Host("localhost");
        cfg.ConfigureEndpoints(context);
    });
});

Definizione di un consumer

Un consumer implementa IConsumer<T> per il tipo di messaggio che gestisce. La logica viene definita in Consume, che riceve un ConsumeContext<T>.

public class OrderPlacedConsumer : IConsumer<OrderPlaced>
{
    public async Task Consume(ConsumeContext<OrderPlaced> context)
    {
        OrderPlaced message = context.Message;
        // handle the event
    }
}

Pubblicazione di un evento

Inietti IPublishEndpoint e chiami Publish per trasmettere un evento a tutti i sottoscrittori.

public class OrderService
{
    private readonly IPublishEndpoint _publish;
    public OrderService(IPublishEndpoint publish) => _publish = publish;

    public Task PlaceOrderAsync(Guid id, string email) =>
        _publish.Publish(new OrderPlaced(id, email));
}

Invio di un comando

I comandi vengono inviati a un endpoint specifico. Risolva un ISendEndpoint per la destinazione e chiami Send.

var endpoint = await _sendProvider
    .GetSendEndpoint(new Uri("queue:charge-payment"));
await endpoint.Send(new ChargePayment(orderId, amount));

Riepilogo di Publish e Send

Publish si usa per gli eventi e raggiunge ogni consumer sottoscritto; Send si usa per i comandi e ha come destinazione una sola coda. La scelta corretta definisce il comportamento di routing.

Potenzialità di ConsumeContext

ConsumeContext espone più del solo messaggio: identificativi di correlazione, intestazioni e la possibilità di pubblicare o rispondere dall'interno di un consumer, abilitando il concatenamento dei messaggi.

public async Task Consume(ConsumeContext<OrderPlaced> context)
{
    await context.Publish(new InvoiceRequested(context.Message.OrderId));
}

Richiesta e risposta

MassTransit supporta anche il modello di richiesta e risposta tramite messaggi. Un client di richieste invia una richiesta e attende una risposta tipizzata: è utile quando serve una risposta, mantenendo al contempo il disaccoppiamento dal broker.

var response = await _client
    .GetResponse<OrderStatus>(new GetOrder(orderId));
OrderStatus status = response.Message;

Denominazione degli endpoint

ConfigureEndpoints assegna automaticamente un nome a un endpoint di ricezione (coda) per ogni consumer, utilizzando convenzioni. Se necessario, può personalizzare i nomi con formatter o con una configurazione esplicita.

Serializzazione dei messaggi

Per impostazione predefinita, MassTransit serializza i messaggi in JSON e include i metadati (tipo di messaggio, identificativi). Producer e consumer condividono i tipi dei contratti dei messaggi, spesso in un pacchetto condiviso.

Concorrenza

Un consumer può elaborare molti messaggi in parallelo. Regoli PrefetchCount e i limiti di concorrenza per bilanciare il throughput con la capacità dei sistemi downstream.

cfg.ReceiveEndpoint("orders", e =>
{
    e.PrefetchCount = 16;
    e.ConcurrentMessageLimit = 8;
    e.ConfigureConsumer<OrderPlacedConsumer>(context);
});

Test dei consumer

MassTransit include un test harness in memoria che consente di pubblicare un messaggio e verificare che un consumer lo abbia gestito, senza utilizzare un broker reale.

Verifica rapida

Verifichi la produzione e il consumo dei messaggi.

Riepilogo

Registri MassTransit con AddMassTransit, un transport e ConfigureEndpoints. I consumer implementano IConsumer<T> con un metodo Consume. Utilizzi IPublishEndpoint.Publish per gli eventi (tutti i sottoscrittori) e ISendEndpoint.Send per i comandi (una sola coda). ConsumeContext abilita il concatenamento e il modello di richiesta e risposta, mentre un test harness verifica i consumer in memoria.

Domande Frequenti

La lezione «Produzione e consumo dei messaggi» è gratuita?

Sì — il testo completo di «Produzione e consumo dei messaggi» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C# Academy, passa a CoddyKit PRO. Il corso C# Academy include 4 lezioni in totale.

Cosa imparerò in «Produzione e consumo dei messaggi»?

Invii e gestisca messaggi con MassTransit. Eserciti C# Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C# Academy?

Non è richiesta alcuna esperienza precedente. C# Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Produzione e consumo dei messaggi»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C# Academy?

Sì. Ogni lezione C# Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Concetti di messaggistica
  2. Produzione e consumo dei messaggi
  3. Saga e workflow
  4. Gestione degli errori e retry
← Torna a C# Academy