コード例 #1
0
 internal void RecordConsumer(string consumerTag, RecordedConsumer consumer)
 {
     lock (_recordedEntitiesLock)
     {
         _recordedConsumers[consumerTag] = consumer;
     }
 }
コード例 #2
0
 private void UpdateConsumer(string oldTag, string newTag, RecordedConsumer consumer)
 {
     lock (_recordedEntitiesLock)
     {
         // make sure server-generated tags are re-added
         _recordedConsumers.Remove(oldTag);
         _recordedConsumers.Add(newTag, consumer);
     }
 }
 public void RecordConsumer(string name, RecordedConsumer c)
 {
     lock (m_recordedEntitiesLock)
     {
         if (!m_recordedConsumers.ContainsKey(name))
         {
             m_recordedConsumers.Add(name, c);
         }
     }
 }
コード例 #4
0
        private void RecoverConsumers()
        {
            if (_disposed)
            {
                throw new ObjectDisposedException(GetType().FullName);
            }

            Dictionary <string, RecordedConsumer> recordedConsumersCopy;

            lock (_recordedConsumers)
            {
                recordedConsumersCopy = new Dictionary <string, RecordedConsumer>(_recordedConsumers);
            }

            foreach (KeyValuePair <string, RecordedConsumer> pair in recordedConsumersCopy)
            {
                string           tag  = pair.Key;
                RecordedConsumer cons = pair.Value;

                try
                {
                    string newTag = cons.Recover();
                    lock (_recordedConsumers)
                    {
                        // make sure server-generated tags are re-added
                        _recordedConsumers.Remove(tag);
                        _recordedConsumers.Add(newTag, cons);
                    }

                    foreach (EventHandler <ConsumerTagChangedAfterRecoveryEventArgs> h in ConsumerTagChangeAfterRecovery?.GetInvocationList() ?? Array.Empty <Delegate>())
                    {
                        try
                        {
                            var eventArgs = new ConsumerTagChangedAfterRecoveryEventArgs(tag, newTag);
                            h(this, eventArgs);
                        }
                        catch (Exception e)
                        {
                            var args = new CallbackExceptionEventArgs(e);
                            args.Detail["context"] = "OnConsumerRecovery";
                            _delegate.OnCallbackException(args);
                        }
                    }
                }
                catch (Exception cause)
                {
                    string s = string.Format("Caught an exception while recovering consumer {0} on queue {1}: {2}",
                                             tag, cons.Queue, cause.Message);
                    HandleTopologyRecoveryException(new TopologyRecoveryException(s, cause));
                }
            }
        }
        public RecordedConsumer DeleteRecordedConsumer(string consumerTag)
        {
            RecordedConsumer rc = null;

            lock (m_recordedEntitiesLock)
            {
                if (m_recordedConsumers.ContainsKey(consumerTag))
                {
                    rc = m_recordedConsumers[consumerTag];
                    m_recordedConsumers.Remove(consumerTag);
                }
            }

            return(rc);
        }
        protected void RecoverConsumers()
        {
            var dict = new Dictionary <string, RecordedConsumer>(m_recordedConsumers);

            foreach (KeyValuePair <string, RecordedConsumer> pair in dict)
            {
                string           tag  = pair.Key;
                RecordedConsumer cons = pair.Value;

                try
                {
                    string newTag = cons.Recover();
                    lock (m_recordedConsumers)
                    {
                        // make sure server-generated tags are re-added
                        m_recordedConsumers.Remove(tag);
                        m_recordedConsumers.Add(newTag, cons);
                    }

                    if (m_consumerTagChange != null)
                    {
                        foreach (EventHandler <ConsumerTagChangedAfterRecoveryEventArgs> h in m_consumerTagChange.GetInvocationList())
                        {
                            try
                            {
                                var eventArgs = new ConsumerTagChangedAfterRecoveryEventArgs(tag, newTag);
                                h(this, eventArgs);
                            }
                            catch (Exception e)
                            {
                                var args = new CallbackExceptionEventArgs(e);
                                args.Detail["context"] = "OnConsumerRecovery";
                                m_delegate.OnCallbackException(args);
                            }
                        }
                    }
                }
                catch (Exception cause)
                {
                    string s = String.Format("Caught an exception while recovering consumer {0} on queue {1}: {2}",
                                             tag, cons.Queue, cause.Message);
                    HandleTopologyRecoveryException(new TopologyRecoveryException(s, cause));
                }
            }
        }