Poziom średniozaawansowany

Messaging Pragmatycznie

Projektuj, łącz, wdrażaj i skutecznie utrzymuj. Po tym kursie komunikacja asynchroniczna nie będzie mieć już przed Tobą tajemnic!

24 godzin
145 lekcji
300+ uczestników
Kup kurs →
Messaging Pragmatycznie

O kursie

Kompleksowy kurs dotyczący komunikacji asynchronicznej i messaging w systemach rozproszonych. Poznaj protokół AMQP, RabbitMQ, Apache Kafka i Azure Service Bus. Naucz się projektować topologie, obsługiwać błędy, deduplikować wiadomości i testować systemy asynchroniczne. Kurs zawiera 115 lekcji i 21 zadań praktycznych (challenge).

Autorzy

Dariusz Pawlukiewicz Dariusz Pawlukiewicz
Michał Wilczyński Michał Wilczyński

Dla kogo

Kurs Messaging Pragmatycznie kierujemy do programistów na poziomie Regular+, którzy chcą pozyskać ekspercką wiedzę w tematyce komunikacji asynchronicznej w systemach rozproszonych.
  • Komunikacja asynchroniczna: motywacja i fundamenty
  • Dogłębna znajomość protokołu AMQP
  • Obsługa błędów w komunikacji asynchronicznej
  • Świadoma konfiguracja on-prem i cloud (Azure)
  • Wyzwania systemów rozproszonych
  • Topologia i modele dostarczania wiadomości
  • Deduplikacja i idempotencja
  • Tranzakcyjne wysyłanie wiadomości (Outbox pattern)
  • Kolejność przetwarzania wiadomości
  • Observability i distributed tracing

Tematyka

  • Komunikacja synchroniczna vs asynchroniczna
  • RabbitMQ i protokół AMQP (Exchange, Queue, Binding)
  • Producent i konsument wiadomości
  • Modele dostarczania (at-least-once, at-most-once, exactly-once)
  • Deduplikacja techniczna i biznesowa
  • Obsługa błędów i Dead Letter Queue
  • Wzorzec Outbox i Listen to Yourself
  • Kolejność przetwarzania i partycjonowanie
  • Trwałość wiadomości
  • Apache Kafka i message streaming
  • Azure Service Bus
  • Observability i distributed tracing
  • Testowanie komunikacji asynchronicznej

Zapoznaj się z kodem

Masz pytania co do kodu? Chcesz rzucić okiem na aplikację przed zakupem kursu? Jak najbardziej popieramy nie kupowanie kota w worku. Cały kod znajdziesz na GitHub. Szczegóły dziedziny problemowej, topologię komunikacji projektu TicketFlow oraz instrukcje uruchomienia znajdziesz w README.

Zobacz na GitHub

Dołącz do otwartej społeczności

Zapraszamy Cię do otwartej społeczności Messaging Pragmatycznie dostępnej za pomocą popularnego komunikatora Discord, używanego przez programistów na całym świecie. Niezależnie od tego, czy zdecydujesz się (bądź nie) na zakup kursu — u nas wszyscy są równi.

Dołącz do Discord

Program kursu

  • 1.1 Założenia kursu 08:50 min
  • 1.2 Struktura kursu 04:58 min
  • 1.3 Dziedzina problemowa 14:11 min
  • 1.4 Anomalie w TicketFlow 04:09 min
  • 1.5 Kod i infrastruktura w TicketFlow 13:49 min
  • 2.1 Komunikacja synchroniczna – wprowadzenie 04:25 min
  • 2.2 Komunikacja synchroniczna 01:49 min
  • 2.3 Komunikacja synchroniczna w TicketFlow 13:19 min
  • 2.4 Wyzwania komunikacji synchronicznej 02:16 min
  • 2.5 Problemy z czasem odpowiedzi i wydajnością 03:01 min
  • 2.6 Zależność od dostępności wszystkich usług 04:36 min
  • 2.7 Problemy spowodowane przez błędy, skalowanie i coupling 06:50 min
  • 2.8 Komunikacja synchroniczna – dyskusja zamykająca 04:31 min
  • 3.1 Komunikacja asynchroniczna – wprowadzenie 02:33 min
  • 3.2 Idea komunikacji asynchronicznej 09:19 min
  • 3.3 Składowe komunikacji asynchronicznej 14:07 min
  • 3.4 Adres i droga komunikatu 10:31 min
  • 3.5 Message broker 06:57 min
  • 3.6 Komunikacja asynchroniczna – dyskusja zamykająca 02:49 min
  • 4.1 Message broker (RabbitMQ) – wprowadzenie 03:03 min
  • 4.2 RabbitMQ i protokół AMQP 07:06 min
  • 4.3 Building blocks w RabbitMQ 07:24 min
  • 4.4 Topologia i projektowanie w RabbitMQ 03:44 min
  • 4.5 Uruchomienie RabbitMQ 20:36 min
  • 4.6 Message broker (RabbitMQ) – dyskusja zamykająca 03:10 min
  • 5.1 Połączenie aplikacji z RabbitMQ – wprowadzenie 03:20 min
  • 5.2 RabbitMQ.Client, czyli biblioteka C# do połączenia z brokerem 01:43 min
  • 5.3 Połączenie (Connection) 13:16 min
  • 5.4 Kanał (Channel) 08:59 min
  • 5.5 Virtual Host 08:10 min
  • 5.6 Połączenie aplikacji z RabbitMQ – dyskusja zamykająca 05:51 min
  • 6.1 Wiadomość – wprowadzenie 02:26 min
  • 6.2 Komunikat "w akcji" 17:09 min
  • 6.3 Co zawiera wiadomość? 09:26 min
  • 6.4 Koperta wiadomości 08:43 min
  • 6.5 Semantyka wiadomości (command, event, request/response) 07:39 min
  • 6.6 Topologia – jak wpływa na nią semantyka wiadomości? 06:55 min
  • 6.7 Zakres danych (event notification vs. event-carried state transfer) 10:29 min
  • 6.8 Wiadomość – dyskusja zamykająca 05:59 min
  • 7.1 Producent wiadomości – wprowadzenie 03:23 min
  • 7.2 Czego potrzebujemy do opublikowania wiadomości? 07:17 min
  • 7.3 Wymiana (Exchange) 01:08 min
  • 7.4 Fanout Exchange 06:12 min
  • 7.5 Direct Exchange 06:04 min
  • 7.6 Topic Exchange 09:03 min
  • 7.7 Headers Exchange 07:07 min
  • 7.8 Alternate Exchange 11:19 min
  • 7.9 Exchange-to-exchange 05:32 min
  • 7.10 Topologia od strony producenta wiadomości 05:56 min
  • 7.11 Publikowanie wiadomości w TicketFlow 29:14 min
  • 7.12 Default exchange 11:10 min
  • 7.13 Producent wiadomości – dyskusja zamykająca 04:24 min
  • 8.1 Konsument wiadomości – wprowadzenie 03:32 min
  • 8.2 Konsument – podstawy 12:31 min
  • 8.3 pull vs. push, czyli modele konsumowania 10:33 min
  • 8.4 Przepływ wiadomości w aplikacji 27:57 min
  • 8.5 Przepływ wiadomości w aplikacji – mniej typowe scenariusze 16:22 min
  • 8.6 Skalowanie konsumenta 09:22 min
  • 8.7 Architektura pipes and filters 18:10 min
  • 8.8 Tworzenie topologii z aplikacji 18:05 min
  • 8.9 Kolejki tymczasowe 17:31 min
  • 8.10 Wiadomość o określonym czasie życia 12:17 min
  • 8.11 Konsument wiadomości – dyskusja zamykająca 07:08 min
  • 9.1 Modele dostarczania wiadomości – wprowadzenie 02:30 min
  • 9.2 Kontekst problemu dostarczania wiadomości 02:54 min
  • 9.3 Acknowledgment i Delivery Tag 02:10 min
  • 9.4 At-least once delivery 12:15 min
  • 9.5 At-most once delivery 06:09 min
  • 9.6 Exactly-once delivery – dlaczego w większości przypadków to ściema? 03:41 min
  • 9.7 Modele dostarczania wiadomości – dyskusja zamykająca 03:52 min
  • 10.1 Deduplikacja wiadomości – wprowadzenie 02:21 min
  • 10.2 Duplikaty wiadomości – jak możemy do nich podejść? 02:54 min
  • 10.3 Deduplikacja biznesowa 06:00 min
  • 10.4 Deduplikacja techniczna w teorii 02:42 min
  • 10.5 Deduplikacja techniczna w praktyce 30:47 min
  • 10.6 Deduplikacja wiadomości – dyskusja zamykająca 06:21 min
  • 11.1 Obsługa błędów – wprowadzenie 03:32 min
  • 11.2 Podejścia do rozwiązywania błędów w komunikacji 09:15 min
  • 11.3 Ponawianie odbioru przez konsumenta 15:06 min
  • 11.4 Dead letter queue (DLQ) – konsument 13:47 min
  • 11.5 Błędy jako zdarzenia po stronie konsumenta 14:18 min
  • 11.6 Wykrywanie braku konsumenta przez producenta 13:24 min
  • 11.7 Wykrywanie błędu zapisu wiadomości przez producenta 12:22 min
  • 11.8 Obsługa błędów – dyskusja zamykająca 10:26 min
  • 12.1 Tranzakcyjne wysyłanie wiadomości – wprowadzenie 02:53 min
  • 12.2 Wiadomość jako side-effect 12:47 min
  • 12.3 Outbox pattern 02:08 min
  • 12.4 Zapis wiadomości do outboxa 20:03 min
  • 12.5 Publikowanie wiadomości z outbox 19:30 min
  • 12.6 Bolączki wzorca outbox 01:19 min
  • 12.7 Natychmiastowe publikowanie z outbox 18:16 min
  • 12.8 Skalowanie horyzontalne outbox 06:41 min
  • 12.9 Błędy aplikacji, a wzorzec outbox 07:48 min
  • 12.10 Outbox w scenariuszu biznesowym 05:03 min
  • 12.11 Listen to yourself pattern 02:06 min
  • 12.12 Listen to yourself w scenariuszu biznesowym 10:07 min
  • 12.13 Tranzakcyjne wysyłanie wiadomości – dyskusja zamykająca 05:54 min
  • 13.1 Wprowadzanie zmian – wprowadzenie 03:15 min
  • 13.2 Ewolucja systemu 04:56 min
  • 13.3 Zmiana wersji payloadu 06:10 min
  • 13.4 Zmiana schematu wiadomości 23:07 min
  • 13.5 Zmiana w topologii 05:54 min
  • 13.6 Wprowadzanie zmian – dyskusja zamykająca 04:05 min
  • 14.1 Kolejność przetwarzania wiadomości – wprowadzenie 04:16 min
  • 14.2 Ordering w scenariuszu biznesowym 08:47 min
  • 14.3 Topologia, a kolejność przetwarzania wiadomości 17:14 min
  • 14.4 Prefetch count 19:11 min
  • 14.5 Ordering, a skalowanie horyzontalne konsumenta 05:12 min
  • 14.6 Wersjonowanie, a kolejność przetwarzania wiadomości 22:44 min
  • 14.7 Single Active Consumer (SAC) 10:38 min
  • 14.8 Total ordering vs. causality 03:33 min
  • 14.9 Partycjonowanie przy użyciu consistent hash 03:32 min
  • 14.10 Consistent Hash Exchange 37:29 min
  • 14.11 Consistent Hash Exchange + Single Active Consumer 09:16 min
  • 14.12 Ordering, a logika biznesowa 06:48 min
  • 14.13 Kolejność przetwarzania wiadomości – dyskusja zamykająca 07:00 min
  • 15.1 Trwałość wiadomości – wprowadzenie 03:13 min
  • 15.2 Po co utrwalać wiadomości? 07:58 min
  • 15.3 Kiedy wiadomość jest utrwalana? 12:29 min
  • 15.4 Outbox jako suplement trwałości brokera 09:55 min
  • 15.5 Trwałość w RabbitMQ 4.0 i beyond 06:22 min
  • 15.6 Trwałość wiadomości – dyskusja zamykająca 02:07 min
  • 17.1 Azure Service Bus – wprowadzenie 04:28 min
  • 17.2 Azure i Azure Portal UI 14:21 min
  • 17.3 Topic, Subscription i Queue 23:07 min
  • 17.4 Azure SDK w naszej aplikacji 36:38 min
  • 17.5 Subscription filters 14:20 min
  • 17.6 Deduplikacja 15:26 min
  • 17.7 Sesje 21:49 min
  • 17.8 Azure Service Bus – dyskusja zamykająca 06:14 min
  • 18.1 Observability – wprowadzenie 03:53 min
  • 18.2 Observability – dlaczego nie jest opcjonalne? 02:40 min
  • 18.3 Czym jest distributed tracing? 01:37 min
  • 18.4 Distributed tracing w komunikacji synchronicznej 21:15 min
  • 18.5 Distributed tracing z message brokerem 23:56 min
  • 18.6 Observability – dyskusja zamykająca 04:43 min
  • 19.1 Testowanie – wprowadzenie 04:03 min
  • 19.2 Jak możemy testować komunikację asynchroniczną? 08:55 min
  • 19.3 Testowanie integracyjna z TestContainers 23:35 min
  • 19.4 Testy integracyjne producenta wiadomości 14:01 min
  • 19.5 Testy integracyjne konsumenta wiadomości 13:32 min
  • 19.6 Testowanie – dyskusja zamykająca 03:58 min
  • 20.1 Zakończenie 04:07 min
  • 21.1 RabbitMQ.Client – wersja 7.x 43:21 min
  • 21.2 Dokumentacja z AsyncAPI i EventCatalog 58:56 min
🛡️

100% gwarancji

14-dniowa gwarancja zwrotu

Kup kurs teraz →