private void StopListen() { if (_rabbitMqConnection != null) { _rabbitMqConnection.BrokerConnection.CallbackException -= OnConnectionCallbackException; } if (_queueChannel != null) { _queueChannel.CallbackException -= OnCallbackException; //_queueChannel.ModelShutdown -= OnModelShutdown; } StopListenQueue(ref _consumerTag, ref _queueChannel); _rabbitMqConnection = null; }
private void StartListen() { _rabbitMqConnection = _rabbitMqConnectionPool.Get(); _rabbitMqConnection.BrokerConnection.CallbackException += OnConnectionCallbackException; _queueChannel = _rabbitMqConnection.CreateChannel(); _queueChannel.CallbackException += OnCallbackException; //_queueChannel.ModelShutdown += OnModelShutdown; // возвращаем канал в пул _rabbitMqConnectionPool.Return(_rabbitMqConnection); var consumer = new EventingBasicConsumer(_queueChannel); consumer.Received += (ch, ea) => { _handleMessageEvent.Reset(); var cts = new CancellationTokenSource(); try { using (var body = new MemoryStream(ea.Body.ToArray(), 0, ea.Body.Length)) { _handler(body, _messageExchangeSerializer).GetAwaiter().GetResult(); ConfirmMessage(ea); } } catch (Exception ex) { Console.WriteLine(ex); try { AbandonMessage(ea, ex.Message); } catch (Exception e) { Console.WriteLine("При отклонении сообщения возникла ошибка", e); } } finally { cts.Cancel(); _handleMessageEvent.Set(); } }; _consumerTag = _queueChannel.BasicConsume(_queueName, false, consumer); }
public RabbitMQChannel(IModel channel, RabbitMqConnection connection) { Channel = channel; Connection = connection; }