2.2微服务-consul
微服务2.0 consul
1、下载consul 并启动,浏览器打开localhost:8500
命令 启动 consul agent -dev

2、项目安装consul nuget包
<PackageReference Include="Consul" Version="1.6.10.9" />
3、新建consul扩展类、并在站点启动完成前调用
using Consul;
namespace ApiService.Extensions
{
public static class ConsulExtend
{
public static void Regist(this IConfiguration configuration)
{
string ip = configuration["ip"];
int port = int.Parse(configuration["port"]);
ConsulClient client = new ConsulClient(c =>
{
c.Address = new Uri("http://localhost:8500");
c.Datacenter = "dc1";
});
client.Agent.ServiceRegister(new AgentServiceRegistration()
{
ID = $"service{Guid.NewGuid()}",
Name = "users",
Address = ip,
Port = port,
//Tags =new string[] { "50"},//标签,可用分配权重
Check = new AgentServiceCheck()
{
Interval = TimeSpan.FromSeconds(10),//10秒检测一次
HTTP = $"http://{ip}:{port}/health/check",//心跳地址
Timeout = TimeSpan.FromSeconds(5),//检查等待时间
DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(20)//失败多久移除
}
});
}
}
}
app.MapControllers(); //注册Consul ConsulExtend.Regist(builder.Configuration); app.Run();
4、完成服务注册

5、在客户端项目,服务发现
var response = new ConsulClient(c =>
{
c.Address = new Uri("http://localhost:8500");
c.Datacenter = "dc1";
}).Agent.Services().Result.Response;
var agentServices = response.Where(s => s.Value.Service.Equals("users", StringComparison.OrdinalIgnoreCase)).ToArray();
var agentService = agentServices.OrderBy(s => Guid.NewGuid()).FirstOrDefault().Value;
//服务策略【平均、随机、轮询、权重】
//随机策略
string url = $"http://{agentService.Address}:{agentService.Port}/user/getlist";
var httpResponse = await new HttpClient().GetAsync(url).Result.Content.ReadAsStringAsync(); ;
Console.WriteLine($"Url:{url} Rsponse:{httpResponse}");
Console.ReadKey();

6、docker 安装consul
拉取镜像 docker pull consul
运行单机
docker run \
-d \
-p 8500:8500 \
-p 8600:8600/udp \
--name=badger \
consul agent -server -ui -node=server-1 -bootstrap-expect=1 -client=0.0.0.0


浙公网安备 33010602011771号