/// <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); } }
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); } }