123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- package zrpc
- import (
- "time"
- "github.com/wuntsong-org/go-zero-plus/core/conf"
- "github.com/wuntsong-org/go-zero-plus/core/logx"
- "github.com/wuntsong-org/go-zero-plus/zrpc/internal"
- "github.com/wuntsong-org/go-zero-plus/zrpc/internal/auth"
- "github.com/wuntsong-org/go-zero-plus/zrpc/internal/clientinterceptors"
- "google.golang.org/grpc"
- "google.golang.org/grpc/keepalive"
- )
- var (
- // WithDialOption is an alias of internal.WithDialOption.
- WithDialOption = internal.WithDialOption
- // WithNonBlock sets the dialing to be nonblock.
- WithNonBlock = internal.WithNonBlock
- // WithStreamClientInterceptor is an alias of internal.WithStreamClientInterceptor.
- WithStreamClientInterceptor = internal.WithStreamClientInterceptor
- // WithTimeout is an alias of internal.WithTimeout.
- WithTimeout = internal.WithTimeout
- // WithTransportCredentials return a func to make the gRPC calls secured with given credentials.
- WithTransportCredentials = internal.WithTransportCredentials
- // WithUnaryClientInterceptor is an alias of internal.WithUnaryClientInterceptor.
- WithUnaryClientInterceptor = internal.WithUnaryClientInterceptor
- )
- type (
- // Client is an alias of internal.Client.
- Client = internal.Client
- // ClientOption is an alias of internal.ClientOption.
- ClientOption = internal.ClientOption
- // A RpcClient is a rpc client.
- RpcClient struct {
- client Client
- }
- )
- // MustNewClient returns a Client, exits on any error.
- func MustNewClient(c RpcClientConf, options ...ClientOption) Client {
- cli, err := NewClient(c, options...)
- logx.Must(err)
- return cli
- }
- // NewClient returns a Client.
- func NewClient(c RpcClientConf, options ...ClientOption) (Client, error) {
- var opts []ClientOption
- if c.HasCredential() {
- opts = append(opts, WithDialOption(grpc.WithPerRPCCredentials(&auth.Credential{
- App: c.App,
- Token: c.Token,
- })))
- }
- if c.NonBlock {
- opts = append(opts, WithNonBlock())
- }
- if c.Timeout > 0 {
- opts = append(opts, WithTimeout(time.Duration(c.Timeout)*time.Millisecond))
- }
- if c.KeepaliveTime > 0 {
- opts = append(opts, WithDialOption(grpc.WithKeepaliveParams(keepalive.ClientParameters{
- Time: c.KeepaliveTime,
- })))
- }
- opts = append(opts, options...)
- target, err := c.BuildTarget()
- if err != nil {
- return nil, err
- }
- client, err := internal.NewClient(target, c.Middlewares, opts...)
- if err != nil {
- return nil, err
- }
- return &RpcClient{
- client: client,
- }, nil
- }
- // NewClientWithTarget returns a Client with connecting to given target.
- func NewClientWithTarget(target string, opts ...ClientOption) (Client, error) {
- var config RpcClientConf
- if err := conf.FillDefault(&config); err != nil {
- return nil, err
- }
- config.Target = target
- return NewClient(config, opts...)
- }
- // Conn returns the underlying grpc.ClientConn.
- func (rc *RpcClient) Conn() *grpc.ClientConn {
- return rc.client.Conn()
- }
- // DontLogClientContentForMethod disable logging content for given method.
- func DontLogClientContentForMethod(method string) {
- clientinterceptors.DontLogContentForMethod(method)
- }
- // SetClientSlowThreshold sets the slow threshold on client side.
- func SetClientSlowThreshold(threshold time.Duration) {
- clientinterceptors.SetSlowThreshold(threshold)
- }
- // WithCallTimeout return a call option with given timeout to make a method call.
- func WithCallTimeout(timeout time.Duration) grpc.CallOption {
- return clientinterceptors.WithCallTimeout(timeout)
- }
|