/// <summary> /// Extends the Run phase that is called by Windows Azure runtime after the role instance has been initialized. /// </summary> protected override void OnRoleRun() { IInterRoleCommunicationExtension interCommExtension = Extensions.Find <IInterRoleCommunicationExtension>(); IInterRoleEventSubscriberExtension subscriber = Extensions.Find <IInterRoleEventSubscriberExtension>(); if (interCommExtension != null && subscriber != null) { this.interCommSubscription = interCommExtension.Subscribe(subscriber); } }
/// <summary> /// Extends the OnStart phase that is called by Windows Azure runtime to initialize the role instance. /// </summary> /// <returns>True if initialization succeeds, otherwise false.</returns> protected override bool OnRoleStart() { this.EnsureExists <WorkItemProcessorConfigurationExtension>(); this.EnsureExists <WorkQueueLocationResolverExtension>(); this.EnsureExists <ScalableTransformServiceClientExtension>(); this.EnsureExists <EndpointConfigurationDiscoveryExtension>(); this.EnsureExists <RulesEngineServiceClientExtension>(); this.EnsureExists <InterRoleEventSubscriberExtension>(); IWorkItemProcessorConfigurationExtension configSettingsExtension = Extensions.Find <IWorkItemProcessorConfigurationExtension>(); IEndpointConfigurationDiscoveryExtension discoveryExtension = Extensions.Find <IEndpointConfigurationDiscoveryExtension>(); IInterRoleCommunicationExtension interCommExtension = Extensions.Find <IInterRoleCommunicationExtension>(); IInterRoleEventSubscriberExtension interCommSubscriber = Extensions.Find <IInterRoleEventSubscriberExtension>(); CloudQueueLocation inputQueueLocation = new CloudQueueLocation() { StorageAccount = configSettingsExtension.Settings.CloudStorageAccount, QueueName = configSettingsExtension.Settings.WorkItemQueue, VisibilityTimeout = configSettingsExtension.Settings.WorkItemQueueVisibilityTimeout }; CloudQueueLocation outputQueueLocation = new CloudQueueLocation() { StorageAccount = configSettingsExtension.Settings.CloudStorageAccount, QueueName = configSettingsExtension.Settings.OutputQueue, VisibilityTimeout = configSettingsExtension.Settings.OutputQueueVisibilityTimeout }; // Instantiate queue listeners. var inputQueueListener = new CloudQueueListenerExtension <XDocument>(inputQueueLocation); var outputQueueListener = new CloudQueueListenerExtension <XDocument>(outputQueueLocation); // Configure the input queue listener. inputQueueListener.QueueEmpty += HandleQueueEmptyEvent; inputQueueListener.DequeueBatchSize = configSettingsExtension.Settings.DequeueBatchSize; inputQueueListener.DequeueInterval = configSettingsExtension.Settings.MinimumIdleInterval; // Configure the output queue listener. outputQueueListener.QueueEmpty += HandleQueueEmptyEvent; outputQueueListener.DequeueBatchSize = configSettingsExtension.Settings.DequeueBatchSize; outputQueueListener.DequeueInterval = configSettingsExtension.Settings.MinimumIdleInterval; // Instantiate queue subscribers. InputQueueSubscriberExtension inputQueueSubscriber = new InputQueueSubscriberExtension(); OutputQueueSubscriberExtension outputQueueSubscriber = new OutputQueueSubscriberExtension(); // Register subscribers with queue listeners. inputQueueListener.Subscribe(inputQueueSubscriber); outputQueueListener.Subscribe(outputQueueSubscriber); // Register custom extensions for this worker role. Extensions.Add(inputQueueSubscriber); Extensions.Add(outputQueueSubscriber); Extensions.Add(outputQueueListener); Extensions.Add(inputQueueListener); var contractTypeMatchCondition = ServiceEndpointDiscoveryCondition.ContractTypeExactMatch(typeof(IScalableTransformationServiceContract)); var bindingTypeMatchCondition = ServiceEndpointDiscoveryCondition.BindingTypeExactMatch(typeof(NetTcpRelayBinding)); discoveryExtension.RegisterDiscoveryAction(new[] { contractTypeMatchCondition, bindingTypeMatchCondition }, (endpoint) => { NetTcpRelayBinding relayBinding = endpoint.Binding as NetTcpRelayBinding; if (relayBinding != null) { relayBinding.TransferMode = TransferMode.Streamed; } }); // Register a subscriber for all inter-role communication events. if (interCommExtension != null && interCommSubscriber != null) { this.interCommSubscription = interCommExtension.Subscribe(interCommSubscriber); } return(true); }