/
ilyamikhaylov07
/
integration_solution_course
Обзор
Документация
Войти
/
ilyamikhaylov07
/
integration_solution_course
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
TaskAPI/Messaging/RabbitMqService.cs
49 строк
2 KB
Ilya
add 4 laba
02 ноя 2025, 19:16
02 ноя 2025, 19:16
fdd8d01
Код
Авторство
О чём код?
using Microsoft.EntityFrameworkCore.Metadata; using RabbitMQ.Client; using RabbitMQ.Client.Events; using System.Text; namespace TaskAPI.Messaging { public class RabbitMqService { private readonly IConnection _connection; private IChannel _channel; public RabbitMqService(IConnection connection) { _connection = connection; _channel = _connection.CreateChannelAsync().GetAwaiter().GetResult(); } public async Task DeclareQueueAsync(string queueName) { using var channel = await _connection.CreateChannelAsync(); await channel.QueueDeclareAsync(queue: queueName, exclusive: false, durable: false, autoDelete: false, arguments: null); } public async Task SendAsync(string message, string queueName) { using var channel = await _connection.CreateChannelAsync(); var body = Encoding.UTF8.GetBytes(message); await channel.BasicPublishAsync(exchange: string.Empty, routingKey: queueName, body: body); } public async Task ConsumeAsync(string queueName, Func<byte[], Task> onMessage) { var _consumerChannel = await _connection.CreateChannelAsync(); var consumer = new AsyncEventingBasicConsumer(_consumerChannel); consumer.ReceivedAsync += async (sender, ea) => { await onMessage(ea.Body.ToArray()); await _consumerChannel.BasicAckAsync(ea.DeliveryTag, multiple: false); }; await _consumerChannel.BasicConsumeAsync(queueName, autoAck: false, consumer: consumer); } } }