/
ivanstrike
/
tasker
Обзор
Документация
Войти
/
ivanstrike
/
tasker
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Lab4/Server/Services/RabbitMQConnectionFactory.cs
56 строк
1 KB
ivanstrike
laba4
21 дек 2025, 21:13
21 дек 2025, 21:13
e9bb9a2
Код
Авторство
О чём код?
using RabbitMQ.Client; using TaskerMQ.Server.Configuration; namespace TaskerMQ.Server.Services; public class RabbitMQConnectionFactory : IDisposable { private readonly RabbitMQSettings _settings; private IConnection? _connection; private IChannel? _channel; private readonly SemaphoreSlim _semaphore = new(1, 1); public RabbitMQConnectionFactory(RabbitMQSettings settings) { _settings = settings; } public async Task<IChannel> GetChannelAsync() { await _semaphore.WaitAsync(); try { if (_channel == null || !_channel.IsOpen) { if (_connection == null || !_connection.IsOpen) { var factory = new ConnectionFactory { HostName = _settings.Host, Port = _settings.Port, UserName = _settings.Username, Password = _settings.Password }; _connection = await factory.CreateConnectionAsync(); } _channel = await _connection.CreateChannelAsync(); await _channel.BasicQosAsync(0, _settings.PrefetchCount, false); } return _channel; } finally { _semaphore.Release(); } } public void Dispose() { _channel?.Dispose(); _connection?.Dispose(); _semaphore.Dispose(); } }