package client import ( "context" "sync" "time" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" ) var ( // 缓存连接 key:rpc地址 value:连接指针对象 rpcConMap sync.Map // 连接超时时间 defaultTimeOut = time.Second * 1 ) // GetClientConn // @description: 获取grpc连接对象 // parameter: // @rpcAddres:连接地址 // return: // @*grpc.ClientConn:连接对象 // @error:错误对象 func GetClientConn(rpcAddres string) (*grpc.ClientConn, error) { // 从缓存获取 if con1, isok := rpcConMap.Load(rpcAddres); isok { return con1.(*grpc.ClientConn), nil } // 构造新对象 //ctx, _ := context.WithDeadline(context.Background(), time.Now().Add(time.Second*1)) var ctx, _ = context.WithTimeout(context.Background(), defaultTimeOut) con, err := grpc.DialContext(ctx, rpcAddres, grpc.WithTransportCredentials(insecure.NewCredentials())) if err != nil { return nil, err } // 加入缓存 rpcConMap.Store(rpcAddres, con) return con, nil } // ClearClientConn // @description: 根据连接地址,删除缓存的连接对象 // parameter: // @rpcAddres:连接地址 // return: func ClearClientConn(rpcAddres string) { rpcConMap.Delete(rpcAddres) } // SetDefaultTimeOut // @description: 设置连接的默认超时 // parameter: // @outTime:超时时间 // return: func SetDefaultTimeOut(outTime time.Duration) { defaultTimeOut = outTime }