Consul入門06 - 鍵/值對數據

爲了提供服務發現以及健康檢測,Consul提供了很是容易使用的鍵/值對存儲。它能被用於存儲動態配置信息,幫助服務協做,建構leader選舉機制,以及開發者能夠想到的建構任何其它的東西。html

本篇假設你至少有一個Consul代理在運行。linux

簡單使用

爲了展現存儲鍵/值對是很是簡單的,咱們將在鍵/值存儲裏維護一些鍵。web

咱們在運行代理步驟中展現了查詢本地代理,咱們先驗證鍵/值存儲中沒有任何鍵存在:bash

$ 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

$ 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 請求來接收多個鍵的信息。url

你也能夠很是容易地獲取單個鍵的信息:翻譯

$ 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":code

$ 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秒,以後會返回當前沒有修改的值。該操做能夠高效地等待鍵的更新。另外相同的方法能夠用於等待一個鍵的集合,直到鍵集合中任何一個鍵發生的更新。

下一步

這裏的例子僅僅展現了部分的API使用。若是須要完整的文檔,請查詢the /kv/ route of the HTTP API

下一步,咱們將看看Consul支持的[web界面]()中的選項

翻譯自這裏

相關文章
相關標籤/搜索