0Pricing
C# Academy · Lección

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

  1. Conceptos de mensajería
  2. Producción y consumo de mensajes
  3. Sagas y workflows
  4. Gestión de errores y reintentos
← Volver a C# Academy