C# Academy · Lektion

Produktion og forbrug af messages

Send og håndtér messages med MassTransit.

Lektion 2 af 413 trin

Produktion og forbrug af messages er en gratis C# Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i C# Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C# Academy-kurset indeholder 4 lektioner i alt.

Registrer MassTransit

Konfigurer MassTransit i DI: registrer det, peg det på en transport (her RabbitMQ), og lad det automatisk finde dine forbrugere.

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

Definition af en forbruger

En forbruger implementerer IConsumer<T> for den meddelelsestype, den håndterer. Din logik ligger i Consume, som modtager en ConsumeContext<T>.

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

Udgivelse af en begivenhed

Indsprøjt IPublishEndpoint, og kald Publish for at udsende en begivenhed 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));
}

Afsendelse af en kommando

Kommandoer sendes til et bestemt slutpunkt. Find et ISendEndpoint for destinationen, og kald Send.

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

Opsummering af Publish kontra Send

Publish bruges til begivenheder og når alle abonnerede forbrugere, mens Send bruges til kommandoer og målrettes én kø. Det korrekte valg definerer din routingsadfærd.

Mulighederne i ConsumeContext

ConsumeContext giver adgang til mere end selve meddelelsen: korrelations-id'er, headere samt mulighed for at udgive eller svare inde fra en forbruger, så du kan kæde meddelelser sammen.

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

Anmodning-svar

MassTransit understøtter også anmodning-svar via meddelelser. En anmodningsklient sender en anmodning og afventer et typespecifikt svar, hvilket er nyttigt, når du har brug for et svar, men stadig ønsker afkobling fra meddelelsesbrokeren.

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

Navngivning af slutpunkter

ConfigureEndpoints navngiver automatisk ét modtagelsesslutpunkt (én kø) pr. forbruger ved hjælp af konventioner. Du kan tilpasse navnene med formateringsfunktioner eller eksplicit konfiguration, når det er nødvendigt.

Serialisering af meddelelser

Som standard serialiserer MassTransit meddelelser som JSON og inkluderer metadata (meddelelsestype, id'er). Producenter og forbrugere deler meddelelseskontrakttyperne, ofte i en delt pakke.

Samtidighed

En forbruger kan behandle mange meddelelser parallelt. Juster PrefetchCount og samtidighedsgrænserne for at afbalancere gennemløbet med de efterfølgende systemers kapacitet.

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

Test af forbrugere

MassTransit leveres med en testharness i hukommelsen, så du kan udgive en meddelelse og kontrollere, at en forbruger håndterede den, uden en rigtig meddelelsesbroker.

Hurtigt tjek

Test produktion og forbrug af meddelelser.

Opsummering

Registrer MassTransit med AddMassTransit, en transport og ConfigureEndpoints. Forbrugere implementerer IConsumer<T> med en Consume-metode. Brug IPublishEndpoint.Publish til begivenheder (alle abonnenter) og ISendEndpoint.Send til kommandoer (én kø). ConsumeContext muliggør kædning og anmodning-svar, og en testharness bekræfter forbrugere i hukommelsen.

Gratis at komme i gang

Lær C# med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
93
Lektioner
346

Ofte stillede spørgsmål

Er lektionen “Produktion og forbrug af messages” gratis?

Ja — hele teksten til “Produktion og forbrug af messages” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af C# Academy-kurset, skal du opgradere til CoddyKit PRO. C# Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Produktion og forbrug af messages”?

Send og håndtér messages med MassTransit. Du øver dig i C# Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på C# Academy?

Der kræves ingen tidligere erfaring. C# Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Produktion og forbrug af messages”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne C# Academy-lektion?

Ja. Alle C# Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Messaging-koncepter
  2. Produktion og forbrug af messages
  3. Sagaer og workflows
  4. Fejlhåndtering og retries
← Tilbage til C# Academy