0Pricing
C# Academy · Lekcja

Produkcja i konsumpcja komunikatów

Wysyłaj i obsługuj komunikaty za pomocą MassTransit.

Produkcja i konsumpcja komunikatów to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 4 lekcji w sumie.

Rejestrowanie MassTransit

MassTransit należy skonfigurować w DI: zarejestrować go, wskazać transport (tutaj RabbitMQ) i pozwolić mu wykryć konsumentów.

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

Definiowanie konsumenta

Konsument implementuje IConsumer<T> dla typu wiadomości, który obsługuje. Logika znajduje się w metodzie Consume, która otrzymuje obiekt ConsumeContext<T>.

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

Publikowanie zdarzenia

Należy wstrzyknąć IPublishEndpoint i wywołać Publish, aby rozgłosić zdarzenie do wszystkich subskrybentów.

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

Wysyłanie polecenia

Polecenia są kierowane do konkretnego endpointu. Należy pobrać obiekt ISendEndpoint dla miejsca docelowego i wywołać Send.

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

Podsumowanie: Publish a Send

Publish służy do zdarzeń i dociera do każdego subskrybującego konsumenta, natomiast Send służy do poleceń i kieruje wiadomość do jednej kolejki. Właściwy wybór określa sposób routingu wiadomości.

Możliwości ConsumeContext

ConsumeContext udostępnia nie tylko wiadomość, lecz także identyfikatory korelacji, nagłówki oraz możliwość publikowania wiadomości lub wysyłania odpowiedzi z poziomu konsumenta, co umożliwia łączenie wiadomości w łańcuch.

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

Żądanie i odpowiedź

MassTransit obsługuje również komunikację żądanie–odpowiedź za pośrednictwem wiadomości. Klient żądań wysyła żądanie i oczekuje na odpowiedź określonego typu. Jest to przydatne, gdy potrzebna jest odpowiedź, a jednocześnie chcą Państwo zachować luźne powiązanie dzięki brokerowi.

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

Nazewnictwo endpointów

ConfigureEndpoints automatycznie nadaje nazwę endpointowi odbiorczemu (kolejce) dla każdego konsumenta, korzystając z konwencji. W razie potrzeby można dostosować nazwy za pomocą formatterów lub jawnej konfiguracji.

Serializacja wiadomości

Domyślnie MassTransit serializuje wiadomości jako JSON i dołącza metadane, takie jak typ wiadomości oraz identyfikatory. Producenci i konsumenci współdzielą typy kontraktów wiadomości, często umieszczone we wspólnym pakiecie.

Współbieżność

Konsument może przetwarzać wiele wiadomości równolegle. Należy dostosować PrefetchCount oraz limity współbieżności, aby zachować równowagę między przepustowością a możliwościami systemów zależnych.

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

Testowanie konsumentów

MassTransit udostępnia działający w pamięci test harness, dzięki któremu można opublikować wiadomość i sprawdzić, czy konsument ją obsłużył, bez korzystania z rzeczywistego brokera.

Szybkie sprawdzenie

Przetestowanie tworzenia i odbierania wiadomości.

Podsumowanie

Należy zarejestrować MassTransit za pomocą AddMassTransit, skonfigurować transport oraz ConfigureEndpoints. Konsumenci implementują IConsumer<T> z metodą Consume. Należy używać IPublishEndpoint.Publish dla zdarzeń (wszyscy subskrybenci) oraz ISendEndpoint.Send dla poleceń (jedna kolejka). ConsumeContext umożliwia łączenie wiadomości oraz komunikację żądanie–odpowiedź, a test harness pozwala weryfikować konsumentów w pamięci.

Często zadawane pytania

Czy lekcja „Produkcja i konsumpcja komunikatów” jest bezpłatna?

Tak — pełny tekst „Produkcja i konsumpcja komunikatów” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Produkcja i konsumpcja komunikatów”?

Wysyłaj i obsługuj komunikaty za pomocą MassTransit. Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć C# Academy?

Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Produkcja i konsumpcja komunikatów”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?

Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Koncepcje komunikacji
  2. Produkcja i konsumpcja komunikatów
  3. Sagi i przepływy pracy
  4. Obsługa błędów i ponawianie prób
← Powrót do C# Academy