• 微服务学习.net5+consul


    趁着刚过完年,还没有开始做业务的时候,学习下consul 概念自己去官网看,这里只讲下具体实现

    官网下载https://www.consul.io/downloads 我下载的是Windows版本

    启动consul命令 

    consul agent -dev -client 0.0.0.0

    新建.net5的api项目,.net5直接默认是swagger

    4.新建扩展服务注册到Consul方法,ConsulExtenions.cs

     public static void ConsulRegist(this IConfiguration configuration)
            {
                try
                {
                    string ip = configuration["ip"];
                    string port = configuration["port"];
                    string weight = configuration["weight"];
                    string consulAddress = configuration["ConsulAddress"];
                    string consulCenter = configuration["ConsulCenter"];
    
                    ConsulClient client = new ConsulClient(c =>
                    {
                        c.Address = new Uri(consulAddress);
                        c.Datacenter = consulCenter;
                    });
    
                    client.Agent.ServiceRegister(new AgentServiceRegistration()
                    {
                        ID = "CommService" + Guid.NewGuid(),//--唯一的
                        Name = "CommService",//分组---根据Service
                        Address = ip,
                        Port = int.Parse(port),
                        Tags = new string[] { weight.ToString() },//额外标签信息
                        Check = new AgentServiceCheck()
                        {
                            Interval = TimeSpan.FromSeconds(12),
                            HTTP = $"http://{ip}:{port}/Api/Health/Index", // 给到200
                            Timeout = TimeSpan.FromSeconds(5),
                            DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(20)
                        }//配置心跳
                    });
                    Console.WriteLine($"{ip}:{port}--weight:{weight}"); //命令行参数获取
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"Consul注册:{ex.Message}");
                }
            }

    ip port 配置在appsettings.json里面

    {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft": "Warning",
          "Microsoft.Hosting.Lifetime": "Information"
        }
      },
      "AllowedHosts": "*",
      "ip": "localhost",
      "port": 5000,
      "weight": 1,
      "ConsulAddress": "http://127.0.0.1:8500",
      "ConsulCenter": "dc1"
    }

    Startup注册ConsulRegist方法

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
            {
                //if (env.IsDevelopment())
                //{
                app.UseDeveloperExceptionPage();
                app.UseSwagger();
                app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "comm.api v1"));
                //}
    
                //   app.UseHttpsRedirection();
    
                app.UseRouting();
    
                app.UseAuthorization();
    
                app.UseEndpoints(endpoints =>
                {
                    endpoints.MapControllers();
                });
                // Consul注册
                this.Configuration.ConsulRegist();
            }

    可以用dotnet 启动2个comm.api.dll  端口号自己随便取,我取的5000和6000 HealthController为配置的心跳api返回的结果

    再来看下Consul 会发现多了CommService

    2 Instances为端口号5000和6000的api

    注册完成了,接下来实现调用看效果图

    调用代码

     public static AgentService ChooseService(string serviceName)
            {
                using (ConsulClient client = new ConsulClient(c => c.Address = new Uri("http://localhost:8500")))
                {
                    var services = client.Agent.Services().Result.Response;
                    // 找出目标服务
                    var targetServices = services.Where(c => c.Value.Service.Equals(serviceName)).Select(s => s.Value);
                    // 实现随机负载均衡
                    var targetService = targetServices.ElementAt(new Random().Next(1, 1000) % targetServices.Count());
                    Console.WriteLine($"{DateTime.Now} 当前调用服务为:{targetService.Address}:{targetService.Port}");
    
                    return targetService;
                }
            }
      public string GetCommUrl()
            {
                AgentService agentService = ConsulClientExtenions.ChooseService("CommService");
                string url = $"http://{agentService.Address}:{agentService.Port}/api/Comm/GetProvince";
                return url;
            }

    需要demo的留言

  • 相关阅读:
    实验二 Nmap的实践
    《网络攻击与防范》第八周学习总结
    《网络攻击与防范》第七周学习总结
    《网络攻击与防范》第六周学习总结
    《网络攻击与防范》第五周学习总结
    《网络攻击与防范》第四周学习总结
    《网络攻击与防范》第三周学习总结
    《网络攻击与防范》第二周学习总结
    Linux 基础入门学习总结
    20169312 2016-2017-2《网络攻防实践》课程总结
  • 原文地址:https://www.cnblogs.com/panjuan/p/14434827.html
Copyright © 2020-2023  润新知