Exemplo n.º 1
0
 private void RemoveEventProducer(EnvironmentComponents envConfig)
 {
     if (envConfig.EventProducer != null)
     {
         envConfig.EventProducer.Close();
         envConfig.EventProducer = null;
     }
 }
Exemplo n.º 2
0
 private void UpdateCmdMsgQ(EnvironmentComponents envConfig, string publicationAddress)
 {
     var mongoEnv = envConfig.Config.Where(kvp => kvp.Key.StartsWith("Mongo"));
     var provider = new ServiceHostProvider(mongoEnv);
     var sh = provider.Queryable().Single(q => q.Machine == Environment.MachineName);
     sh.CommandMessageQueue = publicationAddress;
     sh = provider.Update(sh);
 }
Exemplo n.º 3
0
 private void RemoveCommandListener(EnvironmentComponents envConfig)
 {
     if (envConfig.CommandConsumer != null)
     {
         UpdateCmdMsgQ(envConfig, string.Empty);
         envConfig.CommandConsumer.Close();
         envConfig.CommandConsumer = null;
     }
 }
Exemplo n.º 4
0
        private void ManageServiceComponents(EnvironmentComponents envComponents)
        {
            var environment = envComponents.Environment;
            var mongoEnv = envComponents.Config.Where(kvp => kvp.Key.StartsWith("Mongo"));

            var provider = new ServiceHostProvider(mongoEnv);
            var sh = provider.Queryable().Single(q => q.Machine == Environment.MachineName);
            var configuredComponents = sh.Components;

            var configuredIds = configuredComponents.Select(c => c.Id);
            var existingIds = envComponents.Components.Select(c => c.Id);

            // newly configured components
            foreach (var newlyConfiguredId in configuredIds.Except(existingIds))
                envComponents.Components.Add(new RunningServiceComponent(environment, this.ConfigURL, configuredComponents.Single(c => c.Id == newlyConfiguredId), envComponents.Config));

            // newly removed components
            foreach (var newlyDeletedId in existingIds.Except(configuredIds))
            {
                RunningServiceComponent rsc = envComponents.Components.Single(c => c.Id == newlyDeletedId);
                rsc.Stop(envComponents.EventProducer);
                envComponents.Components.Remove(rsc);
            }

            // not new, not deleted, possibly updated
            foreach (var possiblyUpdatedId in configuredIds.Intersect(existingIds))
            {
                var rsc = envComponents.Components.Single(c => c.Id == possiblyUpdatedId);
                var sc = configuredComponents.Single(c => c.Id == possiblyUpdatedId);

                if (rsc.RowVersion != sc.RowVersion)
                    rsc.Update(envComponents.EventProducer, sc);
            }
        }
Exemplo n.º 5
0
        private void ManageMessageBrokerConnection(EnvironmentComponents envConfig)
        {
            var environment = envConfig.Environment;
            var rabbitEnv = envConfig.Config.Where(kvp => kvp.Key.StartsWith("RabbitMQ"));

            if (envConfig.MessageBrokerConnection == null)
            {
                envConfig.MessageBrokerConnection = new MessageBrokerConnection(rabbitEnv);
                envConfig.EventProducer = new EventProducer(envConfig.MessageBrokerConnection.Connection);
                CreateCommandListener(envConfig);
            }
            else
            {
                var existingConnection = envConfig.MessageBrokerConnection;

                var server = rabbitEnv.Single(kvp => kvp.Key == "RabbitMQServer").Value;
                var port = Convert.ToInt32(rabbitEnv.Single(kvp => kvp.Key == "RabbitMQPort").Value);
                var vHost = rabbitEnv.Single(kvp => kvp.Key == "RabbitMQVHost").Value;

                if (existingConnection.Server != server ||
                    existingConnection.Port != port ||
                    existingConnection.VHost != vHost)
                {
                    RemoveCommandListener(envConfig);
                    RemoveEventProducer(envConfig);

                    existingConnection.Close();
                    envConfig.MessageBrokerConnection = new MessageBrokerConnection(rabbitEnv);

                    CreateEventProducer(envConfig);
                    CreateCommandListener(envConfig);
                }
            }
        }
Exemplo n.º 6
0
        private void CreateEventProducer(EnvironmentComponents envConfig)
        {
            if (envConfig.EventProducer != null)
                RemoveEventProducer(envConfig);

            envConfig.EventProducer = new EventProducer(envConfig.MessageBrokerConnection.Connection);
        }
Exemplo n.º 7
0
        private void CreateCommandListener(EnvironmentComponents envConfig)
        {
            if (envConfig.CommandConsumer != null)
                RemoveCommandListener(envConfig);

            envConfig.CommandConsumer = new CommandConsumer(envConfig.MessageBrokerConnection.Connection);

            #region ReloadFiles
            envConfig.CommandConsumer.RegisterCommandHandler<ReloadFiles>((props, cmd) =>
            {
                var reply = new ReloadFilesAck(cmd) as ICommand;

                try
                {
                    Console.WriteLine("{0} Command received ({1})", cmd.GetType().Name, cmd.CorrelationId);
                    this.Reloader.Reload();
                }
                catch
                { reply = new ReloadFilesNack(cmd) as ICommand; }

                return reply;
            });
            #endregion

            #region ReloadConfiguration
            envConfig.CommandConsumer.RegisterCommandHandler<ReloadConfiguration>((props, cmd) =>
            {
                var reply = new ReloadConfigurationAck(cmd) as ICommand;
                var environment = envConfig.Environment;

                try
                {
                    Console.WriteLine("{0} Command received ({1})", cmd.GetType().Name, cmd.CorrelationId);
                    this.LoadConfiguration(environment);
                }
                catch
                { reply = new ReloadConfigurationNack(cmd) as ICommand; }

                return reply;
            });
            #endregion

            #region Start Component
            envConfig.CommandConsumer.RegisterCommandHandler<StartComponent>((props, cmd) =>
            {
                var reply = new StartComponentAck(cmd) as ICommand;
                var environment = envConfig.Environment;

                try
                {
                    RunningServiceComponent r = envConfig.Components.Single(rsc => rsc.Id == (cmd as StartComponent).ServiceComponentId);
                    r.Start(envConfig.EventProducer);
                }
                catch
                { reply = new StartComponentNack(cmd) as ICommand; }

                return reply;
            });
            #endregion

            #region Stop Component
            envConfig.CommandConsumer.RegisterCommandHandler<StopComponent>((props, cmd) =>
            {
                var reply = new StopComponentAck(cmd) as ICommand;
                var environment = envConfig.Environment;

                try
                {
                    RunningServiceComponent r = envConfig.Components.Single(rsc => rsc.Id == (cmd as StopComponent).ServiceComponentId);
                    r.Stop(envConfig.EventProducer);
                }
                catch
                { reply = new StopComponentNack(cmd) as ICommand; }

                return reply;
            });
            #endregion

            #region Activate Component
            envConfig.CommandConsumer.RegisterCommandHandler<ActivateComponent>((props, cmd) =>
            {
                var reply = new ActivateComponentAck(cmd) as ICommand;
                var environment = envConfig.Environment;

                try
                {
                    RunningServiceComponent r = envConfig.Components.Single(rsc => rsc.Id == (cmd as ActivateComponent).ServiceComponentId);
                    r.Activate(envConfig.EventProducer);
                }
                catch
                { reply = new ActivateComponentNack(cmd) as ICommand; }

                return reply;
            });
            #endregion

            #region Deactivate Component
            envConfig.CommandConsumer.RegisterCommandHandler<DeactivateComponent>((props, cmd) =>
            {
                var reply = new DeactivateComponentAck(cmd) as ICommand;
                var environment = envConfig.Environment;

                try
                {
                    RunningServiceComponent r = envConfig.Components.Single(rsc => rsc.Id == (cmd as DeactivateComponent).ServiceComponentId);
                    r.Deactivate(envConfig.EventProducer);
                }
                catch
                { reply = new DeactivateComponentNack(cmd) as ICommand; }

                return reply;
            });
            #endregion

            #region Pause Component
            envConfig.CommandConsumer.RegisterCommandHandler<PauseComponent>((props, cmd) =>
            {
                var reply = new PauseComponentAck(cmd) as ICommand;
                var environment = envConfig.Environment;

                try
                {
                    RunningServiceComponent r = envConfig.Components.Single(rsc => rsc.Id == (cmd as PauseComponent).ServiceComponentId);
                    r.Pause(envConfig.EventProducer);
                }
                catch
                { reply = new PauseComponentNack(cmd) as ICommand; }

                return reply;
            });
            #endregion

            #region Continue Component
            envConfig.CommandConsumer.RegisterCommandHandler<ContinueComponent>((props, cmd) =>
            {
                var reply = new ContinueComponentAck(cmd) as ICommand;
                var environment = envConfig.Environment;

                try
                {
                    RunningServiceComponent r = envConfig.Components.Single(rsc => rsc.Id == (cmd as ContinueComponent).ServiceComponentId);
                    r.Continue(envConfig.EventProducer);
                }
                catch
                { reply = new ContinueComponentNack(cmd) as ICommand; }

                return reply;
            });
            #endregion

            UpdateCmdMsgQ(envConfig, envConfig.CommandConsumer.PublicationAddress.ToString());
        }