You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何通过REST API为Consul添加Watches以监听KV变更?

如何用REST API配置Consul的HTTP KV Watch

嘿,我之前刚好折腾过这个,官方文档确实没专门给出REST API配置HTTP Watch的完整示例,但其实它是通过Consul Agent的Watch注册API来实现的,下面给你一步步讲清楚:

1. 先搞懂HTTP Watch的核心配置结构

Consul的HTTP Watch本质是让Agent监听指定的KV键(或前缀),当有变更时,自动把变更信息POST到你指定的服务端点。一个基础的Watch配置JSON结构长这样:

{
  "Type": "kv",
  "Key": "my/config/key", // 要是想监听前缀,就换成"Prefix": "my/config/"
  "HandlerType": "http",
  "Handler": "http://your-service-endpoint:8080/consul-kv-change",
  "Token": "your-acl-token-if-needed" // 开了ACL的话就得加这个
}

2. 用REST API注册Watch

你需要给Consul Agent发一个PUT请求到/v1/agent/watch/register接口,把上面的配置作为请求体传进去。用curl的示例如下:

curl -X PUT \
  http://consul-agent-ip:8500/v1/agent/watch/register \
  -H "Content-Type: application/json" \
  -d '{
    "Type": "kv",
    "Key": "app/config",
    "HandlerType": "http",
    "Handler": "http://your-service:3000/webhook/consul-kv",
    "Datacenter": "dc1"
  }'
  • consul-agent-ip换成你的Consul Agent地址(本地测试就用localhost
  • Handler字段就是你的服务接收通知的URL,Consul会在KV变更时给这个地址发POST请求

3. 验证Watch是否注册成功

发个GET请求到/v1/agent/watches接口,就能看到所有已注册的Watch列表:

curl http://consul-agent-ip:8500/v1/agent/watches

返回结果里应该能找到你刚才注册的KV Watch配置。

4. 测试KV变更通知

现在可以修改对应的KV值试试:

curl -X PUT http://consul-agent-ip:8500/v1/kv/app/config -d "new-value"

这时Consul Agent会自动把变更信息POST到你的Handler地址,POST请求的body是包含KV详情的JSON,大概格式是:

{
  "Key": "app/config",
  "Value": "bmV3LXZhbHVl", // Base64编码的新值
  "ModifyIndex": 1234,
  "CreateIndex": 1230
}

几个重要注意点

  • 通过REST API注册的Watch是临时的:Consul Agent重启后,这些Watch会消失。如果要持久化,得把Watch配置写到Consul Agent的配置文件(比如consul.hcl)里的watches块中。
  • ACL权限:如果你的Consul开了ACL,注册Watch的请求需要带有拥有agent:write权限的Token。
  • 前缀监听:要是想监听某个前缀下的所有KV键,把配置里的Key换成Prefix就行,比如"Prefix": "app/configs/"

内容的提问来源于stack exchange,提问作者brain storm

火山引擎 最新活动