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)); } } }
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)); } } }