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

    你可能感兴趣的文章
    open***负载均衡高可用多种方案实战讲解02(老男孩主讲)
    查看>>
    Open-E DSS V7 应用系列之五 构建软件NAS
    查看>>
    Open-Sora代码详细解读(1):解读DiT结构
    查看>>
    Open-Sora代码详细解读(2):时空3D VAE
    查看>>
    Open-Source Service Discovery
    查看>>
    open-vm-tools-dkms : 依赖: open-vm-tools (>= 2:9.4.0-1280544-5ubuntu3) 但是它将不会被安装
    查看>>
    open3d-Dll缺失,未找到指定模块解决
    查看>>
    openai Midjourney代理服务 gpt大模型第三方api平台汇总 支持国内外各种大模型 持续更新中...
    查看>>
    OpenAll:Android打开组件新姿势【仅供用于学习了解ButterKnife框架基本原理】
    查看>>
    OpenASR 项目使用教程
    查看>>
    Openbox-桌面图标设置
    查看>>
    opencart出现no such file or dictionary
    查看>>
    OpenCV 3.1 imwrite()函数写入异常问题解决方法
    查看>>
    OpenCV 4.1.0版drawContours
    查看>>
    Opencv cv2.putText 函数详解
    查看>>
    opencv glob 内存溢出异常
    查看>>
    opencv Hog Demo
    查看>>
    opencv Hog学习总结
    查看>>
    opencv Mat push_back
    查看>>
    opencv putText中文乱码
    查看>>