Как прикрепить часы для консула с помощью REST API?

Я использую REST API для доступа к консулу.

например, вот как я создаю запись

curl -X PUT -d @- localhost:8500/v1/kv/example <<< FooValue

я хочу добавить watches Консультацию, которая уведомляет мою службу при изменении значения ключа.

В документации приведен пример того, как http watches выглядит как. Но мне интересно как это прикрепить watches консультироваться с помощью REST

Я не мог найти примеры этого

Спасибо

2 ответа

Согласно документации в консуле, в настоящее время часы могут быть добавлены двумя способами:

1. Как часть конфигурации агента

2. Используя команду watch.

Если вы заинтересованы в получении уведомлений об изменении значения ключа, вы можете сделать это с помощью "обновить событие" с помощью прослушивателя событий. Планировщик задач по своей природе доступен, чтобы позаботиться об этом.

установить свойство следующим образом

spring.cloud.consul.config.watch.enabled = верно

Часы используют Spring TaskScheduler, чтобы запланировать вызов консула.

В относительном пути к хранилищу kv 'config / application / data' поместите вашу конфигурацию,

например:-> пример: FooValue

Вы получите информацию журнала "ключи изменены: [пример: BarValue]" при изменении данных хранилища kv.

Прочитав исходный код реализации команды watch, я нашел способ сделать это в HTTP API. Обратите внимание, что это недокументировано, используйте его на свой страх и риск.

Допустим следить за изменением КВ по пути/xxx. Сначала выполните следующий запрос.

GET http://your-consul.com:8500/v1/kv/xxx?recurse=true&stale=true

Консул немедленно откликнется на этот запрос.

      Connection: keep-alive
Content-Length: 209
Content-Type: application/json
Date: Sun, 13 Nov 2022 00:27:04 GMT
Vary: Accept-Encoding
Via: 1.1 proxy-server (squid/5.5)
X-Cache: MISS from proxy-server
X-Cache-Lookup: MISS from proxy-server:3128
X-Consul-Default-Acl-Policy: allow
X-Consul-Index: 3386097
X-Consul-Knownleader: true
X-Consul-Lastcontact: 0
X-Consul-Query-Backend: blocking-query

Заголовок http — это то, что мы ищем.

Затем выдает еще один запрос с индексом.

GET http://your-consul.com:8500/v1/kv/xxx?index=3386097&recurse=true&stale=true

Теперь этот запрос будет зависать до тех пор, пока не произойдет изменение. При ответе на этот запрос полезная нагрузка содержит сведения обо всех дочерних KV по заданному пути.X-Consul-Indexтакже будет включен в HTTP-заголовок ответа, вам необходимо обновитьindexстрока запроса, если вы хотите посмотреть еще раз.

Как правило, вы можете наблюдать за изменениями через HTTP API, как это делает инструмент консула. Обратите внимание, что вам нужно тщательно реализовать логику, чтобы обработать тайм-аут/сетевую ошибку/и т. д.

Другие вопросы по тегам