博客
关于我
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/

    你可能感兴趣的文章
    pip3命令全解析:Python3包管理工具的详细使用指南
    查看>>
    pip3安装命令重复创建文件‘/tmp/pip-install-xxxxx/package‘失败
    查看>>
    PIPE 接口信号列表
    查看>>
    pipeline配置与管理Job企业级实战
    查看>>
    pipeline项目配置实战
    查看>>
    Pipenv 与 Conda?
    查看>>
    QVGA/HVGA/WVGA/FWVGA分辨率屏含义及大小//Android虚拟机分辨率
    查看>>
    pipreqs : 无法将“pipreqs”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径 正确,然后再试一次。
    查看>>
    pipy国内镜像的网址
    查看>>
    quiver绘制python语言
    查看>>
    pip下载缓慢
    查看>>
    PIP使用SSH从BitBucket安装自定义软件包,无需输入SSH密码
    查看>>
    pip命令提示unknow or unsupported command install解决方法
    查看>>
    pip在安装模块时提示Read timed out
    查看>>
    pip更换源
    查看>>
    SpringBoot之Banner源码深度分解
    查看>>
    Pix2Pix如何工作?
    查看>>
    QuickBI助你成为分析师——搞定数据源
    查看>>
    pkl来存储python字典
    查看>>
    quick sort | 快速排序 C++ 实现
    查看>>