public ConnectionFactoryWrapper(ConnectionConfiguration connectionConfiguration, IClusterHostSelectionStrategy<ConnectionFactoryInfo> clusterHostSelectionStrategy)
{
this.clusterHostSelectionStrategy = clusterHostSelectionStrategy;
Preconditions.CheckNotNull(connectionConfiguration, "connectionConfiguration");
Preconditions.CheckAny(connectionConfiguration.Hosts, "connectionConfiguration", "At least one host must be defined in connectionConfiguration");
Configuration = connectionConfiguration;
foreach (var hostConfiguration in Configuration.Hosts)
{
var connectionFactory = new ConnectionFactory
{
UseBackgroundThreadsForIO = connectionConfiguration.UseBackgroundThreads,
AutomaticRecoveryEnabled = false,
TopologyRecoveryEnabled = false
};
if (connectionConfiguration.AMQPConnectionString != null)
{
connectionFactory.uri = connectionConfiguration.AMQPConnectionString;
}
connectionFactory.HostName = hostConfiguration.Host;
if(connectionFactory.VirtualHost == "/")
connectionFactory.VirtualHost = Configuration.VirtualHost;
if(connectionFactory.UserName == "guest")
connectionFactory.UserName = Configuration.UserName;
if(connectionFactory.Password == "guest")
connectionFactory.Password = Configuration.Password;
if (connectionFactory.Port == -1)
connectionFactory.Port = hostConfiguration.Port;
if (hostConfiguration.Ssl.Enabled)
connectionFactory.Ssl = hostConfiguration.Ssl;
//Prefer SSL configurations per each host but fall back to ConnectionConfiguration's SSL configuration for backwards compatibility
else if (Configuration.Ssl.Enabled)
connectionFactory.Ssl = Configuration.Ssl;
connectionFactory.RequestedHeartbeat = Configuration.RequestedHeartbeat;
connectionFactory.ClientProperties = Configuration.ClientProperties;
connectionFactory.AuthMechanisms = Configuration.AuthMechanisms;
clusterHostSelectionStrategy.Add(new ConnectionFactoryInfo(connectionFactory, hostConfiguration));
}
}