TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.75K subscribers
Post #2814 2.53K
День 2337. #ЗаметкиНаПолях
RabbitMQ в .NET с Нуля. Начало
RabbitMQ — это брокер сообщений. Он как надёжный почтовый сервис для вашего ПО. Вместо того, чтобы одна система напрямую вызывала другую (что создаёт тесную связь), RabbitMQ выступает в качестве посредника:
- одна часть вашего приложения отправляет сообщение,
- другая часть получает и обрабатывает его.
Это называется асинхронной связью, и отлично подходит для производительности, надёжности и масштабируемости.

Ключевые компоненты:
- Производитель (Producer) – отправляет сообщения.
- Потребитель (Consumer) – получает сообщения.
- Очередь (Queue) – место, где сообщения ждут обработки.
- Обменник (Exchange) – «диспетчер», который направляет сообщения в соответствующие очереди.
- Привязка (Binding) – правила, которые связывают обменники с очередями.

Установка RabbitMQ (локально с Docker)
1. Выполните команду:
docker run -d --hostname rabbitmq
--name rabbitmq \
-p 5672:5672 -p 15672:15672 rabbitmq:3-management

2. Зайдите в панель управления http://localhost:15672. Вход по умолчанию: guest/guest

Реализация в .NET
Создадим простой проект:
- API отправляет «e-mail» в RabbitMQ,
- фоновый сервис прослушивает и «обрабатывает» сообщение.

Добавим RabbitMQ в проект:
Install-Package RabbitMQ.Client


Определим класс сообщения:
public record Email(string To, string Subject, string Body);


Производитель
Его роль – отправлять сообщения в RabbitMQ. Он должен:
- подключиться к RabbitMQ,
- создать очередь (или проверить её существование),
- сериализовать сообщение (например, в JSON),
- отправить сообщение в очередь.

public class EmailPublisher
{
private const string QUEUE =
"email-queue";

public async Task Publish(Email email)
{
var fctry = new ConnectionFactory() {
HostName = "localhost" };
using var conn =
await fctry.CreateConnectionAsync();
using var channel =
await conn.CreateChannelAsync();

// Создаём очередь
await channel.QueueDeclareAsync(
queue: QUEUE,
durable: true,
exclusive: false,
autoDelete: false,
arguments: null);

// Создаём сообщение
var msg = JsonSerializer.Serialize(email);
var body = Encoding.UTF8.GetBytes(msg);

// Публикуем
await channel.BasicPublishAsync(
exchange: string.Empty,
routingKey: QUEUE,
mandatory: true,
basicProperties:
new BasicProperties { Persistent = true },
body: body);
}
}


Параметры очереди:
- durable: сохранять на диске, чтобы очередь не терялась при перезапуске брокера,
- exclusive: может ли использоваться другими соединениями,
- autoDelete: удалять ли сообщения при отключении последнего потребителя.

Продолжение следует…

Источник:
https://thecodeman.net/posts/rabbitmq-in-dotnet-from-scratch
  • 👍 12
More from @netdeveloperdiary
  1. Oct 2, 2026День 2802. #Карьера #Юмор Секреты Программирования, Известные Только Легендам Ещё один пос…
  2. Oct 1, 2026Post #3357
  3. Sep 30, 2026Post #3356
  4. Sep 29, 2026Фото 3 (с) Анатолий Кулаков
  5. Sep 29, 2026День 2799. Конференция DotNext 2026. Часть 1 25 и 26 сентября в Москве прошла очередная ко…
  6. Sep 28, 2026День 2798. #Оффтоп Утиная Типизация в C# с Помощью Перехватчиков. Часть 2 Некоторое время…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →