Dans les systèmes distribués, la gestion de la configuration est un maillon très critique. etcd est un conteneur de stockage clé-valeur hautement disponible, distribué et cohérent qui est souvent utilisé dans des scénarios tels que la coordination distribuée, la découverte de services et la gestion de configuration. Golang est un langage compilé En raison de ses performances efficaces et de ses fonctionnalités de concurrence, il est devenu le meilleur choix pour utiliser etcd. Cet article présentera comment Golang utilise etcd.
Téléchargez la version qui correspond au système depuis le site officiel https://github.com/etcd-io/etcd/releases, décompressez-la et exécutez etcd.
go get go.etcd.io/etcd/clientv3
La façon de connecter etcd dans Golang se fait via la bibliothèque clientv3 fournie par etcd. Voici un exemple simple de connexion à etcd :
import ( "context" "fmt" "go.etcd.io/etcd/clientv3" ) func main() { config := clientv3.Config{ Endpoints: []string{"localhost:2379"}, // etcd endpoints DialTimeout: 5 * time.Second, } client, err := clientv3.New(config) if err != nil { // handle error } defer client.Close() }
Ensuite, nous pouvons utiliser les méthodes Put et Get fournies par clientv3 pour écrire et lire des paires clé-valeur. La méthode Put écrira une paire clé-valeur dans etcd et la méthode Get lira la valeur de la clé dans etcd. Voici un exemple complet :
import ( "context" "fmt" "go.etcd.io/etcd/clientv3" ) func main() { // 连接etcd config := clientv3.Config{ Endpoints: []string{"localhost:2379"}, // etcd endpoints DialTimeout: 5 * time.Second, } client, err := clientv3.New(config) if err != nil { // handle error } defer client.Close() // 写入键值对 _, err = client.Put(context.Background(), "hello", "world") if err != nil { // handle error } // 读取键值对 resp, err := client.Get(context.Background(), "hello") if err != nil { // handle error } // 输出键的值 for _, ev := range resp.Kvs { fmt.Printf("%s : %s ", ev.Key, ev.Value) } }
En exécutant l'exemple ci-dessus, nous pouvons écrire une paire clé-valeur dans etcd et lire la valeur de la clé dans etcd.
Une autre fonctionnalité puissante d'etcd est qu'il peut surveiller les paires clé-valeur en temps réel via le mécanisme Watch. Une fois qu'une paire clé-valeur change, vous en serez informé. immédiatement. clientv3 fournit la méthode Watch, que nous pouvons utiliser pour surveiller les modifications d'une certaine clé dans etcd. Ce qui suit est un exemple complet :
import ( "context" "fmt" "go.etcd.io/etcd/clientv3" ) func main() { // 连接etcd config := clientv3.Config{ Endpoints: []string{"localhost:2379"}, // etcd endpoints DialTimeout: 5 * time.Second, } client, err := clientv3.New(config) if err != nil { // handle error } defer client.Close() ctx, cancel := context.WithCancel(context.Background()) defer cancel() // 监听键值对变化 rch := client.Watch(ctx, "hello") for wresp := range rch { for _, ev := range wresp.Events { fmt.Printf("%s %q: %q ", ev.Type, ev.Kv.Key, ev.Kv.Value) } } }
Dans cet exemple, nous créons un contexte et utilisons la méthode Watch pour écouter la clé "hello" dans etcd. Si la valeur d'une clé change, la méthode Watch renverra une notification contenant la paire clé-valeur modifiée. Nous pouvons parcourir ces notifications et afficher le contenu correspondant.
Cet article présente comment golang utilise etcd, y compris une introduction à la connexion d'etcd, à l'écriture et à la lecture de paires clé-valeur et à la surveillance des modifications dans les paires clé-valeur. etcd est un conteneur de stockage clé-valeur distribué très pratique, combiné aux performances efficaces et aux fonctionnalités de concurrence de Golang, il permet une gestion de configuration très flexible et efficace.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!