Esempio n. 1
0
 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;
     }
 }
Esempio n. 2
0
 internal void Disconnect(IMessageConnector connector, ushort closeCode)
 {
     if (!RegisteredConnectors.ContainsKey(connector.Id))
     {
         return;
     }
     Close(connector, closeCode);
 }
Esempio n. 3
0
        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;
            }
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
 internal void ConsumeQueue(IMessageConnector connector, IModel channel, string queueName, string consumerTag, bool autoAck, IBasicConsumer consumer) => channel.BasicConsume(queueName, autoAck, Guid.NewGuid().ToString(), consumer);
Esempio n. 7
0
 internal void RegisterConnector(IMessageConnector connector, IModel channel)
 {
     RegisteredConnectors[connector.Id] = channel;
     _logger.LogInformation($"Register channel for connector Id: {connector.Id} - type {connector.GetType().Name}.");
 }