// Can't really infer the topic from the subscription, since subscriptions of the same // name can exist across different topics (i.e. "all" currently) public EventProcessor CreateEventProcessor(string subscription, IEventHandler handler, ITextSerializer serializer) { if (!this.initialized) throw new InvalidOperationException("Service bus configuration has not been initialized."); var topicSettings = this.settings.Topics.Find(x => x.IsEventBus); if (topicSettings == null) throw new ArgumentOutOfRangeException("No topic has been marked with the IsEventBus attribute. Cannot create event processor."); var subscriptionSettings = topicSettings.Subscriptions.Find(x => x.Name == subscription); if (subscriptionSettings == null) throw new ArgumentOutOfRangeException(string.Format( CultureInfo.CurrentCulture, "Subscription '{0}' for topic '{1}' has not been registered in the service bus configuration.", subscription, topicSettings.Path)); var receiver = subscriptionSettings.RequiresSession ? (IMessageReceiver)new SessionSubscriptionReceiver(this.settings, topicSettings.Path, subscription) : (IMessageReceiver)new SubscriptionReceiver(this.settings, topicSettings.Path, subscription); var processor = new EventProcessor(receiver, serializer); processor.Register(handler); return processor; }
public EventProcessor CreateEventProcessor(string subscription, IEventHandler handler, ITextSerializer serializer, bool instrumentationEnabled = false) { if (!this.initialized) throw new InvalidOperationException("Service bus configuration has not been initialized."); TopicSettings topicSettings = null; SubscriptionSettings subscriptionSettings = null; foreach (var settings in this.settings.Topics.Where(t => t.IsEventBus)) { subscriptionSettings = settings.Subscriptions.Find(s => s.Name == subscription); if (subscriptionSettings != null) { topicSettings = settings; break; } } if (subscriptionSettings == null) { throw new ArgumentOutOfRangeException( string.Format( CultureInfo.CurrentCulture, "Subscription '{0}' has not been registered for an event bus topic in the service bus configuration.", subscription)); } IMessageReceiver receiver; if (subscriptionSettings.RequiresSession) { var instrumentation = new SessionSubscriptionReceiverInstrumentation(subscription, instrumentationEnabled); try { receiver = (IMessageReceiver)new SessionSubscriptionReceiver(this.settings, topicSettings.Path, subscription, true, instrumentation); } catch { instrumentation.Dispose(); throw; } } else { var instrumentation = new SubscriptionReceiverInstrumentation(subscription, instrumentationEnabled); try { receiver = (IMessageReceiver)new SubscriptionReceiver(this.settings, topicSettings.Path, subscription, true, instrumentation); } catch { instrumentation.Dispose(); throw; } } EventProcessor processor; try { processor = new EventProcessor(receiver, serializer); } catch { using (receiver as IDisposable) { } throw; } try { processor.Register(handler); return processor; } catch { processor.Dispose(); throw; } }