Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Go Realtime Config

NotificationsYou must be signed in to change notification settings

rcv911/realtime_config

Repository files navigation

Описание работы:

  1. Инициализация: Конфигурация загружается изetcd при запуске приложения через методNewRealTimeConfig. Параметры можно также подгрузить из YAML файла для начальной загрузки.
  2. Наблюдение за изменениями: С помощьюWatch метод следит за изменениями вetcd. Как только конфигурация обновляется, вызывается функцияupdateConfig, которая безопасно обновляет значения.
  3. Получение конфигурации: Для получения текущей конфигурации используется методGetConfig, который предоставляет потокобезопасный доступ к текущей версии конфигурации.
  4. Завершение: Для корректного завершения работы вызывается методClose, который завершаетwatch и закрывает соединение сetcd.

TODO:

  • Обновлять точечно по полям, не весб конфиг
  • Попробовать атомики для полей
  • Интерфейс для etcd
  • Нормально DI настроить

Cmd

dockerexec -it etcd1 etcdctl --endpoints=http://etcd1:2379 endpoint healthdockerexec -it etcd2 etcdctl --endpoints=http://etcd2:2379 endpoint healthdockerexec -it etcd3 etcdctl --endpoints=http://etcd3:2379 endpoint health
dockerexec -it etcd1 etcdctl --endpoints=http://etcd1:2379 put foo bardockerexec -it etcd1 etcdctl --endpoints=http://etcd1:2379 get foo
docker network inspect etcd-net
docker network connect etcd-net etcd1docker network connect etcd-net etcd2docker network connect etcd-net etcd3
package mainimport ("context""fmt""log""time"clientv3"go.etcd.io/etcd/client/v3")funcmain() {// Настройки подключенияendpoints:= []string{"localhost:2379"}dialTimeout:=5*time.Second// Подключаемся к etcdclient,err:=clientv3.New(clientv3.Config{Endpoints:endpoints,DialTimeout:dialTimeout,})iferr!=nil {log.Fatalf("Failed to connect to etcd: %v",err)}deferclient.Close()// Контекст с таймаутомctx,cancel:=context.WithTimeout(context.Background(),5*time.Second)defercancel()// Запись данных в etcdkey:="foo"value:="bar"_,err=client.Put(ctx,key,value)iferr!=nil {log.Fatalf("Failed to put key: %v",err)}fmt.Printf("✅ Key written: %s -> %s\n",key,value)// Чтение данных из etcdresp,err:=client.Get(ctx,key)iferr!=nil {log.Fatalf("Failed to get key: %v",err)}// Выводим значениеiflen(resp.Kvs)>0 {fmt.Printf("🔍 Key found: %s -> %s\n",resp.Kvs[0].Key,resp.Kvs[0].Value)}else {fmt.Println("⚠️ Key not found")}}

Обновить конфиг полностью

  • из папкиconfig
dockerexec -it etcd-single etcdctl --endpoints=http://localhost:2379 put /app/config"$(cat config_template_updated.yaml)"

About

Go Realtime Config

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages


[8]ページ先頭

©2009-2025 Movatter.jp