Ejemplo n.º 1
0
        /// <summary>
        /// 初始化设置哈希节点容器
        /// </summary>
        /// <remarks>
        ///     <para>创建:范亮</para>
        ///     <para>日期:2016/4/2</para>
        /// </remarks>
        private void InitSettingHashStorage()
        {
            foreach (var dataContext in DataContextPool)
            {
                EventTargetType targetType;
                if (!Sys.Enum.TryParse(dataContext.Key, true, out targetType))
                {
                    continue;
                }
                var hash =
                    new ConsistentHash <ConsistentHashNode>(ServiceResolver.Current.GetService <IHashAlgorithm>());

                dataContext.Value.ForEach(v =>
                {
                    var db        = "";
                    var dbs       = v.Split(new string[] { "::" }, Sys.StringSplitOptions.RemoveEmptyEntries);
                    var server    = v.Split('@');
                    var endpoints = server.Length > 1 ? server[1].Split(':') : server[0].Split(':');
                    var account   = server.Length > 1 ? server[0].Split(':'): null;
                    var username  = account != null && account.Length > 1 ? account[0] : null;
                    var password  = server.Length > 1 ? account[account.Length - 1] : this._password;
                    if (endpoints.Length <= 1)
                    {
                        return;
                    }
                    if (dbs.Length > 1)
                    {
                        db = dbs[dbs.Length - 1];
                    }
                    var node = new ConsistentHashNode()
                    {
                        Type         = targetType,
                        Host         = endpoints[0],
                        Port         = endpoints[1],
                        UserName     = username,
                        Password     = password,
                        UseRetryNum  = this._useRetryNum,
                        CunsumerNum  = this._cunsumerNum,
                        UseRateLimit = this._useRateLimit,
                        MaxSize      = this._maxSize,
                        MinSize      = this._minSize,
                        QueueName    = db.ToString(CultureInfo.InvariantCulture)
                    };
                    hash.Add(node);
                    dicHash.GetOrAdd(targetType.ToString(), hash);
                });
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 初始化设置哈希节点容器
        /// </summary>
        private void InitSettingHashStorage()
        {
            foreach (var dataContext in DataContextPool)
            {
                CacheTargetType targetType;
                if (!Enum.TryParse(dataContext.Key, true, out targetType))
                {
                    continue;
                }
                var hash =
                    new ConsistentHash <ConsistentHashNode>(_hashAlgorithm);

                dataContext.Value.ForEach(v =>
                {
                    var db        = "";
                    var dbs       = v.Split(new[] { "::" }, StringSplitOptions.RemoveEmptyEntries);
                    var server    = v.Split('@');
                    var endpoints = server.Length > 1 ? server[1].Split(':') : server[0].Split(':');
                    var account   = server.Length > 1 ? server[0].Split(':') : null;
                    var username  = account != null && account.Length > 1 ? account[0] : null;
                    Debug.Assert(account != null, nameof(account) + " != null");
                    var password = server.Length > 1 ? account[account.Length - 1] : _password;
                    if (endpoints.Length <= 1)
                    {
                        return;
                    }
                    if (dbs.Length > 1)
                    {
                        db = dbs[dbs.Length - 1];
                    }

                    var node = new ConsistentHashNode
                    {
                        Type     = targetType,
                        Host     = endpoints[0],
                        Port     = endpoints[1],
                        UserName = username,
                        Password = password,
                        MaxSize  = _maxSize,
                        MinSize  = _minSize,
                        Db       = db.ToString()
                    };
                    hash.Add(node, string.Format("{0}:{1}", node.Host, node.Port));
                    dicHash.GetOrAdd(targetType.ToString(), hash);
                });
            }
        }
        private IBusControl ConfigureBus(ConsistentHashNode phost, IConsumeConfigurator configurator = null)
        {
            var endpoint = string.Format("rabbitmq://{0}/", phost.Host);

            return(Bus.Factory.CreateUsingRabbitMq(cfg =>
            {
                var host = cfg.Host(new Uri(endpoint), h =>
                {
                    h.Username(phost.UserName);
                    h.Password(phost.Password);
                });
                cfg.Durable = true;
                cfg.UseRateLimit(int.Parse(phost.UseRateLimit), TimeSpan.FromSeconds(1));            //每分钟消息消费数限定在1000之内
                cfg.UseConcurrencyLimit(int.Parse(phost.CunsumerNum));
                cfg.UseRetry(Retry.Interval(int.Parse(phost.UseRetryNum), TimeSpan.FromMinutes(1))); //消息消费失败后重试3次,每次间隔1分钟
                if (configurator != null)
                {
                    var consumers = GetQueueConsumers(phost.QueueName);
                    cfg.ReceiveEndpoint(host, phost.QueueName, eq => configurator.Configure(eq, consumers));
                }
            }));
        }