0Pricing
C# Academy · Aula

Produzindo e consumindo mensagens

Envie e processe mensagens com MassTransit.

Produzindo e consumindo mensagens é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 4 aulas no total.

Registrando o MassTransit

Configure o MassTransit na DI: registre-o, aponte-o para um transporte (neste caso, RabbitMQ) e permita que ele localize seus consumidores.

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

Definindo um consumidor

Um consumidor implementa IConsumer<T> para o tipo de mensagem que trata. Sua lógica fica em Consume, que recebe um ConsumeContext<T>.

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

Publicando um evento

Injete IPublishEndpoint e chame Publish para transmitir um evento a todos os assinantes.

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));
}

Enviando um comando

Os comandos vão para um endpoint específico. Resolva um ISendEndpoint para o destino e chame Send.

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

Recapitulação de Publish e Send

Publish é usado para eventos e alcança todos os consumidores inscritos; Send é usado para comandos e direciona a mensagem para uma única fila. Escolher corretamente define o comportamento do roteamento.

O poder de ConsumeContext

ConsumeContext expõe mais do que a mensagem: identificadores de correlação, cabeçalhos e a possibilidade de publicar ou responder dentro de um consumidor, permitindo encadear mensagens.

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

Solicitação e resposta

O MassTransit também oferece suporte a solicitações e respostas por meio de mensagens. Um cliente de solicitações envia uma solicitação e aguarda uma resposta tipada, o que é útil quando você precisa de uma resposta, mas ainda deseja o desacoplamento proporcionado pelo intermediário de mensagens.

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

Nomeação de endpoints

ConfigureEndpoints nomeia automaticamente um endpoint de recebimento (fila) para cada consumidor, usando convenções. Quando necessário, você pode personalizar os nomes com formatadores ou por meio de uma configuração explícita.

Serialização de mensagens

Por padrão, o MassTransit serializa as mensagens como JSON e inclui metadados (tipo de mensagem e identificadores). Produtores e consumidores compartilham os tipos dos contratos de mensagem, geralmente em um pacote compartilhado.

Concorrência

Um consumidor pode processar muitas mensagens em paralelo. Ajuste PrefetchCount e os limites de concorrência para equilibrar a capacidade de processamento com a capacidade dos serviços dependentes.

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

Testando consumidores

O MassTransit inclui uma ferramenta de testes em memória para que você possa publicar uma mensagem e verificar se um consumidor a tratou, sem precisar de um intermediário de mensagens real.

Verificação rápida

Teste a produção e o consumo de mensagens.

Recapitulação

Registre o MassTransit com AddMassTransit, um transporte e ConfigureEndpoints. Os consumidores implementam IConsumer<T> com um método Consume. Use IPublishEndpoint.Publish para eventos (todos os assinantes) e ISendEndpoint.Send para comandos (uma fila). ConsumeContext permite o encadeamento e as solicitações e respostas, e uma ferramenta de testes verifica os consumidores em memória.

Perguntas Frequentes

A aula “Produzindo e consumindo mensagens” é grátis?

Sim — o texto completo de “Produzindo e consumindo mensagens” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 4 aulas no total.

O que vou aprender em “Produzindo e consumindo mensagens”?

Envie e processe mensagens com MassTransit. Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C# Academy?

Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Produzindo e consumindo mensagens”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C# Academy?

Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Conceitos de mensageria
  2. Produzindo e consumindo mensagens
  3. Sagas e fluxos de trabalho
  4. Tratamento de erros e novas tentativas
← Voltar para C# Academy