当前位置:   article > 正文

.net core使用Consul_consul netcore

consul netcore

参考文章:
https://www.cnblogs.com/edisonchou/p/9124985.html

上面的文章已经写的非常好了,我在这就再简单的写一下,参考文章里的代码有个地方需要注意IApplicationLifetime这个需要替换一下 那个是老版本的.net core用的,替换成IHostApplicationLifetime同样是在Microsoft.Extensions.Hosting里

Consul是Go语言写的,在.net core的web程序里面主要是用来做服务的注册和发现

首先下载Consul
https://www.consul.io/downloads

然后解压直接用
在这里插入图片描述
这里是dev环境 更多具体的使用再百度
按回车 然后输入一下网址
http://localhost:8500
Consul控制台
然后开始整代码
新建一个扩展方法:

using Consul;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Hosting;
using System;

namespace Hotel.Web.API.Extension
{
    public static class AppBuilderExtensions
    {
        public static IApplicationBuilder RegisterConsul(this IApplicationBuilder app, IHostApplicationLifetime lifetime, ServiceEntity serviceEntity)
        {
            var consulClient = new ConsulClient(x => x.Address = new Uri($"http://{serviceEntity.ConsulIP}:{serviceEntity.ConsulPort}"));//请求注册的 Consul 地址
            var httpCheck = new AgentServiceCheck()
            {
                DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5),//服务启动多久后注册
                Interval = TimeSpan.FromSeconds(10),//健康检查时间间隔,或者称为心跳间隔
                HTTP = $"http://{serviceEntity.IP}:{serviceEntity.Port}/api/Health",//健康检查地址
                Timeout = TimeSpan.FromSeconds(5)
            };

            // Register service with consul
            var registration = new AgentServiceRegistration()
            {
                Checks = new[] { httpCheck },
                ID = Guid.NewGuid().ToString(),
                Name = serviceEntity.ServiceName,
                Address = serviceEntity.IP,
                Port = serviceEntity.Port,
                Tags = new[] { $"urlprefix-/{serviceEntity.ServiceName}" }//添加 urlprefix-/servicename 格式的 tag 标签,以便 Fabio 识别
            };

            consulClient.Agent.ServiceRegister(registration).Wait();//服务启动时注册,内部实现其实就是使用 Consul API 进行注册(HttpClient发起)
            lifetime.ApplicationStopping.Register(() =>
            {
                consulClient.Agent.ServiceDeregister(registration.ID).Wait();//服务停止时取消注册
            });

            return app;
        }

    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

加个类

    public class ServiceEntity
    {
        public string IP { get; set; }
        public int Port { get; set; }
        public string ServiceName { get; set; }
        public string ConsulIP { get; set; }
        public int ConsulPort { get; set; }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

配置文件里添加如下配置 这里加在appSetting.json里了

  "Consul": {
    "IP": "localhost",
    "Port": 8002,
    "ServiceName": "hotel_api",
    "ConsulIP": "localhost",
    "ConsulPort": 8500
  }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

然后在Startup类里的Configure方法里添加

            // register this service
            ServiceEntity serviceEntity = new ServiceEntity
            {
                IP = "localhost",
                Port = Convert.ToInt32(Configuration["Consul:Port"]),
                ServiceName = Configuration["Consul:ServiceName"],
                ConsulIP = Configuration["Consul:ConsulIP"],
                ConsulPort = Convert.ToInt32(Configuration["Consul:ConsulPort"])
            };
            app.RegisterConsul(lifetime, serviceEntity);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

注意 lifetime 这个需要在Configure方法的参数里加个参数Microsoft.Extensions.Hosting.IHostApplicationLifetime lifetime

现在就可以了 运行程序
在这里插入图片描述
完事

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/791587
推荐阅读
相关标签
  

闽ICP备14008679号