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 为服务名称】

posted on 2018-10-31 13:07  chester·chen  阅读(273)  评论(0编辑  收藏  举报