public void AddSubscription(IEventSubscription sub) { // if the subscription is a wiretap, add it to a different list if (sub.IsWiretap()) { _wiretaps.Add(sub); return; } lock (_subscriptions) { if (false == _subscriptions.ContainsKey(sub.Topic)) { _subscriptions.Add(sub.Topic, new List<IEventSubscription>()); } _subscriptions[sub.Topic].Add(sub); } }
public void AddSubscription(IEventSubscription subscription) { List<IExchange> exchanges = new List<IExchange>(); if (subscription.IsWiretap()) { exchanges.AddRange(_exchangeLocator.GetAllExchanges()); } else { // find out which exchange we need to bind to exchanges.Add(_exchangeLocator.GetExchange(subscription.Topic)); } exchanges.ForEach(ex => { // now, get or declare the queue for this exchange IQueue queue = this.GetQueue(ex); // create a binding AmqpBinding binding = new AmqpBinding(ex, subscription.Topic); // add the binding to the queue if it doesn't already exist if (false == queue.ContainsBinding(binding)) { queue.AddBinding(binding); } // ensure an entry for this binding exists if (false == _bindingCount.ContainsKey(binding)) { _bindingCount.Add(binding, 0); } // finally, increment the count of subscriptions for this binding _bindingCount[binding]++; }); }
public void RemoveSubscription(IEventSubscription sub) { // if the subscription is a wiretap, remove it from a different list if (sub.IsWiretap()) { _wiretaps.Remove(sub); return; } lock (_subscriptions) { if (_subscriptions.ContainsKey(sub.Topic)) { if (_subscriptions[sub.Topic].Contains(sub)) { _subscriptions[sub.Topic].Remove(sub); } } } }