Net6+Consul的简单使用
先下载Consul
打开cmd
consul.exe agent -dev运行
可以在环境变量 PATH下添加当前Consul.exe 路径 全局使用
下面试启动ok界面,然后通过 localhost:8500 看到界面了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | 然后创建两个 api 程序,添加如下代码, [HttpGet( "start" )] public void Start() { string local = HttpContext.Request.Host.Host; int port = ( int )HttpContext.Request.Host.Port!; string ? url = HttpContext.Request.Host.Value; string ? scheme = HttpContext.Request.Scheme + "://" ; // int port = HttpContext.Request; //cmd 输入 consul 启动程序 var consulClient = new ConsulClient(p => { p.Address = new Uri($ "http://127.0.0.1:8500" ); });//请求注册的 Consul 地址 //这里的这个ip 就是本机的ip,这个端口8500 这个是默认注册服务端口 var httpCheck = new AgentServiceCheck() { DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5), //服务启动多久后注册 Interval = TimeSpan.FromSeconds(10), //间隔固定的时间访问一次,https://localhost:44308/api/Health HTTP = $ "{scheme + url}/WeatherForecast/HealthCheck" , //健康检查地址 ,就是下main的方法 Timeout = TimeSpan.FromSeconds(5) }; var registration = new AgentServiceRegistration() { Checks = new [] { httpCheck }, ID = Guid.NewGuid().ToString() + "webapi1" , Name = "test1" , Address = $ "{scheme + local}" , Port = port, }; consulClient.Agent.ServiceRegister(registration).Wait(); //注册服务 //consulClient.Agent.ServiceDeregister(registration.ID).Wait();//registration.ID是guid //当服务停止时需要取消服务注册,不然,下次启动服务时,会再注册一个服务。 //但是,如果该服务长期不启动,那consul会自动删除这个服务,大约2,3分钟就会删了 } [HttpGet( "HealthCheck" )] public bool HealthCheck() { //这里用于检测程序有没有挂的,这里要和上面对上,不然注册后也会是红叉,这里也坑了我一些时间 Console.WriteLine( "ok" ); return true ; } |
成功
同一项目多次注册
1 2 | Consul参数 https: //www.cnblogs.com/sunsky303/p/9209024.html |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 自定义端口,在consul.exe 同级目录下创建data.json { "ports" : { "server" :8300, "http" :888 } } consul agent -server -bootstrap-expect 1 -data-dir .\ -advertise 127.0.0.1 -client 0.0.0.0 -ui -config-dir .\ cmd 命令启动也要到同目录下,不然报错,<br>启动成功后会生成多个文件和文件夹 |
var consulClient = new ConsulClient(x => x.Address = new Uri($"http://127.0.0.1:8500"));//请求注册的 Consul 地址 var ret = consulClient.Agent.Services(); --服务的监控注册的服务,这个慢启动,不然报错 var allServer = ret.GetAwaiter().GetResult(); //这个是个dictionary的返回值,他的key是string类型,就是8500/ui上services的instance的id var allServerDic = allServer.Response; var test1 = allServerDic; foreach (var item in test1) { string name = item.Value.Service;//服务名,就是注册的那个test1 string serverAddress = item.Value.Address; int serverPort = item.Value.Port; Console.WriteLine($"serverAddress:{serverAddress}==serverPort{serverPort}"); //我们可以在客户端启动的时候,调用一下consul来查找服务 //比如,我们可以在服务集合里查找 服务名叫test1的服务 然后在调用它 //这样,当服务器改变了test1的ip和端口,我们依然可以在集群里找他test1新的ip和端口了 Console.ReadKey();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)