Consul 服务注册
服务注册是使用 Consul 的第一步:把服务的名字、地址、端口登记进服务目录,调用方才能按名字找到它。注册有配置文件与命令/API 两种主流方式,本节先讲最常用的配置文件方式。
配置文件注册
把服务定义 JSON 放进 agent 的配置目录(-config-dir),一个文件可含一个 service 块,也可放多个:
{
"service": {
"name": "web",
"id": "web-192.168.1.10-80",
"address": "192.168.1.10",
"port": 80,
"tags": ["primary", "nginx"],
"check": {
"http": "http://192.168.1.10:80/health",
"interval": "10s"
}
}
}
字段说明:
| 字段 | 必填 | 说明 |
|---|---|---|
| name | 是 | 服务名,按此名做服务发现 |
| id | 否 | 实例唯一标识,缺省等于 name;同机多实例时必须手动区分 |
| address / port | 建议 | 实例地址与端口,缺省时 address 取本机 IP |
| tags | 否 | 标签,可区分版本、环境,查询时按标签过滤 |
| check | 否 | 健康检查定义,详见第 7 章 |
加载并验证
文件放进配置目录后启动 agent 即可自动注册;对运行中的 agent 执行 reload 平滑加载新文件:
sudo mkdir -p /etc/consul.d
sudo cp web-service.json /etc/consul.d/
consul reload # 平滑重载配置目录
# 输出:Configuration reload triggered
consul catalog services # 验证注册结果
# 输出:consul web
一个 web + 一个 api 的注册实例
再注册一个 api 服务,与 web 同放配置目录;两台机器的服务地址、端口不同,靠 id 区分:
{
"service": {
"name": "api",
"id": "api-192.168.1.10-8080",
"address": "192.168.1.10",
"port": 8080,
"tags": ["v1"]
}
}
consul reload
consul catalog services
# 输出:api consul web
consul catalog service web # 按服务名查看实例详情
# 输出:Node Address Service ID Tags
# 输出:主机名 192.168.1.10 web web-192...-80 nginx
命令与 API 注册
程序运行期需要动态上下线时,用命令/API 方式:consul services register 读文件注册,或直接 PUT /v1/agent/service/register 提交同样的 JSON(第 6 章详解)。各语言 SDK 内部调用的就是这套接口。
小结
配置文件注册最省事:把 service 块放进配置目录、consul reload 即完成登记,配好 id 区分多实例。注册后务必用 consul catalog service 查询验证,确认地址端口与标签都符合预期。