千家信息网

.NET Core + Consul 服务注册及发现的示例分析

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章将为大家详细讲解有关.NET Core + Consul 服务注册及发现的示例分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。在分布式架构中
千家信息网最后更新 2026年11月02日.NET Core + Consul 服务注册及发现的示例分析

这篇文章将为大家详细讲解有关.NET Core + Consul 服务注册及发现的示例分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

在分布式架构中,服务治理是必须面对的问题,如果缺乏简单有效治理方案,各服务之间只能通过人肉配置的方式进行服务关系管理,当遇到服务关系变化时,就会变得极其麻烦且容易出错。

Consul[1] 是一个用来实现分布式系统服务发现与配置的开源工具。它内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如 ZooKeeper 等),使用起来也较为简单。

Consul 架构

Consul 集群支持多数据中心,在上图中有两个 DataCenter,他们通过 Internet 互联,为了提高通信效率,只有 Server 节点才加入跨数据中心的通信。在单个数据中心中,Consul 分为 Client 和 Server 两种节点(所有的节点也被称为 Agent),Server 节点保存数据,Client 负责健康检查及转发数据请求到 Server,本身不保存注册信息;Server 节点有一个 Leader 和多个 Follower,Leader 节点会将数据同步到 Follower,Server 节点的数量推荐是3个或者5个,在 Leader 挂掉的时候会启动选举机制产生一个新 Leader。

Consul 集群搭建

这里使用 Docker 搭建 3个 Server 节点 + 1 个 Client 节点,API 服务通过 Client 节点进行服务注册和发现。

从 Docker Hub 拉取 Consul 镜像
docker pull consul
启动 3个 Server 节点 + 1 个 Client 节点

docker-compose.yaml 如下:

version: '3'

services:
cs1:
image: consul
command: agent -server -client=0.0.0.0 -bootstrap-expect=3 -node=cs1 -data-dir=/data
volumes:
- /usr/local/docker/consul/data/cs1:/data
cs2:
image: consul
command: agent -server -client=0.0.0.0 -retry-join=cs1 -node=cs2 -data-dir=/data
volumes:
- /usr/local/docker/consul/data/cs2:/data
depends_on:
- cs1
cs3:
image: consul
command: agent -server -client=0.0.0.0 -retry-join=cs1 -node=cs3 -data-dir=/data
volumes:
- /usr/local/docker/consul/data/cs3:/data
depends_on:
- cs1
cc1:
image: consul
command: agent -client=0.0.0.0 -retry-join=cs1 -ui -node=cc1 -data-dir=/data
ports:
- 8500:8500
volumes:
- /usr/local/docker/consul/data/cc1:/data
depends_on:
- cs2
- cs3

主要参数说明:

参数名解释
-server设置为 Server 类型节点,不加则为 Client 类型节点
-client注册或者查询等一系列客户端对它操作的IP,默认是127.0.0.1
-bootstrap-expect集群期望的 Server 节点数,只有达到这个值才会选举 Leader
-node指定节点名称
-data-dir数据存放位置
-retry-join指定要加入的节点地址(组建集群)
-ui启用 UI 界面
集群状态

(e002ca62ac24 为容器名称,可通过 docker ps | grep consul 查看,选择任意一个即可)

查看节点状态和类型
docker exec -t e002ca62ac24 consul members

当前为3 个 Server 类型节点 ,1 个 Client 类型节点。

查看 Server 节点类型
docker exec -t e002ca62ac24 consul operator raft list-peers

当前为 cs1 为 leader,可以测试将 cs1 stop 观察 leader 的重新选举。

通过 http://192.168.124.9:8500 UI 界面查看 Consul 节点状态如下:(192.168.124.9 是 consul 容器外部访问 IP)

.NET Core 接入 Consul

  1. 创建 .NET Core WebAPI(3.1) 服务 ServiceA(2个实例) 和 ServiceB

  2. NuGet 安装 Consul

  3. 注册到 Consul 的核心代码如下(源码下载[2]):

    public static class ConsulBuilderExtensions
    {
    public static IApplicationBuilder RegisterConsul(this IApplicationBuilder app, IHostApplicationLifetime lifetime, ConsulOption consulOption)
    {
    var consulClient = new ConsulClient(x =>
    {
    x.Address = new Uri(consulOption.Address);
    });

    var registration = new AgentServiceRegistration()
    {
    ID = Guid.NewGuid().ToString(),
    Name = consulOption.ServiceName,// 服务名
    Address = consulOption.ServiceIP, // 服务绑定IP
    Port = consulOption.ServicePort, // 服务绑定端口
    Check = new AgentServiceCheck()
    {
    DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5),//服务启动多久后注册
    Interval = TimeSpan.FromSeconds(10),//健康检查时间间隔
    HTTP = consulOption.ServiceHealthCheck,//健康检查地址
    Timeout = TimeSpan.FromSeconds(5)
    }
    };

    // 服务注册
    consulClient.Agent.ServiceRegister(registration).Wait();

    // 应用程序终止时,服务取消注册
    lifetime.ApplicationStopping.Register(() =>
    {
    consulClient.Agent.ServiceDeregister(registration.ID).Wait();
    });
    return app;
    }
    }
  4. 添加配置如下:

    "Consul": {
    "ServiceName": "service-a",
    "ServiceIP": "192.168.124.11", // 当前服务访问 IP
    "ServicePort": 8000,
    "ServiceHealthCheck": "http://192.168.124.11:8000/healthCheck",
    "Address": "http://192.168.124.9:8500"
    }
  5. 注册成功结果如下:

关于.NET Core + Consul 服务注册及发现的示例分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

节点 服务 数据 类型 集群 健康 数据中心 检查 状态 选举 配置 示例 分析 内容 分布式 参数 只有 名称 地址 容器 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州为想互联网科技有限公司 亿人帮互联网科技有限公司 朗新科技与工业互联网 互联网最新的科技有限公司 互联网金融与金融科技 科技与互联网发展 狮子座互联网科技培训 长亮科技 互联网金融 中国互联网金融科技基金 互联网汽车科技小镇 互联网科技和法律行业 众安科技工业互联网合作 半导体是互联网高科技吗 工业互联网科技创业 国产互联网科技公司 长沙易易互联网科技有限公司 安徽九吞吴互联网科技有限公司 知域互联网科技有限公司官网 利用互联网等科技手段 小牛互联网科技有限公司地址 金融科技与互联网金融 互联网科技上市公司 互联网科技咨询 金融科技和互联网金融 太原新华互联网科技学校怎么样 字节跳动和互联网科技 南博望互联网科技有限公司 济南小医互联网科技有限公司招聘 科技信息时代互联网发展 重庆科技产业互联网有哪些
0