博客
关于我
3. .NET5微服务添加Consul中间件
阅读量:492 次
发布时间:2019-03-07

本文共 3288 字,大约阅读时间需要 10 分钟。

服务发现与Consul之道

在微服务架构中,服务发现是保证系统可靠性和灵活性的核心环节。传统的网关层每添加一个服务实例或接口,都需要手动更新发布,带来urious负担。而使用Consul这样的服务发现工具,可以实现自动化注册发现,让网关只需更新一次,无论服务实例还是接口如何增加,Consul都能自动识别和发现。

Consul服务发现核心原理

Consul是一个独立的进程,主要职责是管理服务实例地址。服务注册过程如下:

  • 在服务器上安装并启动Consul进程。
  • 每个服务实例向Consul注册时,提供自身的 hostname和port。
  • Consul将该实例添加到服务名单中。
  • 网关在需要调用服务时,首先向Consul查询所有服务实例地址。
  • 这种设计使得无需手动更新网关,服务实例的变化自动生效。

    卫生机制与健康检查

    服务发现的另一关键是服务状态管理。Consul支持健康检查机制,确保服务状态一直可靠。

    • 健康检查(Heartbeat):服务实例在注册时,提供一个健康检查地址。Consul定期发送请求,确保服务响应正常。
    • 定期检查间隔:可以配置检查间隔时间,如每5秒发送一次请求。
    • 异常处理:若请求超时或未响应,Consul将该服务实例从名单中移除。

    这样,网关在调用时,就不会引用已被移除的服务实例,确保调用始终是可靠的。

    Consul的安装与配置

    安装Consul相对简单。以下是Windows环境下的步骤:

  • Download Consul.exe文件。
  • 将安装文件所在目录路径添加到环境变量中,便于直接运行。
  • 启动Consul,输入命令consul.exe agent -dev
  • 打开浏览器,访问Consul默认地址http://localhost:8500,即可进入Consul界面。
  • 界面与访问权限

    Consul提供友好的Web界面,便于管理服务实例。管理员可以查看服务运行状态,执行相关操作,如服务注册、修改、删除等。

    代码实战与应用场景

    在实际项目中,Consul的应用通常包括以下步骤:

  • 配置模型类:定义服务注册的配置参数,如服务名称、IP、端口、健康检查地址等。
  • 基于代码的注册:创建一个类库ConsulBuilder,统一处理服务注册,简化开发流程。
  • Startup.cs中引用Consul配置,完成服务注册。
  • 配置appsettings.json,配置具体的Consul地址和服务参数。
  • 在目标服务中添加健康检查路由,返回正常响应。
  • 示例代码如下:

    public class ConsulBuilder {    public static void AddConsul(this IApplicationBuilder app,                             ConsulServiceOptions options) {        var consular = new ConsulClient(_ => {            _ .Address = new Uri(options.ConsulAddress);        });        var registration = new AgentServiceRegistration {            ID = Guid.NewGuid().ToString(),            Name = options.ServiceName,            Address = options.ServiceIP,            Port = options.ServicePort,            Check = new AgentServiceCheck {                DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5),                Interval = TimeSpan.FromSeconds(10),                HTTP = options.ServiceHealthCheck,                Timeout = TimeSpan.FromSeconds(5)            }        };        consular.Agent.ServiceRegister(registration).Wait();        app.UseConsul();    }}public class ConsulServiceOptions {    public string ServiceName { get; set; }    public string ServiceIP { get; set; }    public int ServicePort { get; set; }    public string ServiceHealthCheck { get; set; }    public string ConsulAddress { get; set; }}

    网关配置与服务发现

    在网关层,采用Ocelot框架,可集成Consul作为服务发现提供商。配置文件Ocelot.json中,添加相应的服务发现设置。

    "Routes": [    {        "ServiceName": "UserService",        "DownstreamScheme": "https",        "DownstreamPathTemplate": "/api/user/{path}",        "UpstreamPathTemplate": "/user/{path}",        "UpstreamHttpMethod": ["Get", "Post"],        "LoadBalancerOptions": {            "Type": "RoundRobin"        },        "UseServiceDiscovery": true,        "RateLimitOptions": {            "ClientIdHeader": "client_id",            "QuotaExceededMessage": "Too many requests, are you OK?",            "HttpStatusCode": 999,            "Period": "1s",            "PeriodTimespan": 15,            "Limit": 2        }    }],"GlobalConfiguration": {    "BaseUrl": "https://localhost:44335",    "ReRouteIsCaseSensitive": false,    "ServiceDiscoveryProvider": {        "Host": "localhost",        "Port": 8500,        "Type": "Consul"    }}

    确保配置文件中Consul地址与实际运行一致,路径正确配置可选项如重审限流和QoS。

    部署与环境搭建

    优秀的开源文档等待完善网关配置,不论是Linux、Windows还是Docker环境,主要是将Consul和Ocelot安装配置到同一网络中即可。

    总结

    通过Consul实现服务自动发现,即可简化网关管理。在开发过程中,只需配置服务注册信息,Consul即可自动处理地址变更和健康检查。特别不需要修改网关代码,无论服务实例数量怎样增加,都能无缝支持。

    转载地址:http://xppcz.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现basic graphs基本图算法(附完整源码)
    查看>>
    Objective-C实现BCC校验计算(附完整源码)
    查看>>
    Objective-C实现bead sort珠排序算法(附完整源码)
    查看>>
    Objective-C实现BeadSort珠排序算法(附完整源码)
    查看>>
    Objective-C实现bellman ford贝尔曼福特算法(附完整源码)
    查看>>
    Objective-C实现bellman-ford贝尔曼-福特算法(附完整源码)
    查看>>
    Objective-C实现bellman-ford贝尔曼-福特算法(附完整源码)
    查看>>
    Objective-C实现BellmanFord贝尔曼-福特算法(附完整源码)
    查看>>
    Objective-C实现BF算法 (附完整源码)
    查看>>
    Objective-C实现binary exponentiation二进制幂运算算法(附完整源码)
    查看>>
    Objective-C实现binary tree traversal二叉树遍历算法(附完整源码)
    查看>>
    Objective-C实现binomial coefficient二项式系数算法(附完整源码)
    查看>>
    Objective-C实现BitMap算法(附完整源码)
    查看>>
    Objective-C实现bogo sort排序算法(附完整源码)
    查看>>
    Objective-C实现CaesarsCiphe凯撒密码算法(附完整源码)
    查看>>
    Objective-C实现cartesianProduct笛卡尔乘积算法(附完整源码)
    查看>>
    Objective-C实现check strong password检查密码强度算法(附完整源码)
    查看>>
    Objective-C实现circle sort圆形排序算法(附完整源码)
    查看>>
    Objective-C实现coulombs law库仑定律算法(附完整源码)
    查看>>
    Objective-C实现DBSCAN聚类算法(附完整源码)
    查看>>