`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.
Check whetehr the 1st level encoded json is array or not, to
support 1st level array in consul config.
During debug, i suspected the incapability of arrray is caused by
json reader, so i added test for array. I think it makes no harm
to also check that in.
Debug logs that were helpful when squashing bugs have been removed.
advertiseToNetwork replaced the watchTable which originally watched the
routing table entries. We now take a different approach to propagating
the local registry services into the network registry.
Remove has been renamed to Delete to be more in line with the framework.
A bunch of comments have been added/updated for the future generations
We have increased the Network Registry TTL to 2 minutes.
Added ID function to router interface.
Network registry addresses are deregistered when the router is stopped.
Query has been updated to search for particular GW in lookups.
Router interface has been redefined which fits better with what we are
looking for.
Routing table now offers a comprehensive set of information about its
entries which will make up for rich queries in the future
Query interface has been defined to enable current basic and more
advanced queries in the future.
When `consul.StripPrefix(true)` is set, current impl. will pass the
specified prefix (or default prefix) when calling consul api.
However, `prefix` in consul api starts with no leading slash, so
the default prefix (`/micro/config`) doesn't actually work.
I avoid code changes (esp. the one in `util.go`) to eliminate
impact on users who already notice it.