/// <summary> /// 添加rabbitmq连接配置, 若存在相同<see cref="RabbitMQOption.Name"/>则不添加 /// </summary> /// <param name="option"></param> public void TryAdd(RabbitMQOption option) { if (!Options.Any(a => a.Name == option.Name)) { Options.Add(option); } }
/// <summary> /// 添加rabbitmq连接配置 /// </summary> /// <param name="option"></param> /// <exception cref="ChannelPoolNameAlreadyExistsException">若存在名称相同的<see cref="RabbitMQOption.Name"/>则抛出此异常</exception> public void Add(RabbitMQOption option) { if (Options.Any(a => a.Name == option.Name)) { throw new ChannelPoolNameAlreadyExistsException(option.Name); } Options.Add(option); }
internal ChannelPool(ILogger logger, RabbitMQOption options) { _logger = logger; _maxSize = options.MaxChannelPoolSize; _pool = new ConcurrentQueue <IModel>(); _connectionActivator = CreateConnection(options); HostAddress = $"{options.HostName}:{options.Port}"; _logger.LogDebug($"RabbitMQ configuration:'HostName:{options.HostName}, Port:{options.Port}, Virtual Host:{options.VirtualHost}'"); }
private static Func <IConnection> CreateConnection(RabbitMQOption options) { var serviceName = Assembly.GetEntryAssembly()?.GetName().Name.ToLower(); var factory = new ConnectionFactory { UserName = options.UserName, Port = options.Port, Password = options.Password, VirtualHost = options.VirtualHost }; if (options.HostName.Contains(",")) { options.ConnectionFactoryOptions?.Invoke(factory); return(() => factory.CreateConnection(options.HostName.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries), serviceName)); } factory.HostName = options.HostName; options.ConnectionFactoryOptions?.Invoke(factory); return(() => factory.CreateConnection(serviceName)); }