コード例 #1
0
        /// <summary>
        /// Inits the manager from configuration using a custom configuration section tag delimiter.
        /// </summary>
        /// <param name="section">Configuration section tag delimiter</param>
        public static void Init(string section)
        {
            _logger.Info("Initializing.");

            try
            {
                if (_instance != null)
                {
                    throw new InvalidOperationException("Already initialized.");
                }

                ChannelsRabbitMQConfigurationSection conf = (ChannelsRabbitMQConfigurationSection)System.Configuration.ConfigurationManager.GetSection(section);

                _instance = new ChannelsRabbitMQManager(conf);

                _logger.Info("Initialized.");
            }
            catch (Exception e)
            {
                _logger.Error("Error during intialization.", e);
                throw e;
            }
        }
コード例 #2
0
        protected ChannelsRabbitMQManager(ChannelsRabbitMQConfigurationSection conf)
        {
            List <string> hostNames = null;

            ConnectionFactory factory = new ConnectionFactory();

            factory.AutomaticRecoveryEnabled  = true;
            factory.TopologyRecoveryEnabled   = true;
            factory.UseBackgroundThreadsForIO = false;

            if (conf != null)
            {
                if (conf.BrokerSettings != null)
                {
                    factory.RequestedHeartbeat           = conf.BrokerSettings.RequestedHeartbeatSeconds;
                    factory.RequestedFrameMax            = conf.BrokerSettings.RequestedFrameMaxBytes;
                    factory.ContinuationTimeout          = TimeSpan.FromMilliseconds(conf.BrokerSettings.ContinuationTimeoutMillis);
                    factory.HandshakeContinuationTimeout = TimeSpan.FromMilliseconds(conf.BrokerSettings.HandshakeContinuationTimeoutMillis);

                    factory.NetworkRecoveryInterval = TimeSpan.FromMilliseconds(conf.BrokerSettings.NetworkRecoveryIntervalMillis);

                    factory.RequestedChannelMax        = conf.BrokerSettings.RequestedChannelMaxCount;
                    factory.RequestedConnectionTimeout = conf.BrokerSettings.RequestedConnectionTimeoutMillis;
                    factory.SocketReadTimeout          = conf.BrokerSettings.SocketReadTimeoutMillis;
                    factory.SocketWriteTimeout         = conf.BrokerSettings.SocketWriteTimeoutMillis;
                }

                if (conf.ConnectionSettings != null)
                {
                    factory.HostName    = conf.ConnectionSettings.HostName;
                    factory.VirtualHost = conf.ConnectionSettings.VirtualHost;
                    factory.Port        = conf.ConnectionSettings.Port;

                    factory.UserName = conf.ConnectionSettings.UserName;
                    factory.Password = conf.ConnectionSettings.Password;

                    if (conf.ConnectionSettings.HostNamesPool != null && conf.ConnectionSettings.HostNamesPool.Count > 0)
                    {
                        hostNames = new List <string>();
                        foreach (ChannelsRabbitMQConfigurationSection.HostNameCollection.HostNameElement item in conf.ConnectionSettings.HostNamesPool)
                        {
                            hostNames.Add(item.Name);
                        }

                        if (!hostNames.Contains(conf.ConnectionSettings.HostName))
                        {
                            hostNames.Add(conf.ConnectionSettings.HostName);
                        }
                    }
                }

                if (conf.TLSSettings != null)
                {
                    //FUTURE: enable TLS support
                }
            }
            else
            {
                _logger.Info("Initialized, with defaults unchanged.");
            }

            if (hostNames != null)
            {
                Connection = factory.CreateConnection(hostNames);
            }
            else
            {
                Connection = factory.CreateConnection();
            }

            Connection.ConnectionBlocked += (sender, ea) => {
                _logger.WarnFormat("RabbitMQ connection BLOCKED localPort: {0}, reason: {1}", Connection.LocalPort, ea.Reason);
            };
            Connection.ConnectionUnblocked += (sender, ea) => {
                _logger.InfoFormat("RabbitMQ connection UNBLOCKED localPort: {0}", Connection.LocalPort);
            };
            Connection.ConnectionShutdown += (sender, ea) => {
                _logger.FatalFormat("RabbitMQ connection SHUTDOWN localPort: {0}, details: {1}", Connection.LocalPort, ea.ToString());
            };
        }