key/value做用web
除了提供服務發現和綜合健康檢查,Consul還提供了一個易於使用的鍵/值存儲。這能夠用來保存動態配置,協助服務協調,創建領導人選舉,並啓用其餘開發人員能夠想構建的任何其餘內容。redis
有兩種方法可使用:經過HTTP API和經過CLI API。spring
D:\soft\worksoft\consul_1.0.6_windows_amd64>consul kv get redis/config/minconns Error! No key exists at: redis/config/minconns
你將看到沒有結果返回,因爲KV存儲中沒有該鍵返回了一個錯誤,接下來咱們將插入或」put」一個值到KV存儲中。json
D:\soft\worksoft\consul_1.0.6_windows_amd64>consul kv put redis/config/minconns 1 Success! Data written to: redis/config/minconns
如今再次查詢該鍵你將看到以下結果:bootstrap
D:\soft\worksoft\consul_1.0.6_windows_amd64>consul kv get redis/config/minconns 1
Consul保留額外的元數據在該字段,你可使用-detailed標誌檢索詳細信息:windows
D:\soft\worksoft\consul_1.0.6_windows_amd64>consul kv get -detailed redis/config/minconns CreateIndex 74 Flags 0 Key redis/config/minconns LockIndex 0 ModifyIndex 74 Session - Value 1
在web UI上能夠看到用CLI API建立的keyapp
在web UI上建立一個「duan」的key:curl
再經過CLI API查詢結果:測試
設置值的時候,還可使用-flags標誌
- -flags=<uint>
Unsigned integer value to assign to this key-value pair. This value is not read by Consul, so clients can use this value however makes sense for their use case. The default value is 0 (no flags).ui
flags用來作客戶端自定義標誌,consul並不使用它,你能夠在你本身的程序中隨便定義
D:\soft\worksoft\consul_1.0.6_windows_amd64>consul kv put -flags=42 redis/config/users/admin abcd1234 Success! Data written to: redis/config/users/admin
設置flag值爲42,想設置成什麼就設置成什麼.全部的鍵都支持設置一個64位的整型值。
使用-recurse選項能夠列出KV存儲中全部keys,返回的結果將按照字母排序。
D:\soft\worksoft\consul_1.0.6_windows_amd64>consul kv get -recurse redis/config/minconns:1 redis/config/users/admin:abcd1234
使用delete命令刪除KV存儲中指定的key。
D:\soft\worksoft\consul_1.0.6_windows_amd64>consul kv delete redis/config/minconns Success! Deleted key: redis/config/minconns
還可使用recurse選項遞歸選項刪除含某個前綴的全部keys:
D:\soft\worksoft\consul_1.0.6_windows_amd64>consul kv delete -recurse redis Success! Deleted keys with prefix: redis
若是要更新一個存在鍵的值,能夠put一個新值在一樣的路徑上。
D:\soft\worksoft\consul_1.0.6_windows_amd64>consul kv put foo bar Success! Data written to: foo D:\soft\worksoft\consul_1.0.6_windows_amd64>consul kv get foo bar D:\soft\worksoft\consul_1.0.6_windows_amd64>consul kv put foo zip Success! Data written to: foo
Consul可使用Check_And_Set提供原子鍵更新操做。執行CAS操做時需指定-cas標誌。至於什麼是CAS,請自行百度吧
- -modify-index=<uint>
Unsigned integer representing the ModifyIndex of the key. This is used in combination with the -cas flag.
首先查詢foo這個key的詳細信息
D:\soft\worksoft\consul_1.0.6_windows_amd64>consul kv get -detailed foo CreateIndex 131 Flags 0 Key foo LockIndex 0 ModifyIndex 133 Session - Value zip
看到foo的索引編號ModifyIndex是133。而後使用CAS操做的方式來修改它
D:\soft\worksoft\consul_1.0.6_windows_amd64>consul kv put -cas -modify-index=133 foo bar Success! Data written to: foo
修改爲功,再查詢
D:\soft\worksoft\consul_1.0.6_windows_amd64>consul kv get -detailed foo CreateIndex 131 Flags 0 Key foo LockIndex 0 ModifyIndex 141 Session - Value bar
ModifyIndex變成141了。依然使用上面那個修改命令試試
D:\soft\worksoft\consul_1.0.6_windows_amd64>consul kv put -cas -modify-index=133 foo bar Error! Did not write to foo: CAS failed
失敗了。緣由是第一次CAS操做成功,由於ModifyIndex的值是141,咱們輸入的也是-modify-index=133。
第二次操做失敗,ModifyIndex已經變成141了,咱們還用-modify-index=133,Check_And_SetS中的Check這步就失敗了,不會再Set了。
2.一、查看所有key/value http://127.0.0.1:8500/v1/kv/?recurse
說明:
2.二、添加key/value
說明:flags--用於爲任意一個KV添加一個有意義的metadata。
注意:上邊的這個就是有問題的,必定要注意是flags而非flag。
2.三、查看單個key/value
說明:value是test的base64編碼(使用base64編碼是爲了容許非UTF-8的字符)
2.四、修改key/value
cas的值若是與ModifyIndex相等,則修改爲功,若不相等,則修改失敗。
2.五、刪除key/value
2.5.一、刪除單一KV
2.5.二、刪除必定範圍的KV(指定前綴範圍內的KV)
說明:
因爲consul自帶kv存儲,徹底能夠取代config server。
步驟以下:
1、先添加jar依賴
//compile 'org.springframework.cloud:spring-cloud-starter-config' compile 'org.springframework.cloud:spring-cloud-starter-consul-config'
以前config server的依賴去掉,換成consul-config的依賴便可。
2、修改bootstrap.yml文件
1 spring: 2 ... 3 cloud: 4 consul: 5 host: 127.0.0.1 6 port: 8500 7 discovery: 8 tags: version=1.0,author=yjmyzz 9 healthCheckPath: /info.json 10 healthCheckInterval: 5s 11 instanceId: ${spring.application.name}:${spring.cloud.client.ipAddress} 12 enabled: true 13 config: 14 enabled: true 15 format: YAML 16 prefix: config 17 defaultContext: application 18 profileSeparator: ',' 19 data-key: data 20 # config: 21 # label: dev 22 # discovery: 23 # enabled: true 24 # service-id: my-config-server 25 # fail-fast: true 26 # retry: 27 # max-interval: 1500 28 # max-attempts: 5 29 # multiplier: 1.2
關鍵是13-19行,解釋一下:
15行 format:YAML 表示consul中的key-value中的value內容,採用YAML格式
16行 prefix: config 表示consul用於存儲配置的文件夾根目錄名爲config
17行 defaultContext: application 表示配置文件對應的應用名稱(eg: 你的服務若是打算取名爲myApp,則這裏的application就要換成myApp)
18行 profileSeparator: ',' 表示若是有多個profile(eg: 開發環境dev,測試環境test...) ,則key名中的profile與defaultContext之間,用什麼分隔符來表示(這裏有點費解,後面還會詳細解釋)
19行 data-key: data 表示最後一層節點的key值名稱,通常默認爲data
3、consul中建立kv配置節點
不少文章,包括官方文檔這一步都講得不明不白,關鍵是 節點名稱的命名規則,要與bootstrap.yml中的配置同樣,好比咱們要建立一個test環境的配置,key名能夠取爲:
config/application,test/data
這裏每個部分,都要與上一步bootstrap.yml中的一致,上圖中5個剪頭所指,你們結合上一步中15-19行的解釋體會一下。
而後Value值的部分,把配置內容按yml格式填進去就行:
tips: 平時開發時,通常使用consul dev模式,開發模式下kv存儲不會持久化存儲,全在內存中(重啓consul就丟了!),因此通常建議yml配置文件內容,在項目中單獨存一個文件,啓動調試時,直接把配置文件內容貼到Value框裏便可。
好了,如今你能夠試着啓動下,順利的話,應該就能夠了,是否是很簡單,關鍵還省掉了config server的部署,幫公司省了機器,別忘了讓領導給你加績效哦^_^
若是但願用代碼的方式來讀/寫 KV存儲,能夠用下面的方式:
讀:
curl http://localhost:8500/v1/kv/config/application,dev/data?raw=true