zoukankan      html  css  js  c++  java
  • 微服务之注册服务与发现:Consul在Windows下安装使用

    1、下载和安装

    下载地址:https://www.consul.io/downloads.html

    在解压目录运行cmd命令:

    consul agent -dev

     当出现如下界面表示启动成功:

    访问http://localhost:8500/即可进入ui控制界面

      当然,也可以添加一下环境变量,下次直接打开cmd就可以启动sonsul了。

    2、注册服务与发现

     2.1新增注册类

    public class ConsulRegister
        {
            private IConfiguration _configuration;
            private IHostApplicationLifetime _lifetime;
            public ConsulRegister(IConfiguration configuration, IHostApplicationLifetime lifetime)
            {
                this._configuration = configuration;
                this._lifetime = lifetime;
            }
            public void Regist()
            {
    
                String ip = _configuration["ip"];//部署到不同服务器的时候不能写成127.0.0.1或者0.0.0.0,因为这是让服务消费者调用的地址
                int port = int.Parse(_configuration["port"]);//获取服务端口 命令行参数
                Console.WriteLine($"http://{ip}:{port}/api/Health/index");
                var client = new ConsulClient(ConfigurationOverview); //回调获取
                string serverId = "ServerNameFirst-" + Guid.NewGuid();//服务编号保证不重复
                var result = client.Agent.ServiceRegister(new AgentServiceRegistration()
                {
                    ID = serverId,
                    Name = "BaseDataServer",//服务的名称
                    Address = ip,//服务ip地址
                    Port = port,//服务端口
                    Check = new AgentServiceCheck //健康检查
                    {
                        DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5),//服务启动多久后反注册
                        Interval = TimeSpan.FromSeconds(10),//健康检查时间间隔,或者称为心跳间隔(定时检查服务是否健康)
                        HTTP = $"http://{ip}:{port}/api/Health/Index",//健康检查地址
                        Timeout = TimeSpan.FromSeconds(5)//服务的注册时间
                    }
                });
                _lifetime.ApplicationStopping.Register(() =>
                {
                    Console.WriteLine($"服务停止{ip}:{port}");
                    client.Agent.ServiceDeregister(serverId).Wait();
                });
            }
            private static void ConfigurationOverview(ConsulClientConfiguration obj)
            {
                //consul的地址
                obj.Address = new Uri("http://127.0.0.1:8500");
                //数据中心命名
                obj.Datacenter = "UserCenter";
            }
        }

    2.2在程序启动时候调用

     public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHostApplicationLifetime lifetime)
            {
                //忽略其他代码
                //程序启动时候调用注册类
                new ConsulRegister(Configuration, lifetime).Regist();
                 
            }

    2.3启动服务

    在bin目录下分别执行三个命令,启动三个服务

    dotnet MicroService.dll --urls="http://*:5210" --ip="127.0.0.1" --port 5210

    dotnet MicroService.dll --urls="http://*:5211" --ip="127.0.0.1" --port 5211

    dotnet MicroService.dll --urls="http://*:5212" --ip="127.0.0.1" --port 5212

    consul就可以顺利发现服务,到此为止,服务端就已经配置完毕。

    如果服务有异常,可以通过该地址检查错误:http://localhost:8500/v1/agent/checks。

    3、客户端调用

     新建控制台应用程序,并添加代码:

     class Program
        {
            static List<string> Urls = new List<string>();
            static void Main(string[] args)
            {
                Console.WriteLine("开始输出当前所有服务地址");
                Catalog_Nodes().GetAwaiter().GetResult();
    
                for (int i = 0; i < 15; i++)
                {
                    Console.WriteLine("开始随机请求一个地址服务地址");
                    int index = new Random().Next(Urls.Count);
                    string url = Urls[index];
    
                    Console.WriteLine("请求的随机地址:" + url);
                    var result = new HttpClient().GetAsync(url).Result;
                    Console.WriteLine($"{result.StatusCode}:{result.Content.ReadAsStringAsync().Result}");
                }
               
                Console.ReadLine();
            }
            public static async Task Catalog_Nodes()
            {
                var client = new ConsulClient();
                var nodeList = await client.Agent.Services();
                var url = nodeList.Response.Values;
    
                foreach (var item in url)
                {
                    string Address = item.Address;
                    int port = item.Port;
                    string name = item.Service;
                    Console.WriteLine($"地址:{Address}:{port},name:{name}");
                    Urls.Add($"http://{Address}:{port}/api/Users/GetList");
                }
            }
        }

    运行结果:

    这样就完成了注册服务与发现及客户端的调用。

    需要查看consul+ocelot联合实现集群的请点击:https://www.cnblogs.com/chenxizhaolu/p/13896843.html

    相关参考:

    https://www.cnblogs.com/yanbigfeg/p/9199590.html

    https://www.cnblogs.com/jpfss/p/11585255.html

  • 相关阅读:
    Java实现生产者消费者模式
    LRU结构(采用hashmap + 双向链表实现)
    自定义优先级队列PriorityQueue
    KdApiSearchDemo
    MongoDBHelper
    WebApiInvoker
    轨迹
    SignAttribute
    web api 压缩
    web api 缓存类
  • 原文地址:https://www.cnblogs.com/chenxizhaolu/p/13890309.html
Copyright © 2011-2022 走看看