Очереди и асинхронная обработка
Брокеры сообщений (RabbitMQ, Kafka), очереди и топики, гарантии доставки, идемпотентность, MassTransit, DLQ, backpressure, Channels и фоновые сервисы.
Как только сервисов становится больше одного, появляются сообщения. Ключевая мысль раздела: сеть ненадёжна, сообщения дублируются и теряются — и система должна быть спроектирована с учётом этого.
- 1 Для чего нужны очереди сообщений: RabbitMQ, Kafka, Azure Service Bus? Брокер сообщений — посредник, который принимает сообщения от производителей, надёжно хранит их и доставляет потребителям. Отправитель и получатель не обязаны работать од… Junior7 мин
- 2 Разница между очередью (Queue) и топиком (Topic/Exchange)? Очередь (point-to-point) — каждое сообщение обрабатывает ровно один потребитель из группы (competing consumers). Модель для команд и задач: «отправь письмо», «сгенерируй… Junior5 мин
- 3 At-least-once vs At-most-once vs Exactly-once delivery? At-most-once — «не больше одного раза»: сообщение может потеряться, но не будет дублей. Реализация: подтвердить (ack/commit offset) до обработки или вообще без подтвержд… Middle6 мин
- 4 Идемпотентность — что это и как обеспечивать? Идемпотентная операция — повторное выполнение с теми же входными данными даёт тот же результат и не создаёт дополнительных побочных эффектов: f(f(x)) = f(x). Зачем: в ра… Middle7 мин
- 5 Как работает MassTransit или другой .NET-клиент для брокеров? MassTransit — фреймворк сообщений для .NET поверх транспорта (RabbitMQ, Azure Service Bus, Amazon SQS, Kafka-rider, in-memory для тестов). Скрывает низкоуровневые детали… Middle6 мин
- 6 Dead Letter Queue — зачем нужна? Dead Letter Queue (DLQ) — отдельная очередь для сообщений, которые не удалось обработать после всех попыток, истёк TTL, превышен размер/лимит доставок или сообщение откл… Junior5 мин
- 7 Что такое Backpressure? Backpressure (противодавление) — механизм, с помощью которого медленный потребитель сигнализирует быстрому производителю притормозить, чтобы система не переполнилась. Бе… Middle6 мин
- 8 Channels в .NET (System.Threading.Channels) — для чего? System.Threading.Channels — высокопроизводительные асинхронные очереди в памяти для паттерна producer-consumer внутри процесса. Channel<T> состоит из ChannelWriter<T> (W… Middle5 мин
- 9 Background Services: IHostedService, BackgroundService? IHostedService — интерфейс фонового компонента, которым управляет Generic Host: StartAsync при старте приложения и StopAsync при остановке. Регистрация — AddHostedServic… Junior6 мин