0Pricing
C# Academy · Lektion

Nachrichten produzieren und konsumieren

Senden und verarbeiten Sie Nachrichten mit MassTransit.

Nachrichten produzieren und konsumieren ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C# Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.

MassTransit registrieren

Konfigurieren Sie MassTransit in DI: Registrieren Sie es, verbinden Sie es mit einem Transport (hier RabbitMQ), und lassen Sie die Consumer automatisch erkennen.

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

Einen Consumer definieren

Ein Consumer implementiert IConsumer<T> für den Nachrichtentyp, den er verarbeitet. Die Logik befindet sich in Consume, das einen ConsumeContext<T> empfängt.

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

Ein Event veröffentlichen

Binden Sie IPublishEndpoint per Dependency Injection ein und rufen Sie Publish auf, um ein Event an alle Abonnenten zu verteilen.

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

Einen Command senden

Commands werden an einen bestimmten Endpoint gesendet. Ermitteln Sie für das Ziel einen ISendEndpoint und rufen Sie Send auf.

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

Zusammenfassung: Publish vs. Send

Publish ist für Events gedacht und erreicht jeden abonnierten Consumer; Send ist für Commands gedacht und richtet sich an eine einzelne Queue. Die richtige Wahl legt Ihr Routing-Verhalten fest.

Die Leistungsfähigkeit von ConsumeContext

ConsumeContext stellt mehr als nur die Nachricht bereit: Korrelations-IDs, Header sowie die Möglichkeit, aus einem Consumer heraus zu publizieren oder zu antworten, wodurch sich Nachrichtenketten realisieren lassen.

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

Request-Response

MassTransit unterstützt auch Request-Response über Messaging. Ein Request-Client sendet eine Anfrage und wartet auf eine typisierte Antwort – nützlich, wenn Sie eine Antwort benötigen, aber dennoch die Entkopplung durch den Broker beibehalten möchten.

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

Benennung von Endpoints

ConfigureEndpoints benennt mithilfe von Konventionen automatisch für jeden Consumer einen Receive-Endpoint (eine Queue). Bei Bedarf können Sie die Namen mit Formatierern oder einer expliziten Konfiguration anpassen.

Nachrichtenserialisierung

Standardmäßig serialisiert MassTransit Nachrichten als JSON und fügt Metadaten hinzu (Nachrichtentyp, IDs). Produzenten und Consumer verwenden dieselben Nachrichtentypen für den Nachrichtenvertrag, die sich häufig in einem gemeinsam genutzten Paket befinden.

Nebenläufigkeit

Ein Consumer kann viele Nachrichten parallel verarbeiten. Passen Sie PrefetchCount und Nebenläufigkeitslimits an, um den Durchsatz und die Kapazität nachgelagerter Systeme auszubalancieren.

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

Consumer testen

MassTransit enthält ein In-Memory-Test-Harness, mit dem Sie eine Nachricht veröffentlichen und überprüfen können, ob ein Consumer sie verarbeitet hat – ganz ohne echten Broker.

Kurzer Test

Testen Sie das Produzieren und Konsumieren von Nachrichten.

Zusammenfassung

Registrieren Sie MassTransit mit AddMassTransit, einem Transport und ConfigureEndpoints. Consumer implementieren IConsumer<T> mit einer Consume-Methode. Verwenden Sie IPublishEndpoint.Publish für Events (alle Abonnenten) und ISendEndpoint.Send für Commands (eine Queue). ConsumeContext ermöglicht Nachrichtenketten und Request-Response, und ein Test-Harness überprüft Consumer im Speicher.

Häufig gestellte Fragen

Ist die Lektion „Nachrichten produzieren und konsumieren“ kostenlos?

Ja — der vollständige Text von „Nachrichten produzieren und konsumieren“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C# Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Nachrichten produzieren und konsumieren“?

Senden und verarbeiten Sie Nachrichten mit MassTransit. Du übst C# Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C# Academy zu starten?

Keine Vorkenntnisse erforderlich. C# Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Nachrichten produzieren und konsumieren“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C# Academy-Lektion Code schreiben und ausführen?

Ja. Jede C# Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Grundlagen der Nachrichtenübermittlung
  2. Nachrichten produzieren und konsumieren
  3. Sagas und Workflows
  4. Fehlerbehandlung und Wiederholungen
← Zurück zu C# Academy