.Net Core 基础学习笔记(二) Consul配置使用

1.拉取consul镜像
docker pull consul 
2.启动consul
docker run -d -p 8500:8500  --name=consul consul:latest agent -server -bootstrap-expect 1 -ui -node=1 -client='0.0.0.0'
  • agent: 表示启动 Agent 进程。
  • server:表示启动 Consul Server 模式
  • client:表示启动 Consul Cilent 模式。
  • bootstrap:表示这个节点是 Server-Leader ,每个数据中心只能运行一台服务器。技术角度上讲 Leader 是通过 Raft 算法选举的,但是集群第一次启动时需要一个引导 Leader,在引导群集后,建议不要使用此标志。
  • ui:表示启动 Web UI 管理器,默认开放端口 8500,所以上面使用 Docker 命令把 8500 端口对外开放。
  • node:节点的名称,集群中必须是唯一的,默认是该节点的主机名。
  • client:consul服务侦听地址,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1所以不对外提供服务,如果你要对外提供服务改成0.0.0.0
  • join:表示加入到某一个集群中去。 如:-json=192.168.0.11。
3.安装consul包
 
4.服务注册consul
 public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IApplicationLifetime applicationLifetime)

        {

            string ip = "localhost";



            int port = 8101;



            string serviceName = "Service1";



            string serviceId = serviceName + Guid.NewGuid();



            using (var client = new ConsulClient(ConsulConfig))



            {



                var agentCheck = new AgentServiceCheck

                {



                    DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5), //服务停止多久后反注册



                    Interval = TimeSpan.FromSeconds(10), //健康检查时间间隔,或者称为心跳



                    HTTP = $"http://{ip}:{port}/api/health", //健康检查地址



                    Timeout = TimeSpan.FromSeconds(5)



                };

                //注册服务到Consul



                client.Agent.ServiceRegister(new AgentServiceRegistration()



                {



                    ID = serviceId, //服务编号,不能重复



                    Name = serviceName, //服务名字



                    Address = ip,//服务提供者的能被服务消费者访问的IP地址(可以被其他应用访问的地址,本机测试使用127.0.0.1,但在实际生产环境上一定要使用内网IP地址)



                    Port = port, //服务提供者的能被服务消费者访问的端口



                    Check = agentCheck



                }).Wait(); //Consul客户端的所有方法几乎都是异步方法,但是都没有按照规范加上Async后缀,所以容易误导,记得调用后要Wait()或者await

                Console.WriteLine("logs:-----健康检查地址:" + agentCheck.HTTP);

            }



            applicationLifetime.ApplicationStopped.Register(() =>



            {



                using (var client = new ConsulClient(ConsulConfig))



                {



                    //注销服务



                    client.Agent.ServiceDeregister(serviceId).Wait();



                }



            });

            app.UseConfigure(env);

            

        }



        public void ConsulConfig(ConsulClientConfiguration c)

        {



            c.Address = new Uri("http://localhost:8500");



            c.Datacenter = "dc1";



        }
5.踩坑点记录
服务注册至consul时,服务ip地址不可添加http前缀,会导致网关服务发现地址不可用,健康检查地址需要加上http
posted @ 2021-06-24 20:37  别跟我嘻嘻哈哈  阅读(358)  评论(1)    收藏  举报