2.2微服务-consul

微服务2.0 consul

1、下载consul 并启动,浏览器打开localhost:8500

命令 启动 consul agent -dev

 

2、项目安装consul nuget包

 <PackageReference Include="Consul" Version="1.6.10.9" />

 

3、新建consul扩展类、并在站点启动完成前调用

using Consul;

namespace ApiService.Extensions
{
    public static class ConsulExtend
    {
        public static void Regist(this IConfiguration configuration)
        {
            string ip = configuration["ip"];
            int port = int.Parse(configuration["port"]);

            ConsulClient client = new ConsulClient(c =>
            {
                c.Address = new Uri("http://localhost:8500");
                c.Datacenter = "dc1";
            });

            client.Agent.ServiceRegister(new AgentServiceRegistration()
            {
                ID = $"service{Guid.NewGuid()}",
                Name = "users",
                Address = ip,
                Port = port,
                //Tags =new string[] { "50"},//标签,可用分配权重
                Check = new AgentServiceCheck()
                {
                    Interval = TimeSpan.FromSeconds(10),//10秒检测一次
                    HTTP = $"http://{ip}:{port}/health/check",//心跳地址
                    Timeout = TimeSpan.FromSeconds(5),//检查等待时间
                    DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(20)//失败多久移除
                }
            });
        }
    }
}

 

app.MapControllers();

//注册Consul
ConsulExtend.Regist(builder.Configuration);

app.Run();

 

4、完成服务注册

 

5、在客户端项目,服务发现

var response = new ConsulClient(c =>
    {
        c.Address = new Uri("http://localhost:8500");
        c.Datacenter = "dc1";
    }).Agent.Services().Result.Response;

    var agentServices = response.Where(s => s.Value.Service.Equals("users", StringComparison.OrdinalIgnoreCase)).ToArray();

    var agentService = agentServices.OrderBy(s => Guid.NewGuid()).FirstOrDefault().Value;

    //服务策略【平均、随机、轮询、权重】

    //随机策略
    string url = $"http://{agentService.Address}:{agentService.Port}/user/getlist";

    var httpResponse = await new HttpClient().GetAsync(url).Result.Content.ReadAsStringAsync(); ;

    Console.WriteLine($"Url:{url} Rsponse:{httpResponse}");

    Console.ReadKey();

 

6、docker 安装consul

文档链接

拉取镜像 docker pull consul

运行单机
docker run \
    -d \
    -p 8500:8500 \
    -p 8600:8600/udp \
    --name=badger \
    consul agent -server -ui -node=server-1 -bootstrap-expect=1 -client=0.0.0.0 
posted @ 2023-06-11 16:13  有只烤鸡  阅读(51)  评论(0)    收藏  举报