`config.NewConfig()` with consul source will both read from consul and watch consul for changes. Hence, the `prefix` is used in these 2 cases: - read case: it is used to strip path based on the `KVPair` returned from consul `kv.List()` method - watch case: it is used as the `key` of watch query (`keyprefix` type) So for *watch case*, the `key` is leagal to be `/` for watching change on root. While for *read case*, because `KVPair.Key` is always stripped off the leading slash, so if user specified some `prefix` with leading slash, we should strip it also. An extream case would be: user want's to read & watch node in root dir. One would specify `prefix` as `/`, and it should work then.
		
			
				
	
	
		
			50 lines
		
	
	
		
			1006 B
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1006 B
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# Consul Source
 | 
						|
 | 
						|
The consul source reads config from consul key/values
 | 
						|
 | 
						|
## Consul Format
 | 
						|
 | 
						|
The consul source expects keys under the default prefix `/micro/config`
 | 
						|
 | 
						|
Values are expected to be json
 | 
						|
 | 
						|
```
 | 
						|
// set database
 | 
						|
consul kv put micro/config/database '{"address": "10.0.0.1", "port": 3306}'
 | 
						|
// set cache
 | 
						|
consul kv put micro/config/cache '{"address": "10.0.0.2", "port": 6379}'
 | 
						|
```
 | 
						|
 | 
						|
Keys are split on `/` so access becomes
 | 
						|
 | 
						|
```
 | 
						|
conf.Get("micro", "config", "database")
 | 
						|
```
 | 
						|
 | 
						|
## New Source
 | 
						|
 | 
						|
Specify source with data
 | 
						|
 | 
						|
```go
 | 
						|
consulSource := consul.NewSource(
 | 
						|
	// optionally specify consul address; default to localhost:8500
 | 
						|
	consul.WithAddress("10.0.0.10:8500"),
 | 
						|
	// optionally specify prefix; defaults to /micro/config
 | 
						|
	consul.WithPrefix("/my/prefix"),
 | 
						|
  // optionally strip the provided prefix from the keys, defaults to false
 | 
						|
  consul.StripPrefix(true),
 | 
						|
)
 | 
						|
```
 | 
						|
 | 
						|
## Load Source
 | 
						|
 | 
						|
Load the source into config
 | 
						|
 | 
						|
```go
 | 
						|
// Create new config
 | 
						|
conf := config.NewConfig()
 | 
						|
 | 
						|
// Load file source
 | 
						|
conf.Load(consulSource)
 | 
						|
```
 |