Consul之:key/value存储

key/value作用

  • 动态修改配置文件
  • 支持服务协同
  • 建立leader选举
  • 提供服务发现
  • 集成健康检查

除了提供服务发现和综合健康检查,Consul还提供了一个易于使用的键/值存储。这可以用来保存动态配置,协助服务协调,建立领导人选举,并启用其他开发人员可以想构建的任何其他内容。

有两种方法可以使用:通过HTTP API和通过CLI API。

一、使用CLI API操作key/value

1、consul kv get 查询

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存储中。

2、consul kv put增加key/value

D:\soft\worksoft\consul_1.0.6_windows_amd64>consul kv put redis/config/minconns 1
Success! Data written to: redis/config/minconns

现在再次查询该键你将看到如下结果:

D:\soft\worksoft\consul_1.0.6_windows_amd64>consul kv get redis/config/minconns
1

Consul保留额外的元数据在该字段,你可以使用-detailed标志检索详细信息:

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创建的key

在web UI上创建一个“duan”的key:

再通过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).

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位的整型值。

3、consul kv get -recurse 列表查询

使用-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

4、consul kv delete删除

使用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了。

二、使用http API操作key/value

2.1、查看全部key/value   http://127.0.0.1:8500/v1/kv/?recurse

说明:

  • 使用?recurse参数来指定查看多个KV
  • 没有值--404

2.2、添加key/value

说明:flags--用于为任意一个KV添加一个有意义的metadata。

注意:上边的这个就是有问题的,一定要注意是flags而非flag。

2.3、查看单个key/value

说明:value是test的base64编码(使用base64编码是为了允许非UTF-8的字符)

2.4、修改key/value

cas的值如果与ModifyIndex相等,则修改成功,若不相等,则修改失败。

2.5、删除key/value

2.5.1、删除单一KV

2.5.2、删除一定范围的KV(指定前缀范围内的KV)

说明:

  • 指定删除的KV的K的前缀(zjg)
  • 多个操作一定要有?recurse参数

三、使用Consul 的key/value存储替换config server

由于consul自带kv存储,完全可以取代config server。

步骤如下:

一、先添加jar依赖

//compile 'org.springframework.cloud:spring-cloud-starter-config'
compile 'org.springframework.cloud:spring-cloud-starter-consul-config'

之前config server的依赖去掉,换成consul-config的依赖即可。

二、修改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

三、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

Consul KV的更多相关文章

  1. consul kv使用介绍

    有两种方法与Consul K/V交互的方式 HTTP API Consul KV CLI WEB访问 命令行使用 帮助命令:consul kv --help 列出所有kv:consul kv get ...

  2. consul实现分布式锁

    分布式一致性问题: 分布式的CAP理论告诉我们"任何一个分布式系统都无法同时满足一致性(Consistency).可用性(Availability)和分区容错性(Partition tole ...

  3. consul分布式集群搭建

    环境准备 三台机器: vm-a    10.200.110.90    centos7vm-b    10.200.110.91    centos7vm-c    10.200.110.93     ...

  4. 服务发现 - consul 的介绍、部署和使用

    什么是服务发现 相关源码: spring cloud demo 微服务的框架体系中,服务发现是不能不提的一个模块.我相信了解或者熟悉微服务的童鞋应该都知道它的重要性.这里我只是简单的提一下,毕竟这不是 ...

  5. .NET Core微服务之路:基于Consul最少集群实现服务的注册与发现(二)

    重温Consul最少化集群的搭建  

  6. 服务发现之consul的介绍、部署和使用

    什么是服务发现 微服务的框架体系中,服务发现是不能不提的一个模块.我相信了解或者熟悉微服务的童鞋应该都知道它的重要性.这里我只是简单的提一下,毕竟这不是我们的重点.我们看下面的一幅图片:     图中 ...

  7. Consul之:key/value存储

    key/value作用 动态修改配置文件 支持服务协同 建立leader选举 提供服务发现 集成健康检查 除了提供服务发现和综合健康检查,Consul还提供了一个易于使用的键/值存储.这可以用来保存动 ...

  8. 服务发现 - consul 的介绍、部署和使用(转)

    什么是服务发现 相关源码: spring cloud demo 微服务的框架体系中,服务发现是不能不提的一个模块.我相信了解或者熟悉微服务的童鞋应该都知道它的重要性.这里我只是简单的提一下,毕竟这不是 ...

  9. Consul 入门(二)

    KV 存储 通过命令行操作 $ consul kv put hello world # 设置数据 Success! Data written to: hello $ consul kv get hel ...

随机推荐

  1. 使用Tor创建.onion域名网站(创建暗网服务和暗网的网站)

    使用Tor 的.onion域名创建匿名服务器 Tor不仅可以提供客户端的匿名访问,Tor还可以提供服务器的匿名.通过使用Tor网络,用户可以维护位置不可知的服务器.当然如果要访问这个隐蔽的服务,客户端 ...

  2. 【转】iphone - ios app maximum memory budget

    https://stackoverflow.com/questions/5887248/ios-app-maximum-memory-budget device: (crash amount/tota ...

  3. ResultMap详解

    MyBatis:ResultMap详解   一.前言   MyBatis是基于“数据库结构不可控”的思想建立的,也就是我们希望数据库遵循第三范式或BCNF,但实际事与愿违,那么结果集映射就是MyBat ...

  4. linux命令详解2-文件管理,查看文件命令

    1. cat命令(tac) ----连接文件,并打印出来(顺序打印)与tac命令类似只不过,tac命令是逆序打印 [语法] cat [OPTION]... [FILE]... [选项] -A:显示所有 ...

  5. Python基础语法习题一

    Part 1 习题 1.简述编译型与解释型语言的区别,且分别列出你知道的哪些语言属于编译型,哪些属于解释型 2.执行 Python 脚本的两种方式是什么 3.Pyhton 单行注释和多行注释分别用什么 ...

  6. Lucene的查询及高级内容

    Lucene查询 基本查询: @Test public void baseQuery() throws Exception { //1. 创建查询的核心对象 FSDirectory d = FSDir ...

  7. VUE+WebPack游戏设计:欲望都市城市图层的设计

  8. 高性能Web服务器Nginx的配置与部署研究(13)应用模块之Memcached模块+Proxy_Cache双层缓存模式

    通过<高性能Web服务器Nginx的配置与部署研究——(11)应用模块之Memcached模块的两大应用场景>一文,我们知道Nginx从Memcached读取数据的方式,如果命中,那么效率 ...

  9. 【总结整理】自带天气app,为什么还要下载

    很简单那就说明用户对天气这个功能的需求并没有表面那么简单呗,还有更深层次的需求~ 先声明我自己是没有这方面需求的,我就纯属YY一下 既然数据都一样的话,那是什么让用户觉得天气APP更专业呢? 1.历史 ...

  10. Library not found for -lAPOpenSdk

    多人开发合作的时候 总是会遇见各种各样的问题 今天就来讲一个关于友盟的问题 在我的小伙伴 用cocoapods 中添加了这样一句话 pod ‘UMengSocialCOM’,  并且pod updat ...