internal uint QueueConsumerCount(IMessageConnector connector, string queueName) { try { uint ret = 0; QueueDeclareOk ok = null; IModel channel = GetAssociatedChannel(connector); if (channel != null) { ok = channel.QueueDeclarePassive(queueName); } else if (IsConnect) { using (channel = CreateChannel(connector)) { ok = channel.QueueDeclarePassive(queueName); } } if (ok != null) { ret = ok.ConsumerCount; } return(ret); } catch (RabbitMQ.Client.Exceptions.OperationInterruptedException ex) { _logger.LogWarning(ex.Message); return(0); } catch (Exception e) { _logger.LogError(e.Message); throw; } }
internal void Disconnect(IMessageConnector connector, ushort closeCode) { if (!RegisteredConnectors.ContainsKey(connector.Id)) { return; } Close(connector, closeCode); }
private void Close(IMessageConnector connector, ushort closeCode) { IModel channel = GetAssociatedChannel(connector); channel?.Close(closeCode, CloseCodeReasonDictionary[closeCode]); if (RegisteredConnectors.Count == 0 && IsConnect) { _connection.ConnectionShutdown -= OnConnectionShutdown; _connection.Close(closeCode, CloseCodeReasonDictionary[closeCode]); _factory = null; } }
public IModel CreateChannel(IMessageConnector connector) { IModel channel = _connection.CreateModel(); channel.ModelShutdown += (sender, args) => { _logger.LogInformation($"Channel shutdown for connector Id: {connector.Id} - type {connector.GetType().Name} - reason id: {args.ReplyCode} - Text: {args.ReplyText} - Initiator: {args.Initiator}"); RegisteredConnectors.TryRemove(connector.Id, out _); }; RegisterConnector(connector, channel); return(channel); }
internal IModel GetAssociatedChannel(IMessageConnector connector) { IModel channel = null; if (IsConnect && RegisteredConnectors.TryGetValue(connector.Id, out channel)) { if (channel == null || channel.IsOpen) { RegisteredConnectors.TryRemove(connector.Id, out _); } } return(channel); }
internal void ConsumeQueue(IMessageConnector connector, IModel channel, string queueName, string consumerTag, bool autoAck, IBasicConsumer consumer) => channel.BasicConsume(queueName, autoAck, Guid.NewGuid().ToString(), consumer);
internal void RegisterConnector(IMessageConnector connector, IModel channel) { RegisteredConnectors[connector.Id] = channel; _logger.LogInformation($"Register channel for connector Id: {connector.Id} - type {connector.GetType().Name}."); }