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
- Concetti di messaggistica
- Produzione e consumo dei messaggi
- Saga e workflow
- Gestione degli errori e retry