Пример #1
0
        /// <summary>
        /// Checks if CAST has been enabled and remote communication has been configured for this platform.
        /// </summary>
        /// <returns>True if CAST communication should take place.</returns>
        public bool GetIsCastConfigured()
        {
            using (Profiler.Measure("CastService.GetIsCastConfigured"))
            {
                var isCastEnabled        = false;
                var isRabbitMqConfigured = false;

                // is CAST enabled?
                var castConfiguration = ConfigurationSettings.GetCastConfigurationSection();
                if (castConfiguration != null)
                {
                    var castSettings = castConfiguration.Cast;
                    if (castSettings != null)
                    {
                        isCastEnabled = castSettings.Enabled;
                    }
                }

                // is RabbitMQ configured for communication?
                var mqConfiguration = ConfigurationSettings.GetRabbitMqConfigurationSection();
                if (mqConfiguration != null)
                {
                    var mqSettings = mqConfiguration.RabbitMq;
                    if (mqSettings != null)
                    {
                        isRabbitMqConfigured = !string.IsNullOrEmpty(mqSettings.HostName);
                    }
                }

                return(isCastEnabled && isRabbitMqConfigured);
            }
        }
Пример #2
0
        private static ConnectionFactory GetConnectionFactory()
        {
            var rabbitConfiguration = ConfigurationSettings.GetRabbitMqConfigurationSection();

            if (rabbitConfiguration == null)
            {
                throw new Exception("Cannot connect. Message Queue configuration not present.");
            }

            if (string.IsNullOrEmpty(rabbitConfiguration.RabbitMq.HostName))
            {
                throw new Exception("Cannot connect. Message Queue host name has not been specified.");
            }

            var settings = rabbitConfiguration.RabbitMq;

            //
            // TODO: SSL support
            //
            return(new ConnectionFactory
            {
                HostName = settings.HostName,
                UserName = string.IsNullOrEmpty(settings.User) ? ConnectionFactory.DefaultUser : settings.User,
                Password = string.IsNullOrEmpty(settings.Password) ? ConnectionFactory.DefaultPass : settings.Password,
                Port = settings.Port > 0 ? settings.Port : AmqpTcpEndpoint.UseDefaultPort,
                VirtualHost = string.IsNullOrEmpty(settings.VirtualHost) ? ConnectionFactory.DefaultVHost : settings.VirtualHost
                              //Protocol = Protocols.DefaultProtocol,
                              //Ssl = new SslOption
                              //{
                              //    Enabled = true,
                              //    ServerName = hostName,
                              //    AcceptablePolicyErrors = SslPolicyErrors.RemoteCertificateNameMismatch | SslPolicyErrors.RemoteCertificateChainErrors
                              //}
            });
        }
        /// <summary>
        /// Starts the global message queue response manager listening for the responses to any registered requests.
        /// </summary>
        public static void Start()
        {
            try
            {
                if (_instance != null)
                {
                    return;
                }

                var config = ConfigurationSettings.GetRabbitMqConfigurationSection();
                if (config == null)
                {
                    return;
                }

                var settings = config.RabbitMq;
                if (settings == null)
                {
                    return;
                }

                if (string.IsNullOrEmpty(settings.HostName))
                {
                    return;
                }

                lock (Sync)
                {
                    if (_instance == null)
                    {
                        _instance = new MessageQueueResponseManager();
                        _instance.StartInternal();
                    }
                }

                var maxWait = TimeSpan.FromMinutes(1);
                var sw      = Stopwatch.StartNew();
                while (!_instance.IsListening && sw.Elapsed < maxWait)
                {
                    // wait... but only so long
                    Thread.Sleep(100);
                }

                if (!_instance.IsListening)
                {
                    EventLog.Application.WriteError("Message Queue Response Manager: Thread did not start in time. Exiting.");
                }

                using (new AdministratorContext())
                {
                    var requests = Entity.GetInstancesOfType <MessageQueueRequest>();
                    foreach (var request in requests)
                    {
                        //
                        // TODO: ? Maybe if the persisted entity is too old, it should just be deleted?
                        //

                        Add(request);
                    }
                }
            }
            catch (Exception e)
            {
                EventLog.Application.WriteError("Unexpected failure starting the message queue response manager. {0}", e);
            }
        }