TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.75K subscribers
Post #2815 2.57K
День 2338. #ЗаметкиНаПолях
RabbitMQ в .NET с Нуля. Продолжение

Начало

Получатель
Прослушивает очередь и обрабатывает сообщения по мере их поступления. Он должен:
- подключиться к RabbitMQ,
- подписаться на очередь,
- ожидать сообщений,
- десериализовывать и обрабатывать сообщения.

Рекомендуемый и наиболее удобный способ получения сообщений — настроить подписку с помощью интерфейса IAsyncBasicConsumer. Затем сообщения будут доставляться автоматически по мере их поступления. Один из способов реализации потребителя — использовать класс AsyncEventingBasicConsumer, в котором доставки и другие события жизненного цикла потребителя реализованы как события C#:
public class EmailConsumer : BackgroundService
{
private const string QUEUE =
"email-queue";

protected override async Task
ExecuteAsync(CancellationToken ct)
{
var fctry = new ConnectionFactory() {
HostName = "localhost" };
using var conn =
await fctry.CreateConnectionAsync(ct);
using var channel =
await conn.CreateChannelAsync(cancellationToken: ct);

await channel.QueueDeclareAsync(
queue: QUEUE,
durable: true,
exclusive: false,
autoDelete: false,
arguments: null,
cancellationToken: ct);

var consumer =
new AsyncEventingBasicConsumer(channel);
consumer.ReceivedAsync +=
async (sender, eventArgs) =>
{
var body = eventArgs.Body.ToArray();
var json = Encoding.UTF8.GetString(body);
var email =
JsonSerializer.Deserialize<Email>(json);

Console.WriteLine(
$"Email: {email?.To}, Тема: {email?.Subject}");

// Отправляем email…
Task.Delay(1000).Wait();

await ((AsyncEventingBasicConsumer)sender)
.Channel
.BasicAckAsync(
eventArgs.DeliveryTag,
multiple: false);
};

await channel.BasicConsumeAsync(
queue: QUEUE,
autoAck: true,
consumer: consumer,
cancellationToken: ct);
}
}


Окончание следует…

Источник:
https://thecodeman.net/posts/rabbitmq-in-dotnet-from-scratch
  • 👍 3
More from @netdeveloperdiary
  1. Oct 3, 2026День 2803. #Оффтоп Чем Заняться, Пока Работают Агенты? У VS Code Есть Ответ Сейчас большую…
  2. Oct 2, 2026День 2802. #Карьера #Юмор Секреты Программирования, Известные Только Легендам Ещё один пос…
  3. Oct 1, 2026Post #3357
  4. Sep 30, 2026Post #3356
  5. Sep 29, 2026Фото 3 (с) Анатолий Кулаков
  6. Sep 29, 2026День 2799. Конференция DotNext 2026. Часть 1 25 и 26 сентября в Москве прошла очередная ко…
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 →