using RabbitMQ.Client; using System.Text; namespace _1CDataBus.RabbitMQ { public class RabbitConnection : IDisposable { private readonly IConnection _connection; private readonly IChannel _channel; private IConfiguration _configuration; private string _queueName; public RabbitConnection(IConfiguration configuration) { _configuration = configuration; var section = _configuration.GetSection("RabbitMqSettings"); var factory = new ConnectionFactory { HostName = section.GetValue("HostName"), UserName = section.GetValue("UserName"), Password = section.GetValue("Password"), VirtualHost = section.GetValue("VirtualHost") }; #if DEBUG _queueName = section.GetValue("TestQueueName"); #else _queueName = section.GetValue("QueueName"); #endif _connection = factory.CreateConnectionAsync().Result; _channel = _connection.CreateChannelAsync().Result; } public async Task SendMessage(string body) { await _channel.QueueDeclareAsync( queue: _queueName, durable: false, exclusive: false, autoDelete: false, arguments: null); var encoded = Encoding.UTF8.GetBytes(body); await _channel.BasicPublishAsync(string.Empty, _queueName, encoded); } public void Dispose() { _channel.Dispose(); _connection.Dispose(); } } }