Beispiel #1
0
 /// <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);
     }
 }
Beispiel #2
0
 /// <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);
 }
Beispiel #3
0
        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}'");
        }
Beispiel #4
0
        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));
        }