Dalam sistem teragih, pengurusan konfigurasi ialah pautan yang sangat kritikal. etcd ialah bekas storan nilai kunci yang sangat tersedia, diedarkan dan konsisten yang sering digunakan dalam senario seperti penyelarasan teragih, penemuan perkhidmatan dan pengurusan konfigurasi. Golang ialah bahasa yang dikompilasi Kerana prestasi yang cekap dan ciri keselarasannya, ia telah menjadi pilihan terbaik untuk menggunakan etcd. Artikel ini akan memperkenalkan cara golang menggunakan etcd.
Muat turun versi yang sepadan dengan sistem di tapak web rasmi https://github.com/etcd-io/etcd/releases, unzip dan berlari dll.
go get go.etcd.io/etcd/clientv3
Cara menyambung etcd dalam golang disediakan oleh etcd Dilaksanakan oleh perpustakaan clientv3. Berikut ialah contoh mudah menyambung 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() }
Seterusnya kita boleh menggunakan kaedah Put and Get yang disediakan oleh clientv3 untuk Menulis dan baca pasangan nilai kunci. Kaedah Put akan menulis pasangan nilai kunci kepada etcd, dan kaedah Dapatkan akan membaca nilai kunci dari etcd. Berikut ialah contoh lengkap:
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) } }
Dengan menjalankan contoh di atas, kita boleh menulis pasangan nilai kunci dalam etcd dan membaca nilai kunci dari etcd.
Satu lagi fungsi berkuasa etcd ialah ia boleh merealisasikan pemantauan masa nyata pasangan nilai kunci melalui Jam Tangan Sekali kunci Jika pasangan nilai berubah, anda akan dimaklumkan dengan segera. clientv3 menyediakan kaedah Watch, yang boleh kita gunakan untuk memantau perubahan dalam kunci tertentu dalam etcd. Berikut ialah contoh lengkap:
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) } } }
Dalam contoh ini, kami mencipta konteks dan menggunakan kaedah Tonton untuk mendengar kekunci "hello" dalam dll. Jika nilai kunci berubah, kaedah Tonton akan mengembalikan pemberitahuan yang mengandungi pasangan nilai kunci yang diubah. Kami boleh mengulangi pemberitahuan ini dan mengeluarkan kandungan yang sepadan.
Artikel ini memperkenalkan cara golang menggunakan etcd, termasuk pengenalan kepada penyambungan etcd, menulis dan membaca pasangan nilai kunci dan memantau perubahan dalam pasangan nilai kunci. etcd ialah bekas storan nilai kunci teragih yang sangat praktikal Digabungkan dengan prestasi cekap dan ciri konkurensi golang, ia boleh mencapai pengurusan konfigurasi yang sangat fleksibel dan cekap.
Atas ialah kandungan terperinci Cara menggunakan etcd dalam golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!