64 lines
1.4 KiB
Plaintext
64 lines
1.4 KiB
Plaintext
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
|
|
}
|