Consul 作用
1. 负载均衡
2. 服务注册与发现
3. 健康检测
下面直接开始操作:
官网:http://www.consul.io/ 下载 consul
下载完成后解压得到的文件
接下来扩展上一章的项目《.Net Core 3.x MVC 分布式》
这次要开启 1个前端实例 和 3个后端实例
前端实例命令 用 8001 端口
dotnet AspNetCore.MicroServiceClient.dll --urls=”http://*:8001” --ip=”127.0.0.1” --port=8001
后端实例命令 用 8002,8003,8004 端口
dotnet AspNetCore.MicroService.ServiceInstance.dll --urls=”http://*:8002” --ip=”127.0.0.1” --port=8002
dotnet AspNetCore.MicroService.ServiceInstance.dll --urls=”http://*:8003” --ip=”127.0.0.1” --port=8003
dotnet AspNetCore.MicroService.ServiceInstance.dll --urls=”http://*:8003” --ip=”127.0.0.1” --port=8003
注意不要弄错项目和端口,这样就全都启动成功了
看效果,1个前端可以,3个后端也可以访问。基础工作就完成了
启动 Consul
启动命令 consul.exe agent -dev 看到 Consul agent running 就是正常启动了
访问一下 Consul 地址: http://localhost:8005
接下来就是改实例
1. 后端项目引用 consul 包
2. 在 ServiceInstance 项目 添加 ConsulHelper.cs 类,用来注册实例
在 Startup.cs 注册Consul
在 Program.cs 添加 支持命令行参数
就是 命令能传参数 --ip 和 --port 这两个就是参数
dotnet AspNetCore.MicroService.ServiceInstance.dll --urls=”http://*:8002” --ip=”127.0.0.1” --port=8002
把 前台控制台实例停止 和 后端三个控制台实例停止 ,Consul 控制台保持运行
生成编译项目 -> 运行 8002 后端控制台实例 -> 看到 Consul 页面多了个 UserService 基本就通了
把 8003 和 8004 也启动 就可以看到3个,点UserService 就可以看详情。
3. 接着前端请求Consul,获得服务地址
MicroServiceClient 项目 引用 Consul 包
修改 HomeController.cs 控制器 ,获取 Consul 里的所有服务数据
生成编译 -> 命令启动 8001 ,可以看到控制台和consul展示的数据是一样的。
注释掉循环展示数据, 实现个随机取Consul服务地址,动态生成出一个服务实例的地址进行访问
这里 response.Where 去找 字符串UserService 比较重要,目前示例里只有 UserService 看不出问题,如果还有OrderService、LogService等一堆的集群,就会把其它实例的数据一并循环,所以这里就能体现UserService分组很重要
点几次F5刷新,看到 三个实例被随机的访问了,这样就实现了基本的集群概念了。
4. 实现 健康检测(心跳)
项目 ServiceInstance 添加 HealthController 控制器
直接返回 OK() ,就是个状态请求成功的空白页面
停止三个后端控制台实例 和 Consul控制台,生成编译后,再启动 Consul控制台 和 三个后端控制台实例
看到三个控制台 HealthController 都在被定时请求
UserService 详情能看到 三个实例的状态
我们把 8002 端口实例 停止, 看到Consul的8002状态失败了。现在访问8001的前端实例是报错的,等60秒后再刷新访问,又成功了。
也就是配置的60秒后有问题的实例被删除,Consul 就不会再把 8002 提供给 8001 了。
配置公网
consul.exe agent -server -bootstrap-expect 1 -advertise=115.45.123.xxx -bind=192.168.31.241 -data-dir=/tmp/consul -node=serviceall -ui -client 0.0.0.0