0)基本概念
consul常用于服务发现 【微服务】
web_Api
\
\ ->注册服务 raft选举leader
-----------------------------------------------------------------——
【Server1】<----------------------> 【Server2】
| |
\ /
\ /
【Server3】
-----------------------------------------------------------------——
\
\->发现服务
1)下载
https://www.consul.io/ 注意系统版本
2)设置环境变量
拷贝.exe对应的文件路径 放到环境变量path中
3)cmd中启动服务 -dev 表示默认
consul agent -dev
建立集群使用 同一服务器下解决端口占用问题时只能用相同端口注册一个服务
方式一、
pc-1 【ip:192.168.109.1】
consul agent -server -ui -bootstrap-expect=2 -data-dir=e:\consul -node=consul-1 -client=0.0.0.0 -bind=192.168.109.1 -datacenter=dc1
pc-2 【ip:192.168.109.128】
consul agent -server -ui -bootstrap-expect=2 -data-dir=c:\consul -node=consul-2 -client=0.0.0.0 -bind=192.168.109.128 -datacenter=dc1 -join 192.168.109.1
方式二、
4)打开vs
5)新建web api项目
6)在Startup.cs下修改Configure函数如下
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseMvc(); String ip = Configuration["ip"];//部署到不同服务器的时候不能写成127.0.0.1或者0.0.0.0,因为这是让服务消费者调用的地址 int port = int.Parse(Configuration["port"]);//获取服务端口 var client = new ConsulClient(ConfigurationOverview); //回调获取 var result = client.Agent.ServiceRegister(new AgentServiceRegistration() { ID = "ServerNameFirst" + Guid.NewGuid(),//服务编号保证不重复 Name = "ServerFirst",//服务的名称 集群使用consul Address = ip,//服务ip地址 Port = port,//服务端口 Check = new AgentServiceCheck //健康检查 { DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5),//服务启动多久后反注册 Interval = TimeSpan.FromSeconds(10),//健康检查时间间隔,或者称为心跳间隔(定时检查服务是否健康) HTTP = $"http://{ip}:{port}/api/Health",//健康检查地址 Timeout = TimeSpan.FromSeconds(5)//服务的注册时间 } }); }
1
2
3
4
5
6
7
8
9
10
11
|
/// <summary>
/// 获取Consul的实例
/// </summary>
/// <param name="obj"></param>
private
static
void
ConfigurationOverview(ConsulClientConfiguration obj)
{
//consul的地址
obj.Address =
new
Uri(
"http://127.0.0.1:8500"
);
//数据中心命名
obj.Datacenter =
"dc1"
;
}
|
7)设置健康检查控制器HealthController.cs
1
2
3
4
5
6
|
[Route(
"api/[controller]"
)]
public
class
HealthController : Controller
{
[HttpGet]
public
IActionResult Get() => Ok(
"ok"
);
}
|
8)生成项目
9)打开项目对应文件夹 ->bin->Debug->netcoreapp2.0 路径上输入cmd 直接进入对应目录并打开cmd
10)运行命令进行服务注册 dotnet PeerApi.dll --ip localhost --port 14446 解释:PeerApi.dll替换成你的dll localhost代替ip地址 注意:如果未放在iis上 输入localhost代替127.0.0.1 其他ip地址不变 14446 是端口号 替换你的端口
11)打开 http://localhost:8500/ui/dc1/services 【consul自带的监控页面】 可以查看到具体注册的服务
12)服务发现 可以查看链接
1
|
http:
//127.0.0.1:8500/v1/catalog/service/ServerFirst 【ServerFirst 为服务名称】
|