| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- package config
- import (
- "context"
- "fmt"
- "git.ikuban.com/server/kratos-utils/v2/initutils"
- clientv3 "go.etcd.io/etcd/client/v3"
- "log"
- "time"
- )
- func NewEtcdClient(startup *initutils.Startup) *clientv3.Client {
- if startup.RegistryType != "etcd" {
- log.Println("[WARNING] startup registry type not etcd")
- return nil
- }
- // etcd client
- etcdClient, err := clientv3.New(clientv3.Config{
- Endpoints: []string{startup.ConfigSource},
- DialTimeout: time.Second * 5,
- })
- if err != nil {
- panic(fmt.Errorf("failed to create etcd client: %w", err))
- }
- // 检查etcd连接状态
- newCtx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
- defer cancel()
- _, err = etcdClient.Maintenance.Status(newCtx, startup.ConfigSource)
- if err != nil {
- panic(fmt.Errorf("failed to get etcd status: %w", err))
- }
- return etcdClient
- }
- func NewEtcdClientWithCleanup(startup *initutils.Startup) (*clientv3.Client, func()) {
- etcdClient := NewEtcdClient(startup)
- cleanup := func() {
- etcdClient.Close()
- }
- return etcdClient, cleanup
- }
|