C# Academy · leksjon

Produsere og konsumere meldinger

Send og håndter meldinger med MassTransit.

Leksjon 2 av 413 trinn

Produsere og konsumere meldinger er en gratis leksjon i C# Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i C# Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i C# Academy inneholder totalt 4 leksjoner.

Registrere MassTransit

Konfigurer MassTransit i DI: Registrer det, pek det mot en transport (her RabbitMQ), og la det finne konsumentene dine.

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

Definere en consumer

En consumer implementerer IConsumer<T> for meldingstypen den håndterer. Logikken ligger i Consume, som mottar en ConsumeContext<T>.

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

Publisere en hendelse

Injiser IPublishEndpoint, og kall Publish for å kringkaste en hendelse til alle abonnenter.

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

Sende en kommando

Kommander sendes til et bestemt endepunkt. Hent et ISendEndpoint for målet, og kall Send.

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

Oppsummering av Publish kontra Send

Publish brukes for hendelser og når alle abonnerte consumers; Send brukes for kommandoer og retter seg mot én kø. Det riktige valget bestemmer rutingsatferden.

Mulighetene i Consume Context

ConsumeContext gir tilgang til mer enn meldingen: korrelasjons-ID-er, headere og muligheten til å publisere eller svare fra en consumer, noe som muliggjør meldingskjeding.

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

Forespørsel og svar

MassTransit støtter også forespørsel og svar over meldinger. En request-klient sender en forespørsel og venter på et typet svar, noe som er nyttig når det trengs et svar, samtidig som frakobling fra meldingsmegleren er ønskelig.

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

Navngiving av endepunkter

ConfigureEndpoints navngir automatisk et mottaksendepunkt (en kø) per consumer ved hjelp av konvensjoner. Navnene kan tilpasses med formaterere eller eksplisitt konfigurasjon ved behov.

Serialisering av meldinger

Som standard serialiserer MassTransit meldinger som JSON og inkluderer metadata (meldingstype og ID-er). Produsenter og consumers deler meldingens kontraktstyper, ofte i en delt pakke.

Samtidighet

En consumer kan behandle mange meldinger parallelt. Juster PrefetchCount og grensene for samtidighet for å balansere gjennomstrømming mot kapasiteten i nedstrømsystemene.

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

Teste consumers

MassTransit leveres med en test-harness i minnet, slik at det er mulig å publisere en melding og kontrollere at en consumer behandlet den, uten en faktisk meldingsmegler.

Rask kontroll

Test produksjon og konsumering.

Oppsummering

Registrer MassTransit med AddMassTransit, en transport og ConfigureEndpoints. Consumers implementerer IConsumer<T> med en Consume-metode. Bruk IPublishEndpoint.Publish for hendelser (alle abonnenter) og ISendEndpoint.Send for kommandoer (én kø). ConsumeContext muliggjør kjeding og forespørsel og svar, og en test-harness verifiserer consumers i minnet.

Gratis å komme i gang

Lær deg C# med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
93
Leksjoner
346

Ofte stilte spørsmål

Er leksjonen «Produsere og konsumere meldinger» gratis?

Ja – hele teksten i «Produsere og konsumere meldinger» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av C# Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i C# Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Produsere og konsumere meldinger»?

Send og håndter meldinger med MassTransit. Du øver på C# Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med C# Academy?

Ingen tidligere erfaring er nødvendig. C# Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «Produsere og konsumere meldinger»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne C# Academy-leksjonen?

Ja. Alle C# Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Meldingskonsepter
  2. Produsere og konsumere meldinger
  3. Sagaer og arbeidsflyter
  4. Feilhåndtering og nye forsøk
← Tilbake til C# Academy