/
egopen
/
Lab1
Обзор
Документация
Войти
/
egopen
/
Lab1
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Lab4/library/BackWorkers/ResponseWorker.cs
70 строк
2 KB
Egopen
lab 4
01 ноя 2025, 18:03
01 ноя 2025, 18:03
78d017c
Код
Авторство
О чём код?
using RabbitMQ.Client; using RabbitMQ.Client.Events; using System.Text; namespace library.BackWorkers { public class ResponseWorker : IHostedService { private readonly IConnection _conn; private IChannel _channel; public ResponseWorker(IConnection connection) { _conn = connection; } public async Task StartAsync(CancellationToken token) { _channel = await _conn.CreateChannelAsync(); var responseQueues = new[] { "auth.register", "auth.login", "users.get_by_id", "users.get_all", "users.delete", "books.get_book", "books.get_books", "books.add_book", "books.delete_book", "books.get_author", "books.add_author", "books.delete_author", "books.update_book" }; foreach (var responseQueue in responseQueues) { var exchange = responseQueue.Split('.')[0].ToString(); var key = responseQueue.Split('.')[1].ToString(); exchange = exchange[0].ToString().ToUpper() + exchange.Substring(1); await _channel.QueueBindAsync(responseQueue, exchange, key + ".response"); } var consumer = new AsyncEventingBasicConsumer(_channel); consumer.ReceivedAsync += async (ch, ea) => { var body = ea.Body.ToArray(); var message = Encoding.UTF8.GetString(body); var routingKey = ea.RoutingKey; Console.WriteLine($"=== RESPONSE RECEIVED ==="); Console.WriteLine($"Queue: {routingKey}"); Console.WriteLine($"Message: {message}"); Console.WriteLine($"Timestamp: {DateTime.Now:yyyy-MM-dd HH:mm:ss}"); Console.WriteLine("=========================="); Console.WriteLine(); await _channel.BasicAckAsync(ea.DeliveryTag, false); }; foreach (var queue in responseQueues) { await _channel.BasicConsumeAsync(queue, autoAck: false, consumer); } } public async Task StopAsync(CancellationToken token) { await _channel.CloseAsync(); await _channel.DisposeAsync(); } } }