.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

浙公网安备 33010602011771号