负载均衡策略

#region 调用—负载均衡
{
//string url = “http://localhost:5726/api/users/get”;
//string url = “http://localhost:5727/api/users/get”;
//string url = “http://localhost:5728/api/users/get”;
string url = “http://{域名}/api/users/get”;
//consul解决使用服务名字 转换IP:Port----DNS

Uri uri = new Uri(url);
string groupName = uri.Host;
using (ConsulClient client = new ConsulClient(c =>
{
    c.Address = new Uri("http://localhost:8500/");
    c.Datacenter = "dc1";
}))
{
    var dictionary = client.Agent.Services().Result.Response;
    var list = dictionary.Where(k => k.Value.Service.Equals(groupName, StringComparison.OrdinalIgnoreCase));//获取consul上全部对应服务实例
    KeyValuePair<string, AgentService> keyValuePair = new KeyValuePair<string, AgentService>();
    //拿到3个地址,只需要从中选择---可以在这里做负载均衡--
    //{
    //    keyValuePair = list.First();//直接拿的第一个
    //}
    //{
    //    var array = list.ToArray();
    //    //随机策略---平均策略
    //    keyValuePair = array[new Random(iSeed++).Next(0, array.Length)];
    //}
    //{
    //    var array = list.ToArray();
    //    //轮询策略---平均策略
    //    keyValuePair = array[iSeed++ % array.Length];
    //}
    {
        //权重---注册服务时指定权重,分配时获取权重并以此为依据
        List<KeyValuePair<string, AgentService>> pairsList = new List<KeyValuePair<string, AgentService>>();
        foreach (var pair in list)
        {
            int count = int.Parse(pair.Value.Tags?[0]);
            for (int i = 0; i < count; i++)
            {
                pairsList.Add(pair);
            }
        }
        keyValuePair = pairsList.ToArray()[new Random(iSeed++).Next(0, pairsList.Count())];
    }
    resultUrl = $"{uri.Scheme}://{keyValuePair.Value.Address}:{keyValuePair.Value.Port}{uri.PathAndQuery}";
    string result = WebApiHelperExtend.InvokeApi(resultUrl);
    userList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Users>>(result);
}

}
#endregion
————————————————
版权声明:本文为CSDN博主「愚公搬代码」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/aa2528877987/article/details/108150103

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值