/// <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); }); } }
/// <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)); } })); }