75 lines
2.3 KiB
Go
75 lines
2.3 KiB
Go
package grpc
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"time"
|
|
|
|
"google.golang.org/grpc"
|
|
"google.golang.org/grpc/balancer/roundrobin"
|
|
"google.golang.org/grpc/keepalive"
|
|
)
|
|
|
|
const (
|
|
grpcInitialWindowSize = 1 << 24
|
|
grpcInitialConnWindowSize = 1 << 24
|
|
grpcMaxSendMsgSize = 1 << 24
|
|
grpcMaxCallMsgSize = 1 << 24
|
|
grpcKeepAliveTime = time.Second * 10
|
|
grpcKeepAliveTimeout = time.Second * 3
|
|
grpcBackoffMaxDelay = time.Second * 3
|
|
)
|
|
|
|
func NewGRPCConn(addr string, timeout time.Duration) (*grpc.ClientConn, error) {
|
|
ctx, cancel := context.WithTimeout(context.Background(), timeout)
|
|
defer cancel()
|
|
|
|
return grpc.DialContext(ctx, addr,
|
|
[]grpc.DialOption{
|
|
grpc.WithInsecure(),
|
|
grpc.WithInitialWindowSize(grpcInitialWindowSize),
|
|
grpc.WithInitialConnWindowSize(grpcInitialConnWindowSize),
|
|
grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(grpcMaxCallMsgSize)),
|
|
grpc.WithDefaultCallOptions(grpc.MaxCallSendMsgSize(grpcMaxSendMsgSize)),
|
|
grpc.WithBackoffMaxDelay(grpcBackoffMaxDelay),
|
|
grpc.WithKeepaliveParams(keepalive.ClientParameters{
|
|
Time: grpcKeepAliveTime,
|
|
Timeout: grpcKeepAliveTimeout,
|
|
PermitWithoutStream: true,
|
|
}),
|
|
grpc.WithDefaultServiceConfig(fmt.Sprintf(`{"LoadBalancingPolicy": "%s"}`, roundrobin.Name)),
|
|
}...)
|
|
}
|
|
|
|
func NewGRPCConnWithOpts(addr string, timeout time.Duration, opts ...grpc.DialOption) (*grpc.ClientConn, error) {
|
|
ctx, cancel := context.WithTimeout(context.Background(), timeout)
|
|
defer cancel()
|
|
|
|
dialOpts := []grpc.DialOption{
|
|
grpc.WithInsecure(),
|
|
grpc.WithInitialWindowSize(grpcInitialWindowSize),
|
|
grpc.WithInitialConnWindowSize(grpcInitialConnWindowSize),
|
|
grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(grpcMaxCallMsgSize)),
|
|
grpc.WithDefaultCallOptions(grpc.MaxCallSendMsgSize(grpcMaxSendMsgSize)),
|
|
grpc.WithBackoffMaxDelay(grpcBackoffMaxDelay),
|
|
grpc.WithKeepaliveParams(keepalive.ClientParameters{
|
|
Time: grpcKeepAliveTime,
|
|
Timeout: grpcKeepAliveTimeout,
|
|
PermitWithoutStream: true,
|
|
}),
|
|
grpc.WithDefaultServiceConfig(fmt.Sprintf(`{"LoadBalancingPolicy": "%s"}`, roundrobin.Name)),
|
|
}
|
|
|
|
dialOpts = append(dialOpts, opts...)
|
|
|
|
return grpc.DialContext(ctx, addr, dialOpts...)
|
|
}
|
|
|
|
//// ClientConfig is rpc client conf.
|
|
//type ClientConfig struct {
|
|
// Dial time.Duration
|
|
// Timeout time.Duration
|
|
//
|
|
// Address string
|
|
//}
|