Producción y consumo de mensajes
Envíe y gestione mensajes con MassTransit.
Producción y consumo de mensajes es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C# Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C# Academy incluye 4 lecciones en total.
Registrar MassTransit
Configure MassTransit en DI: regístrelo, apúntelo a un transporte (en este caso, RabbitMQ) y deje que detecte sus consumidores.
builder.Services.AddMassTransit(x =>
{
x.AddConsumers(typeof(Program).Assembly);
x.UsingRabbitMq((context, cfg) =>
{
cfg.Host("localhost");
cfg.ConfigureEndpoints(context);
});
});Definir un consumidor
Un consumidor implementa IConsumer<T> para el tipo de mensaje que gestiona. La lógica se encuentra en Consume, que recibe un ConsumeContext<T>.
public class OrderPlacedConsumer : IConsumer<OrderPlaced>
{
public async Task Consume(ConsumeContext<OrderPlaced> context)
{
OrderPlaced message = context.Message;
// handle the event
}
}Publicar un evento
Inyecte IPublishEndpoint y llame a Publish para difundir un evento a todos los suscriptores.
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));
}Enviar un comando
Los comandos se envían a un endpoint específico. Resuelva un ISendEndpoint para el destino y llame a Send.
var endpoint = await _sendProvider
.GetSendEndpoint(new Uri("queue:charge-payment"));
await endpoint.Send(new ChargePayment(orderId, amount));Repaso: Publish frente a Send
Publish se utiliza para eventos y llega a todos los consumidores suscritos; Send se utiliza para comandos y se dirige a una sola cola. Elegir correctamente define el comportamiento de enrutamiento.
Potencia de ConsumeContext
ConsumeContext expone más que el mensaje: identificadores de correlación, encabezados y la posibilidad de publicar o responder desde un consumidor, lo que permite encadenar mensajes.
public async Task Consume(ConsumeContext<OrderPlaced> context)
{
await context.Publish(new InvoiceRequested(context.Message.OrderId));
}Solicitud y respuesta
MassTransit también admite el patrón de solicitud y respuesta mediante mensajería. Un cliente de solicitudes envía una solicitud y espera una respuesta tipada, algo útil cuando necesita una respuesta, pero desea mantener el desacoplamiento del broker.
var response = await _client
.GetResponse<OrderStatus>(new GetOrder(orderId));
OrderStatus status = response.Message;Nombres de los endpoints
ConfigureEndpoints asigna automáticamente un nombre a un endpoint de recepción (cola) por cada consumidor mediante convenciones. Puede personalizar los nombres con formateadores o mediante una configuración explícita cuando sea necesario.
Serialización de mensajes
De forma predeterminada, MassTransit serializa los mensajes como JSON e incluye metadatos (tipo de mensaje e identificadores). Los productores y consumidores comparten los tipos de contrato de mensaje, normalmente en un paquete compartido.
Concurrencia
Un consumidor puede procesar muchos mensajes en paralelo. Ajuste PrefetchCount y los límites de concurrencia para equilibrar el rendimiento con la capacidad de los servicios posteriores.
cfg.ReceiveEndpoint("orders", e =>
{
e.PrefetchCount = 16;
e.ConcurrentMessageLimit = 8;
e.ConfigureConsumer<OrderPlacedConsumer>(context);
});Probar consumidores
MassTransit incluye un arnés de pruebas en memoria para que pueda publicar un mensaje y verificar que un consumidor lo ha gestionado, sin necesidad de un broker real.
Comprobación rápida
Pruebe la producción y el consumo de mensajes.
Repaso
Registre MassTransit con AddMassTransit, un transporte y ConfigureEndpoints. Los consumidores implementan IConsumer<T> con un método Consume. Utilice IPublishEndpoint.Publish para eventos (todos los suscriptores) y ISendEndpoint.Send para comandos (una cola). ConsumeContext permite encadenar mensajes y usar solicitud y respuesta, mientras que un arnés de pruebas verifica los consumidores en memoria.
Preguntas frecuentes
¿La lección «Producción y consumo de mensajes» es gratis?
Sí — el texto completo de «Producción y consumo de mensajes» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C# Academy, actualiza a CoddyKit PRO. El curso de C# Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Producción y consumo de mensajes»?
Envíe y gestione mensajes con MassTransit. Practicas C# Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C# Academy?
No se requiere experiencia previa. C# Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Producción y consumo de mensajes»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C# Academy?
Sí. Cada lección de C# Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Conceptos de mensajería
- Producción y consumo de mensajes
- Sagas y workflows
- Gestión de errores y reintentos