- 创建watcher.json文件,放在consul配置目录下,启动consul时指定
-config-dir
{
"watches": [
{
"type": "key",
"key": "foo/data",
"handler_type": "http",
"http_handler_config": {
"path":"http://127.0.0.1:8763/watch",
"method": "POST",
"header": {"x-foo":["bar", "baz"]},
"timeout": "10s",
"tls_skip_verify": false
}
}
]
}
- 创建一个http服务用于接收变更的key,http://127.0.0.1:8763/watch
@RequestMapping("/watch")
public void watcher(HttpServletRequest request) throws IOException {
System.out.println(request.getMethod());
BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream()));
String str = "";
String wholeStr = "";
while ((str = reader.readLine()) != null) {
wholeStr += str;
}
System.out.println("body:" + wholeStr);
}
- 在consul ui中新增 或者修改foo/data这个key值,watcher就会收到这个更新后的值
POST
body:{"Key":"foo/data","CreateIndex":12,"ModifyIndex":12,"LockIndex":0,"Flags":0,"Value":"YWFhYWFhYQ==","Session":""}
POST
body:{"Key":"foo/data","CreateIndex":12,"ModifyIndex":17,"LockIndex":0,"Flags":0,"Value":"YWFhYWFhYXNzc3NkZHNkZHNk","Session":""}
POST
body:{"Key":"foo/data","CreateIndex":12,"ModifyIndex":25,"LockIndex":0,"Flags":0,"Value":"ewogICJ0ZXN0IjoidGVzdCIsCiAgInRlc3QyIjoidDMzM2VzdCIKfQ==","Session":""}
value为base64编码,解码后得到需要的值。
- handle除了是http,还可以是sh脚本,如
{ "type": "key", "key": "foo/bar/baz", "handler_type": "script", "args": ["/usr/bin/my-service-handler.sh", "-redis"] }
以下摘自官网:https://www.consul.io/docs/agent/watches.html#key
-
Watch Types/支持的类型
The following types are supported. Detailed documentation on each is below:
key
- Watch a specific KV pairkeyprefix
- Watch a prefix in the KV storeservices
- Watch the list of available servicesnodes
- Watch the list of nodesservice
- Watch the instances of a servicechecks
- Watch the value of health checksevent
- Watch for custom user events
{
"type": "key",
"key": "foo/bar/baz",
"args": ["/usr/bin/my-service-handler.sh", "-redis"]
}
{
"type": "keyprefix",
"prefix": "foo/",
"args": ["/usr/bin/my-service-handler.sh", "-redis"]
}
{
"type": "service",
"service": "redis",
"args": ["/usr/bin/my-service-handler.sh", "-redis"],
"tag": "bar"
}
等等