github.com/projecteru2/core@v0.0.0-20240321043226-06bcc1c23f58/client/client.go (about) 1 package client 2 3 import ( 4 "context" 5 "time" 6 7 "github.com/projecteru2/core/auth" 8 "github.com/projecteru2/core/client/interceptor" 9 _ "github.com/projecteru2/core/client/resolver/eru" // register grpc resolver: eru:// 10 _ "github.com/projecteru2/core/client/resolver/static" // register grpc resolver: static:// 11 pb "github.com/projecteru2/core/rpc/gen" 12 "github.com/projecteru2/core/types" 13 14 "google.golang.org/grpc" 15 "google.golang.org/grpc/credentials/insecure" 16 "google.golang.org/grpc/keepalive" 17 ) 18 19 // Client contain grpc conn 20 type Client struct { 21 addr string 22 conn *grpc.ClientConn 23 } 24 25 // NewClient new a client 26 func NewClient(ctx context.Context, addr string, authConfig types.AuthConfig) (*Client, error) { 27 cc, err := dial(ctx, addr, authConfig) 28 return &Client{ 29 addr: addr, 30 conn: cc, 31 }, err 32 } 33 34 // GetConn return connection 35 func (c *Client) GetConn() *grpc.ClientConn { 36 return c.conn 37 } 38 39 // GetRPCClient return rpc client 40 func (c *Client) GetRPCClient() pb.CoreRPCClient { 41 return pb.NewCoreRPCClient(c.conn) 42 } 43 44 func dial(ctx context.Context, addr string, authConfig types.AuthConfig) (*grpc.ClientConn, error) { 45 opts := []grpc.DialOption{ 46 grpc.WithTransportCredentials(insecure.NewCredentials()), 47 grpc.WithKeepaliveParams(keepalive.ClientParameters{Time: 6 * 60 * time.Second, Timeout: time.Second}), 48 grpc.WithDefaultServiceConfig(`{"loadBalancingPolicy":"round_robin"}`), // This sets the initial balancing policy, see https://github.com/grpc/grpc-go/blob/v1.40.x/examples/features/load_balancing/client/main.go 49 grpc.WithUnaryInterceptor(interceptor.NewUnaryRetry(interceptor.RetryOptions{Max: 0})), 50 grpc.WithStreamInterceptor(interceptor.NewStreamRetry(interceptor.RetryOptions{Max: 0})), 51 } 52 if authConfig.Username != "" { 53 opts = append(opts, grpc.WithPerRPCCredentials(auth.NewCredential(authConfig))) 54 } 55 56 return grpc.DialContext(ctx, addr, opts...) 57 }