.net Core 基于Consul 的服务注册
Consul安装部署
需要注意的是端口映射的是8500
[root@localhost NetCoreDockerMicroService]# docker pull consul #获取镜像
[root@localhost NetCoreDockerMicroService]# docker run -d -p 5300:8500 --name microservice_consul consul #容器
net core Code 注册consul
nuget中安装consul包
注册consul
public static class ConsulHelper
{
public static void ConsulRegist(this IConfiguration configuration)
{
try
{
string ip = configuration["ip"];
string port = configuration["Port"];
string weight = configuration["weight"];
string consulAdrress = configuration["ConsulAdrress"];
string consulCenter = configuration["ConsulCenter"];
ConsulClient consulCilent = new ConsulClient(x =>
{
x.Address = new Uri(consulAdrress);
x.Datacenter = consulCenter;
});
consulCilent.Agent.ServiceRegister(new AgentServiceRegistration()
{
ID = "service " + ip + ":" + port,//注册者的 ID
Name = "McroServiceDemo", //在Consul中分组
Address = ip, //注册者告诉consul它的的端口
Port=int.Parse(port), //注册者告诉consul它的的IP
Tags =new string[] {weight.ToString()}
//心跳
//.....
}); ;
Console.WriteLine($"注册成功:{ip}:{port}--weight:{weight}");
}
catch (Exception e)
{
Console.WriteLine($"注册异常:{e.Message}");
}
}
}
Docker中使用compose部署.net core code
version: '3'
services:
MicroService_Instance1:
container_name: MicroServiceDemo_Instance1
image: microservicedemo
build:
context: .
dockerfile: Dockerfile
ports:
- "5101:80"
volumes:
- /NetCoreDockerMicroService/AppConfigFile/appsettings5101.json:/app/appsettings.json
MicroService_Instance2:
container_name: MicroServiceDemo_Instance2
image: microservicedemo
ports:
- "5102:80"
command: ["dotnet","/app/MicroService.ServiceInstance.dll"]
volumes:
- /NetCoreDockerMicroService/AppConfigFile/appsettings5102.json:/app/appsettings.json
MicroService_Instance3:
container_name: MicroServiceDemo_Instance3
image: microservicedemo
ports:
- "5103:80"
command: ["dotnet","/app/MicroService.ServiceInstance.dll"]
volumes:
- /NetCoreDockerMicroService/AppConfigFile/appsettings5103.json:/app/appsettings.json
- 结果如下
项目添加consul心跳
vscode中添加心跳控制器
public class HealthController : Controller
{
private readonly IConfiguration _iConfiguration = null;
public HealthController(IConfiguration configuration)
{
_iConfiguration = configuration;
}
public IActionResult Index()
{
Console.WriteLine($"This is health controller,{this._iConfiguration["port"]} Invoke");
return Ok();
}
}
在文章2节点中的vscode中添加consule心跳
consulCilent.Agent.ServiceRegister(new AgentServiceRegistration()
{
ID = "service " + ip + ":" + port,//注册者的 ID
Name = "McroServiceDemo", //在Consul中分组
Address = ip, //注册者告诉consul它的的端口
Port = int.Parse(port), //注册者告诉consul它的的IP
Tags = new string[] { weight.ToString() },
//心跳在这里添加
Check = new AgentServiceCheck()
{
Interval = TimeSpan.FromSeconds(12), //心跳时间间隔
HTTP = $"http://{ip}:{port}/Health/Index", //心跳的http地址
Timeout = TimeSpan.FromSeconds(5), //超时参数
DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(20)//超时后consul取消异常服务注册;
}
//.....
});
删除镜像,重新docker部署后结果