Consul入门06 - 键/值对数据
2016-06-27 16:21
169 查看
转载地址为:https://segmentfault.com/a/1190000005040921
为了提供服务发现以及健康检测,Consul提供了非常容易使用的键/值对存储。它能被用于存储动态配置信息,帮助服务协作,建构leader选举机制,以及开发者可以想到的建构任何其它的东西。
本篇假设你至少有一个Consul代理在运行。
为了展示存储键/值对是非常简单的,我们将在键/值存储里维护一些键。
我们在运行代理步骤中展示了查询本地代理,我们先验证键/值存储中没有任何键存在:
因为没有任何键,所以我们得到了404的响应,我们可以用 PUT 来存储一些键:
这里我们创建了3个键,每个都关联了值"test"。注意 值 字段的返回是基于base64的编码,该编码允许非UTF8字符集。对于键"web/key2",我们为其设置了一个42的 标记。所有的键都支持设置一个64位长的整形标记值。这个标记并不是由Consul内部使用的,它可以被用于存储任意键值对的元数据信息。
在设置值之后,我们使用 ?recurse 参数发出了 GET 请求来接收多个键的信息。
你也可以非常容易地获取单个键的信息:
删除一个键也同样非常简单,使用 DELETE 来删除一个键。我们可以指定完整路径来删除单独一个键,或者使用"?recurse"递归删除所有的键:
使用一个 PUT 请求相同的URI并且提供一个不同的消息体就可以修改指定的键,Consul提供了一个 检测并设置 的操作,对应的操作是原子的。通过在GET请求中提供 ?cas= 参数以及指定最新的 ModifyIndex 值我们就可以得到原子CAS操作。例如,假设我们想要更新"web/key1":
这里,第一个CAS更新成功了因为最新的 ModifyIndex 是97,而第二个操作失败了因为最新的 ModifyIndex 不再是97了。
我们可以使用 ModifyIndex 来等待指定键值的改变,例如,假设我们想要等待Key2的修改:
通过提供"?index="参数,我们请求等待直到键包含了一个大于101的 ModifyIndex 的值。无论如何由于"?wait=5"参数限制了查询最多等待5秒,之后会返回当前没有修改的值。该操作可以高效地等待键的更新。另外相同的方法可以用于等待一个键的集合,直到键集合中任何一个键发生的更新。
为了提供服务发现以及健康检测,Consul提供了非常容易使用的键/值对存储。它能被用于存储动态配置信息,帮助服务协作,建构leader选举机制,以及开发者可以想到的建构任何其它的东西。
本篇假设你至少有一个Consul代理在运行。
简单使用
为了展示存储键/值对是非常简单的,我们将在键/值存储里维护一些键。我们在运行代理步骤中展示了查询本地代理,我们先验证键/值存储中没有任何键存在:
$ curl -v http://localhost:8500/v1/kv/?recurse * About to connect() to localhost port 8500 (#0) * Trying 127.0.0.1... connected > GET /v1/kv/?recurse HTTP/1.1 > User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3 > Host: localhost:8500 > Accept: */* > < HTTP/1.1 404 Not Found < X-Consul-Index: 1 < Date: Fri, 11 Apr 2014 02:10:28 GMT < Content-Length: 0 < Content-Type: text/plain; charset=utf-8 < * Connection #0 to host localhost left intact * Closing connection #0
因为没有任何键,所以我们得到了404的响应,我们可以用 PUT 来存储一些键:
$ curl -X PUT -d 'test' http://localhost:8500/v1/kv/web/key1 true $ curl -X PUT -d 'test' http://localhost:8500/v1/kv/web/key2?flags=42 true $ curl -X PUT -d 'test' http://localhost:8500/v1/kv/web/sub/key3 true $ curl http://localhost:8500/v1/kv/?recurse [{"CreateIndex":97,"ModifyIndex":97,"Key":"web/key1","Flags":0,"Value":"dGVzdA=="}, {"CreateIndex":98,"ModifyIndex":98,"Key":"web/key2","Flags":42,"Value":"dGVzdA=="}, {"CreateIndex":99,"ModifyIndex":99,"Key":"web/sub/key3","Flags":0,"Value":"dGVzdA=="}]
这里我们创建了3个键,每个都关联了值"test"。注意 值 字段的返回是基于base64的编码,该编码允许非UTF8字符集。对于键"web/key2",我们为其设置了一个42的 标记。所有的键都支持设置一个64位长的整形标记值。这个标记并不是由Consul内部使用的,它可以被用于存储任意键值对的元数据信息。
在设置值之后,我们使用 ?recurse 参数发出了 GET 请求来接收多个键的信息。
你也可以非常容易地获取单个键的信息:
$ curl http://localhost:8500/v1/kv/web/key1 [{"CreateIndex":97,"ModifyIndex":97,"Key":"web/key1","Flags":0,"Value":"dGVzdA=="}]
删除一个键也同样非常简单,使用 DELETE 来删除一个键。我们可以指定完整路径来删除单独一个键,或者使用"?recurse"递归删除所有的键:
$ curl -X DELETE http://localhost:8500/v1/kv/web/sub?recurse $ curl http://localhost:8500/v1/kv/web?recurse [{"CreateIndex":97,"ModifyIndex":97,"Key":"web/key1","Flags":0,"Value":"dGVzdA=="}, {"CreateIndex":98,"ModifyIndex":98,"Key":"web/key2","Flags":42,"Value":"dGVzdA=="}]
使用一个 PUT 请求相同的URI并且提供一个不同的消息体就可以修改指定的键,Consul提供了一个 检测并设置 的操作,对应的操作是原子的。通过在GET请求中提供 ?cas= 参数以及指定最新的 ModifyIndex 值我们就可以得到原子CAS操作。例如,假设我们想要更新"web/key1":
$ curl -X PUT -d 'newval' http://localhost:8500/v1/kv/web/key1?cas=97 true $ curl -X PUT -d 'newval' http://localhost:8500/v1/kv/web/key1?cas=97 false
这里,第一个CAS更新成功了因为最新的 ModifyIndex 是97,而第二个操作失败了因为最新的 ModifyIndex 不再是97了。
我们可以使用 ModifyIndex 来等待指定键值的改变,例如,假设我们想要等待Key2的修改:
$ curl "http://localhost:8500/v1/kv/web/key2?index=101&wait=5s" [{"CreateIndex":98,"ModifyIndex":101,"Key":"web/key2","Flags":42,"Value":"dGVzdA=="}]
通过提供"?index="参数,我们请求等待直到键包含了一个大于101的 ModifyIndex 的值。无论如何由于"?wait=5"参数限制了查询最多等待5秒,之后会返回当前没有修改的值。该操作可以高效地等待键的更新。另外相同的方法可以用于等待一个键的集合,直到键集合中任何一个键发生的更新。
相关文章推荐
- consul简介
- Cloudfoundry Diego 中consul的应用
- 使用Consul快速搭建简易分布式服务监控系统
- consul的安装和配置
- 使用consul实现服务的注册和发现
- consul(第一篇)consul 入门
- consul(第二篇)consul Ops
- Consul入门01 - 安装Consul
- Consul入门02 - 运行Consul代理
- Consul入门03 - 注册服务
- Consul入门04 - Consul集群
- Consul入门05 - 健康检测
- 服务发现:Zookeeper vs etcd vs Consul
- [Consul]Error starting agent: Failed to get advertise address: Multiple private IPs found.
- Consul & Registrator & Rails Service all together in separate Docker container
- 监控之美--prometheus配置文件动态管理
- 服务发现之美:Consul集群搭建
- Docker可视化界面(Consul+Shipyard+Swarm+Service Discover
- consul安装
- zookeeper+mesos+docker+swarm