.NET

.Net Core 3.x MVC Consul 集群

2020-10-30  本文已影响0人  单程车票_SJ

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

上一篇 下一篇

猜你喜欢

热点阅读